Implement basic service and api for accounts

This commit is contained in:
Dominic Ferrando
2026-08-15 14:53:36 -04:00
parent 2d20f5e893
commit e96c40c9c7
3 changed files with 109 additions and 7 deletions
+25 -2
View File
@@ -20,10 +20,11 @@ import { CalculatorService, CalculatorUnavailableError } from "./services/calcul
import { StandardsParamsSchema } from "@blade-and-brawn/calculator";
import { StandardsService } from "./services/standards";
import { EventsService, EventStatusSchema } from "./services/events";
import { AccountsService } from "./services/accounts";
// CONSTANTS
// -----------------------
const EVENT_QUEUE_MANAGE_DELAY_MS = 1000 // 1 sec
const EVENT_QUEUE_MANAGE_DELAY_MS = 1000 // 1 sec
const JWT_EXP = "1d";
// SERVICES
@@ -32,8 +33,9 @@ const s = (() => {
const Standards = new StandardsService();
const Calculator = new CalculatorService(DEFAULT_NAME);
const Commerce = new CommerceService();
const Accounts = new AccountsService(Calculator);
const Events = new EventsService();
return { Standards, Calculator, Commerce, Events };
return { Standards, Calculator, Commerce, Accounts, Events };
})();
// QUEUES
@@ -337,6 +339,27 @@ export const app = new Elysia()
.get("/groups", async ({ }) => queues.map((q) => q.group))
)
// ACCOUNTS
.group("/accounts", (app) => app
// Non-authenticated
.get("/:id/stats", async ({ params: { id } }) => {
const stats = await s.Accounts.stats(id);
if (!stats) throw new NotFoundError("Account stats not found");
return stats;
}, {
params: t.Object({ id: t.String() })
})
// Authenticated
.guard({ auth: true })
.get("/:id", async ({ params: { id } }) => {
const account = await s.Accounts.get(id);
if (!account) throw new NotFoundError("Account not found");
return account;
}, {
params: t.Object({ id: t.String() })
})
)
// WEBHOOKS
.post("/webhooks/printful", async ({ body, query }) => {
// https://webflow.com/integrations/printful