HoshiAI-app/api/types.ts

125 lines
2.1 KiB
TypeScript

export interface Pagination<T> {
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[];
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;
}