working on onboarding flow
This commit is contained in:
1 parent
868eaa5e3d
commit
d3a36b6103
19 files changed
+2062
-393
No files matched your search
@@ -6,10 +6,32 @@ export const users = sqliteTable("users", {
|
||||
firstName: text("first_name").notNull(),
|
||||
lastName: text("last_name").notNull(),
|
||||
password: text("password"), // Optional - Clerk handles authentication
|
||||
role: text("role", { enum: ["superAdmin", "admin", "trainer", "client"] })
|
||||
role: text("role", {
|
||||
enum: ["superAdmin", "admin", "trainer", "client", "generalUser"],
|
||||
})
|
||||
.notNull()
|
||||
.default("client"),
|
||||
phone: text("phone"),
|
||||
// Remove direct foreign key reference to avoid circular dependency; validate at application level
|
||||
gymId: text("gym_id"),
|
||||
createdAt: integer("created_at", { mode: "timestamp" })
|
||||
.notNull()
|
||||
.$defaultFn(() => new Date()),
|
||||
updatedAt: integer("updated_at", { mode: "timestamp" })
|
||||
.notNull()
|
||||
.$defaultFn(() => new Date()),
|
||||
});
|
||||
|
||||
export const gyms = sqliteTable("gyms", {
|
||||
id: text("id").primaryKey(),
|
||||
name: text("name").notNull(),
|
||||
location: text("location"),
|
||||
status: text("status", { enum: ["active", "inactive"] })
|
||||
.notNull()
|
||||
.default("active"),
|
||||
adminUserId: text("admin_user_id")
|
||||
.notNull()
|
||||
.references(() => users.id, { onDelete: "cascade" }),
|
||||
createdAt: integer("created_at", { mode: "timestamp" })
|
||||
.notNull()
|
||||
.$defaultFn(() => new Date()),
|
||||
@@ -144,7 +166,7 @@ export const fitnessGoals = sqliteTable("fitness_goals", {
|
||||
.references(() => users.id, { onDelete: "cascade" }),
|
||||
fitnessProfileId: text("fitness_profile_id").references(
|
||||
() => fitnessProfiles.id,
|
||||
{ onDelete: "cascade" }
|
||||
{ onDelete: "cascade" },
|
||||
),
|
||||
|
||||
// Goal details
|
||||
@@ -198,6 +220,24 @@ export const fitnessGoals = sqliteTable("fitness_goals", {
|
||||
.$defaultFn(() => new Date()),
|
||||
});
|
||||
|
||||
// Removed local invitations table; Clerk invitations are the source of truth
|
||||
|
||||
export const trainerClients = sqliteTable("trainer_clients", {
|
||||
id: text("id").primaryKey(),
|
||||
trainerUserId: text("trainer_user_id")
|
||||
.notNull()
|
||||
.references(() => users.id, { onDelete: "cascade" }),
|
||||
clientUserId: text("client_user_id")
|
||||
.notNull()
|
||||
.references(() => users.id, { onDelete: "cascade" }),
|
||||
gymId: text("gym_id")
|
||||
.notNull()
|
||||
.references(() => gyms.id, { onDelete: "cascade" }),
|
||||
createdAt: integer("created_at", { mode: "timestamp" })
|
||||
.notNull()
|
||||
.$defaultFn(() => new Date()),
|
||||
});
|
||||
|
||||
export const recommendations = sqliteTable("recommendations", {
|
||||
id: text("id").primaryKey(),
|
||||
userId: text("user_id")
|
||||
@@ -243,4 +283,3 @@ export type FitnessGoal = typeof fitnessGoals.$inferSelect;
|
||||
export type NewFitnessGoal = typeof fitnessGoals.$inferInsert;
|
||||
export type Recommendation = typeof recommendations.$inferSelect;
|
||||
export type NewRecommendation = typeof recommendations.$inferInsert;
|
||||
|
||||
Reference in new issue
Block a user