working on onboarding flow
This commit is contained in:
1 parent
868eaa5e3d
commit
d3a36b6103
19 files changed
+2062
-393
No files matched your search
@@ -78,15 +78,31 @@ export async function POST(req: Request) {
|
||||
);
|
||||
}
|
||||
|
||||
// Determine role from metadata or default to 'client'
|
||||
// Determine role & gym from metadata
|
||||
const role =
|
||||
(public_metadata?.role as "admin" | "trainer" | "client") || "client";
|
||||
(public_metadata?.role as
|
||||
| "superAdmin"
|
||||
| "admin"
|
||||
| "trainer"
|
||||
| "client"
|
||||
| "generalUser") || "client";
|
||||
const gymId = (public_metadata?.gymId as string | null) ?? null;
|
||||
const inviterUserId =
|
||||
(public_metadata?.inviterUserId as string | undefined) ?? undefined;
|
||||
const roleAssigned =
|
||||
(public_metadata?.roleAssigned as
|
||||
| "superAdmin"
|
||||
| "admin"
|
||||
| "trainer"
|
||||
| "client"
|
||||
| "generalUser"
|
||||
| undefined) ?? role;
|
||||
|
||||
// Insert user into database with Clerk's user ID
|
||||
const now = new Date().toISOString();
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO users (id, email, firstName, lastName, password, phone, role, createdAt, updatedAt)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
INSERT INTO users (id, email, first_name, last_name, password, phone, role, gym_id, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
|
||||
stmt.run(
|
||||
@@ -97,11 +113,57 @@ export async function POST(req: Request) {
|
||||
"", // Clerk handles authentication
|
||||
null, // phone
|
||||
role,
|
||||
gymId,
|
||||
now,
|
||||
now,
|
||||
);
|
||||
|
||||
console.log(`✅ User ${id} created in database`);
|
||||
// If this is a client invited by a trainer, create trainer-client link
|
||||
if (roleAssigned === "client" && inviterUserId && gymId) {
|
||||
const inviterRow = db
|
||||
.prepare("SELECT role FROM users WHERE id = ?")
|
||||
.get(inviterUserId) as { role?: string } | undefined;
|
||||
|
||||
if (inviterRow?.role === "trainer") {
|
||||
const linkId = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
|
||||
const linkStmt = db.prepare(`
|
||||
INSERT INTO trainer_clients (id, trainer_user_id, client_user_id, gym_id, created_at)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
`);
|
||||
linkStmt.run(
|
||||
linkId,
|
||||
inviterUserId,
|
||||
id,
|
||||
gymId,
|
||||
new Date().toISOString(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// If this is a trainer without a gymId but has an inviter, inherit inviter's gymId
|
||||
if (
|
||||
(roleAssigned === "trainer" || role === "trainer") &&
|
||||
!gymId &&
|
||||
inviterUserId
|
||||
) {
|
||||
const inviterGymRow = db
|
||||
.prepare("SELECT gymId FROM users WHERE id = ?")
|
||||
.get(inviterUserId) as { gymId?: string } | undefined;
|
||||
|
||||
if (inviterGymRow?.gym_id) {
|
||||
const inheritStmt = db.prepare(`
|
||||
UPDATE users
|
||||
SET gym_id = ?, updated_at = ?
|
||||
WHERE id = ?
|
||||
`);
|
||||
inheritStmt.run(inviterGymRow.gym_id, new Date().toISOString(), id);
|
||||
gymId = inviterGymRow.gym_id;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(
|
||||
`✅ User ${id} created in database (role=${role}, gymId=${gymId ?? "null"})`,
|
||||
);
|
||||
db.close();
|
||||
break;
|
||||
}
|
||||
@@ -124,15 +186,21 @@ export async function POST(req: Request) {
|
||||
);
|
||||
}
|
||||
|
||||
// Determine role from metadata
|
||||
// Determine role & gym from metadata
|
||||
const role =
|
||||
(public_metadata?.role as "admin" | "trainer" | "client") || "client";
|
||||
(public_metadata?.role as
|
||||
| "superAdmin"
|
||||
| "admin"
|
||||
| "trainer"
|
||||
| "client"
|
||||
| "generalUser") || "client";
|
||||
const gymId = (public_metadata?.gymId as string | null) ?? null;
|
||||
|
||||
// Update user in database
|
||||
const now = new Date().toISOString();
|
||||
const stmt = db.prepare(`
|
||||
UPDATE users
|
||||
SET email = ?, firstName = ?, lastName = ?, role = ?, updatedAt = ?
|
||||
SET email = ?, first_name = ?, last_name = ?, role = ?, gym_id = ?, updated_at = ?
|
||||
WHERE id = ?
|
||||
`);
|
||||
|
||||
@@ -141,10 +209,33 @@ export async function POST(req: Request) {
|
||||
first_name || "",
|
||||
last_name || "",
|
||||
role,
|
||||
gymId,
|
||||
now,
|
||||
id,
|
||||
);
|
||||
|
||||
// If user is a trainer and gymId is missing, attempt to inherit from inviter when available
|
||||
if (
|
||||
role === "trainer" &&
|
||||
!gymId &&
|
||||
evt.data.public_metadata?.inviterUserId
|
||||
) {
|
||||
const inviterUserId = String(evt.data.public_metadata.inviterUserId);
|
||||
const inviterGymRow = db
|
||||
.prepare("SELECT gym_id FROM users WHERE id = ?")
|
||||
.get(inviterUserId) as { gym_id?: string } | undefined;
|
||||
|
||||
if (inviterGymRow?.gymId) {
|
||||
const inheritStmt = db.prepare(`
|
||||
UPDATE users
|
||||
SET gym_id = ?, updated_at = ?
|
||||
WHERE id = ?
|
||||
`);
|
||||
inheritStmt.run(inviterGymRow.gym_id, new Date().toISOString(), id);
|
||||
gymId = inviterGymRow.gym_id;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ User ${id} updated in database`);
|
||||
db.close();
|
||||
break;
|
||||
|
||||
Reference in new issue
Block a user