65 lines
1.0 KiB
TypeScript
65 lines
1.0 KiB
TypeScript
/**
|
|
* User Interface
|
|
* Represents a registered user in the system
|
|
*/
|
|
export interface User {
|
|
id: string;
|
|
username: string;
|
|
email: string;
|
|
role: 'user' | 'admin';
|
|
isActive: boolean;
|
|
totalQuizzesTaken?: number;
|
|
totalQuestionsAnswered?: number;
|
|
totalCorrectAnswers?: number;
|
|
currentStreak?: number;
|
|
longestStreak?: number;
|
|
averageScore?: number;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
/**
|
|
* User Registration Request
|
|
*/
|
|
export interface UserRegistration {
|
|
username: string;
|
|
email: string;
|
|
password: string;
|
|
guestSessionId?: string;
|
|
}
|
|
|
|
/**
|
|
* User Login Request
|
|
*/
|
|
export interface UserLogin {
|
|
email: string;
|
|
password: string;
|
|
}
|
|
|
|
/**
|
|
* Auth Response
|
|
*/
|
|
export interface AuthResponse {
|
|
success: boolean;
|
|
data: {
|
|
user: User;
|
|
token: string;
|
|
};
|
|
|
|
message?: string;
|
|
migratedStats?: {
|
|
quizzesTaken: number;
|
|
score: number;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Auth State (for signal management)
|
|
*/
|
|
export interface AuthState {
|
|
user: User | null;
|
|
isAuthenticated: boolean;
|
|
isLoading: boolean;
|
|
error: string | null;
|
|
}
|