sync user

from clerk -> db
This commit is contained in:
dimitar committed 2025-11-10 05:11:51 +01:00
1 parent 3a58d420d6
commit 64bc4aa58b
5 files changed
+549 -120

No files matched your search

+66 -61
View File
@@ -1,83 +1,88 @@
// Database Entity Types
export interface User {
id: string
email: string
firstName: string
lastName: string
password: string
phone?: string
role: 'admin' | 'client'
createdAt: Date
updatedAt: Date
id: string;
email: string;
firstName: string;
lastName: string;
password: string;
phone?: string;
role: "admin" | "trainer" | "client";
createdAt: Date;
updatedAt: Date;
}
export interface Client {
id: string
userId: string
membershipType: 'basic' | 'premium' | 'vip'
membershipStatus: 'active' | 'inactive' | 'expired'
joinDate: Date
id: string;
userId: string;
membershipType: "basic" | "premium" | "vip";
membershipStatus: "active" | "inactive" | "expired";
joinDate: Date;
}
export interface FitnessProfile {
userId: string
height: string
weight: string
age: string
gender: 'male' | 'female' | 'other'
activityLevel: 'sedentary' | 'light' | 'moderate' | 'active' | 'very_active'
fitnessGoals: string[]
exerciseHabits: string
dietHabits: string
medicalConditions: string
createdAt: Date
updatedAt: Date
userId: string;
height: string;
weight: string;
age: string;
gender: "male" | "female" | "other";
activityLevel: "sedentary" | "light" | "moderate" | "active" | "very_active";
fitnessGoals: string[];
exerciseHabits: string;
dietHabits: string;
medicalConditions: string;
createdAt: Date;
updatedAt: Date;
}
// Database Interface - allows us to swap implementations
export interface IDatabase {
// Connection management
connect(): Promise<void>
disconnect(): Promise<void>
connect(): Promise<void>;
disconnect(): Promise<void>;
// User operations
createUser(user: Omit<User, 'id' | 'createdAt' | 'updatedAt'>): Promise<User>
getUserById(id: string): Promise<User | null>
getUserByEmail(email: string): Promise<User | null>
getAllUsers(): Promise<User[]>
updateUser(id: string, updates: Partial<User>): Promise<User | null>
deleteUser(id: string): Promise<boolean>
createUser(user: Omit<User, "id" | "createdAt" | "updatedAt">): Promise<User>;
getUserById(id: string): Promise<User | null>;
getUserByEmail(email: string): Promise<User | null>;
getAllUsers(): Promise<User[]>;
updateUser(id: string, updates: Partial<User>): Promise<User | null>;
deleteUser(id: string): Promise<boolean>;
// Client operations
createClient(client: Omit<Client, 'id'>): Promise<Client>
getClientById(id: string): Promise<Client | null>
getClientByUserId(userId: string): Promise<Client | null>
getAllClients(): Promise<Client[]>
updateClient(id: string, updates: Partial<Client>): Promise<Client | null>
deleteClient(id: string): Promise<boolean>
createClient(client: Omit<Client, "id">): Promise<Client>;
getClientById(id: string): Promise<Client | null>;
getClientByUserId(userId: string): Promise<Client | null>;
getAllClients(): Promise<Client[]>;
updateClient(id: string, updates: Partial<Client>): Promise<Client | null>;
deleteClient(id: string): Promise<boolean>;
// Fitness Profile operations
createFitnessProfile(profile: Omit<FitnessProfile, 'createdAt' | 'updatedAt'>): Promise<FitnessProfile>
getFitnessProfileByUserId(userId: string): Promise<FitnessProfile | null>
getAllFitnessProfiles(): Promise<FitnessProfile[]>
updateFitnessProfile(userId: string, updates: Partial<FitnessProfile>): Promise<FitnessProfile | null>
deleteFitnessProfile(userId: string): Promise<boolean>
createFitnessProfile(
profile: Omit<FitnessProfile, "createdAt" | "updatedAt">,
): Promise<FitnessProfile>;
getFitnessProfileByUserId(userId: string): Promise<FitnessProfile | null>;
getAllFitnessProfiles(): Promise<FitnessProfile[]>;
updateFitnessProfile(
userId: string,
updates: Partial<FitnessProfile>,
): Promise<FitnessProfile | null>;
deleteFitnessProfile(userId: string): Promise<boolean>;
}
// Database configuration
export interface DatabaseConfig {
type: 'sqlite' | 'postgresql' | 'mysql' | 'mongodb'
type: "sqlite" | "postgresql" | "mysql" | "mongodb";
connection: {
filename?: string // for SQLite
host?: string // for SQL databases
port?: number
database?: string
username?: string
password?: string
}
filename?: string; // for SQLite
host?: string; // for SQL databases
port?: number;
database?: string;
username?: string;
password?: string;
};
options?: {
logging?: boolean
poolSize?: number
timeout?: number
}
}
logging?: boolean;
poolSize?: number;
timeout?: number;
};
}