fix(GRO-1272): auto-provision staff record on first OIDC login #19

Merged
groombook-engineer[bot] merged 4 commits from fleaflicker/gro-1272-auto-provision-staff-dev into dev 2026-05-21 14:16:42 +00:00
Showing only changes of commit ce83b1847d - Show all commits
+25 -1
View File
@@ -1,5 +1,5 @@
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
import type { MiddlewareHandler } from "hono";
import { and, eq, getDb, sql, staff } from "../db/index.js";
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
import { and, eq, getDb, sql, staff, user } from "../db/index.js";
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
export type StaffRole = "groomer" | "receptionist" | "manager";
export type StaffRow = typeof staff.$inferSelect;
@@ -110,6 +110,30 @@ export const resolveStaffMiddleware: MiddlewareHandler<AppEnv> = async (
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
return;
}
}
// Auto-provision: no staff record exists for this user at all, but a valid
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
// Better-Auth user session exists (jwt.sub = user.id from user table).
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
// Create a minimal groomer staff record on first login.
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
const [userRow] = await db
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.select({ id: user.id, name: user.name, email: user.email })
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.from(user)
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.where(eq(user.id, jwt.sub))
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.limit(1);
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
if (userRow) {
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
const [newStaff] = await db
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.insert(staff)
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.values({
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
name: userRow.name ?? jwt.email?.split("@")[0] ?? "Unknown",
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
email: userRow.email ?? jwt.email ?? "",
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
userId: jwt.sub,
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
role: "groomer",
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
isSuperUser: false,
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
active: true,
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
})
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
.returning();
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
c.set("staff", newStaff);
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
await next();
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
return;
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
}
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
return c.json(
{ error: "Forbidden: no staff record found for authenticated user" },
403
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .
Review

TS2769: is — add a guard before to avoid passing .

TS2769: is — add a guard before to avoid passing .