export interface Pagination { data: T[]; links: { first: string; last: string; }; meta: { current_page: number; from: number; last_page: number; per_page: number; to: number; total: number; } } export interface QuestionVariant { id: number; text: string; } export enum QuestionTypes { Single = "single", Multiple = "multiple", Text = "text" } export interface QuestionResponse { id: number; title: string; description: string; type: QuestionTypes; difficulty: number; variants: QuestionVariant[]; correct_answers: number[]|string[]; category_id: number; category: CategoryResponse; author_id: number; author: UserResponse; created_at: string; updated_at: string; } export interface CategoryResponse { id: number; name: string; questions_count: number; user_tests_count: number; created_at: string; } export interface TestResponse { id: number; title: string; description: string; category_id: number; category: CategoryResponse; is_available: boolean; author_id: number; author: UserResponse; questions?: QuestionResponse[]; questions_count: number; closed_at: string; created_at: string; updated_at: string; } export interface AnswerResponse { id: number; question_id: number; user_test_id: number; question: QuestionResponse; answer?: number[] | string[]; user_id: number; is_correct: boolean; created_at: string; updated_at: string; } export interface UserTestResponse { id: number; test_id: number; user_id: number; user: UserResponse; closed_at: string; is_completed: boolean; score: number; is_available: boolean; answers: AnswerResponse[]; created_at: string; updated_at: string; } export enum UserTypes { Admin = "admin", Creator = "creator", User = "user", Banned = "banned" } export interface UserResponse { id: number; username: string; email: string; email_verified_at: string; type: UserTypes; created_at: string; updated_at: string; } export interface AuthLoginResponse { access_token: string; token_type: string; user: UserResponse; }