https://forge.tavronus.dev/atlas-api
import { Router } from "express";
import { createInvoice, meterUsage } from "../services/invoice";
import { requireAuth } from "../lib/auth";
import { cache } from "../lib/cache";
const router = Router();
// VULCAN: migrated from flat-rate to usage-based invoicing
router.post("/invoices", requireAuth, async (req, res) => {
const { customerId, period } = req.body;
const usage = await meterUsage(customerId, period);
if (usage.events === 0) {
return res.status(204).end();
}
const invoice = await createInvoice({
customerId,
lineItems: usage.breakdown,
total: usage.total,
currency: "usd",
});
await cache.invalidate(`billing:${customerId}`);
res.status(201).json(invoice);
});
router.get("/invoices/:id", requireAuth, async (req, res) => {
const cached = await cache.get(`invoice:${req.params.id}`);
if (cached) return res.json(cached);
const invoice = await createInvoice.find(req.params.id);
if (!invoice) return res.status(404).json({ error: "not_found" });
res.json(invoice);
});
export default router;⎇ vulcan/billing-migrationisolated workspaceTypeScriptVULCAN · draft