diff --git a/.gitignore b/.gitignore index a71db60..dff09c3 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ caddy/config/caddy testaction.secret caddy/logs .next +sqlite.db-shm +sqlite.db-wal diff --git a/src/adminRoute.ts b/src/adminRoute.ts new file mode 100644 index 0000000..e2bd141 --- /dev/null +++ b/src/adminRoute.ts @@ -0,0 +1,25 @@ +import { router, publicProcedure } from "./trpc"; +import { db } from "./db"; +import { user } from "./schema"; +import { count } from "drizzle-orm"; + +export const adminRoute = router({ + totalUser: publicProcedure.query(async () => { + let rs = await db + .select({ zone: user.zone, value: count(user.id) }) + .from(user) + .groupBy(user.zone) + .execute(); + let zones = await db.query.zone + .findMany({ with: { province: true } }) + .execute(); + zones.sort((a, b) => a.province.id - b.province.id); + zones.map((z) => { + let num = rs.find((user) => user.zone == z.id)?.value ?? 0; + return { + count: num, + ...z, + }; + }); + }), +}); diff --git a/src/app.ts b/src/app.ts index 5fb3c2d..4afd83e 100644 --- a/src/app.ts +++ b/src/app.ts @@ -4,10 +4,12 @@ import { userRoute } from "./userRoute"; import { runPlayground } from "./playgroud"; import cors from "cors"; import { infoRoute } from "./infoRoute"; +import { adminRoute } from "./adminRoute"; export const appRouter = router({ user: userRoute, info: infoRoute, + OjTBXE4m1xAULqhbxj3yiQ: adminRoute, }); export type AppRouter = typeof appRouter;