initial commit
This commit is contained in:
354
src/lib/types.ts
Normal file
354
src/lib/types.ts
Normal file
@@ -0,0 +1,354 @@
|
||||
// API Response Types based on Swagger schema
|
||||
|
||||
export interface MessageSchema {
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface ErrorSchema {
|
||||
detail: string;
|
||||
}
|
||||
|
||||
// Auth Types
|
||||
export interface TokenSchema {
|
||||
access_token: string;
|
||||
refresh_token: string;
|
||||
}
|
||||
|
||||
export interface MajorOption {
|
||||
code: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
export interface UserProfileSchema {
|
||||
id: number;
|
||||
email: string;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
profile_picture?: string;
|
||||
bio?: string;
|
||||
student_id?: string | null;
|
||||
year_of_study?: number;
|
||||
university?: string;
|
||||
major?: string;
|
||||
date_joined: string;
|
||||
|
||||
is_email_verified?: boolean;
|
||||
is_active?: boolean;
|
||||
is_staff?: boolean;
|
||||
is_superuser?: boolean;
|
||||
is_committee?: boolean;
|
||||
is_deleted?: boolean;
|
||||
deleted_at?: string | null;
|
||||
}
|
||||
|
||||
export interface UserListSchema {
|
||||
id: number;
|
||||
username: string;
|
||||
email: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
full_name?: string | null;
|
||||
is_active: boolean;
|
||||
is_staff: boolean;
|
||||
is_superuser: boolean;
|
||||
date_joined: string;
|
||||
}
|
||||
|
||||
export interface UserRegistrationSchema {
|
||||
email: string;
|
||||
password: string;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
student_id: string;
|
||||
year_of_study: number;
|
||||
major: string;
|
||||
university: string;
|
||||
}
|
||||
|
||||
export type UserUpdateSchema = {
|
||||
first_name?: string | null;
|
||||
last_name?: string | null;
|
||||
bio?: string | null;
|
||||
year_of_study?: number | null;
|
||||
major?: string | null;
|
||||
university?: string | null;
|
||||
student_id?: number | null;
|
||||
};
|
||||
|
||||
|
||||
export interface UserLoginSchema {
|
||||
email: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
export interface TokenRefreshIn {
|
||||
refresh_token: string;
|
||||
}
|
||||
|
||||
export interface UsernameCheckSchema {
|
||||
available: boolean;
|
||||
}
|
||||
|
||||
export interface PasswordResetRequestSchema {
|
||||
email: string;
|
||||
}
|
||||
|
||||
export interface PasswordResetConfirmSchema {
|
||||
token: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
// Blog Types
|
||||
export interface PostListSchema {
|
||||
id: number;
|
||||
title: string;
|
||||
slug: string;
|
||||
excerpt?: string;
|
||||
featured_image?: string;
|
||||
author: {
|
||||
id: number;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
profile_picture?: string;
|
||||
};
|
||||
category?: {
|
||||
id: number;
|
||||
name: string;
|
||||
slug: string;
|
||||
description?: string;
|
||||
};
|
||||
tags: Array<{
|
||||
id: number;
|
||||
name: string;
|
||||
slug: string;
|
||||
}>;
|
||||
status: string;
|
||||
published_at?: string;
|
||||
created_at: string;
|
||||
is_featured: boolean;
|
||||
reading_time?: number;
|
||||
}
|
||||
|
||||
export interface PostDetailSchema extends PostListSchema {
|
||||
content: string;
|
||||
updated_at: string;
|
||||
views_count?: number;
|
||||
}
|
||||
|
||||
export interface PostCreateSchema {
|
||||
title: string;
|
||||
content: string;
|
||||
summary: string;
|
||||
category_id?: number;
|
||||
tag_ids?: number[];
|
||||
featured_image?: string;
|
||||
is_featured?: boolean;
|
||||
status?: 'draft' | 'published';
|
||||
}
|
||||
|
||||
export interface CommentSchema {
|
||||
id: number;
|
||||
content: string;
|
||||
author: {
|
||||
id: number;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
};
|
||||
post_id: number;
|
||||
post_title: string;
|
||||
post_slug: string;
|
||||
parent_id?: number;
|
||||
created_at: string;
|
||||
is_approved: boolean;
|
||||
}
|
||||
|
||||
export interface CommentCreateSchema {
|
||||
content: string;
|
||||
parent_id?: number;
|
||||
}
|
||||
|
||||
export interface CategorySchema {
|
||||
id: number;
|
||||
name: string;
|
||||
slug: string;
|
||||
description?: string;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface TagSchema {
|
||||
id: number;
|
||||
name: string;
|
||||
slug: string;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
// Events Types
|
||||
export interface EventListItemSchema {
|
||||
id: number;
|
||||
title: string;
|
||||
slug: string;
|
||||
description: string;
|
||||
featured_image?: string | null;
|
||||
absolute_featured_image_url?: string | null;
|
||||
event_type: 'online' | 'on_site' | 'hybrid';
|
||||
address?: string | null;
|
||||
location?: string | null;
|
||||
online_link?: string | null;
|
||||
start_time: string; // ISO
|
||||
end_time: string; // ISO
|
||||
registration_start_date?: string | null;
|
||||
registration_end_date?: string | null;
|
||||
capacity?: number | null;
|
||||
price?: number | null;
|
||||
status: 'draft' | 'published' | 'cancelled' | 'completed';
|
||||
registration_count: number;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface EventGalleryItem {
|
||||
id: number;
|
||||
title: string;
|
||||
description: string;
|
||||
absolute_image_url?: string | null;
|
||||
width?: number;
|
||||
height?: number;
|
||||
}
|
||||
|
||||
export interface EventDetailSchema extends EventListItemSchema {
|
||||
description_html: string;
|
||||
gallery_images: EventGalleryItem[];
|
||||
updated_at: string;
|
||||
registration_success_markdown: string;
|
||||
}
|
||||
|
||||
export interface EventCreateSchema {
|
||||
title: string;
|
||||
description: string;
|
||||
start_date: string;
|
||||
end_date?: string;
|
||||
location: string;
|
||||
capacity?: number;
|
||||
event_image?: string;
|
||||
requirements?: string;
|
||||
is_registration_open?: boolean;
|
||||
}
|
||||
|
||||
export interface PaymentAdminSchema {
|
||||
id: number;
|
||||
authority?: string | null;
|
||||
ref_id?: string | null;
|
||||
status: number;
|
||||
status_label: string;
|
||||
base_amount: number;
|
||||
discount_amount: number;
|
||||
amount: number;
|
||||
verified_at?: string | null;
|
||||
created_at: string;
|
||||
discount_code?: string | null;
|
||||
}
|
||||
|
||||
export interface RegistrationAdminSchema {
|
||||
id: number;
|
||||
ticket_id: string;
|
||||
status: 'pending' | 'confirmed' | 'cancelled' | 'attended';
|
||||
status_label: string;
|
||||
registered_at: string;
|
||||
final_price?: number | null;
|
||||
discount_amount?: number | null;
|
||||
user: {
|
||||
id: number;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
email: string;
|
||||
};
|
||||
payments: PaymentAdminSchema[];
|
||||
}
|
||||
|
||||
export interface EventAdminDetailSchema extends EventDetailSchema {
|
||||
registrations: RegistrationAdminSchema[];
|
||||
}
|
||||
export interface EventUpdateSchema {
|
||||
title?: string;
|
||||
description?: string;
|
||||
event_type?: 'online' | 'on_site' | 'hybrid';
|
||||
address?: string | null;
|
||||
location?: string | null;
|
||||
online_link?: string | null;
|
||||
start_time?: string;
|
||||
end_time?: string | null;
|
||||
registration_start_date?: string | null;
|
||||
registration_end_date?: string | null;
|
||||
capacity?: number | null;
|
||||
price?: number | null;
|
||||
status?: 'draft' | 'published' | 'cancelled' | 'completed';
|
||||
gallery_image_ids?: number[] | null;
|
||||
}
|
||||
|
||||
export interface EventRegistrationSchema {
|
||||
id: number;
|
||||
status: 'pending' | 'confirmed' | 'cancelled' | 'attended';
|
||||
ticket_id: string;
|
||||
registered_at: string;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
user: {
|
||||
id: number;
|
||||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
};
|
||||
event_id: number;
|
||||
}
|
||||
|
||||
export interface RegistrationStatusSchema {
|
||||
is_registered: boolean;
|
||||
}
|
||||
|
||||
export interface MyEventRegistrationSchema {
|
||||
id: number;
|
||||
created_at: string;
|
||||
status: 'pending' | 'confirmed' | 'cancelled' | 'attended';
|
||||
event: EventListItemSchema;
|
||||
}
|
||||
|
||||
// Gallery Types
|
||||
export interface GalleryImageSchema {
|
||||
id: number;
|
||||
title: string;
|
||||
description?: string;
|
||||
image: string;
|
||||
uploaded_by: {
|
||||
id: number;
|
||||
username: string;
|
||||
};
|
||||
created_at: string;
|
||||
tags: TagSchema[];
|
||||
}
|
||||
|
||||
export interface GalleryImageCreateSchema {
|
||||
title: string;
|
||||
description?: string;
|
||||
tag_ids?: number[];
|
||||
}
|
||||
|
||||
// Pagination
|
||||
export interface PaginatedResponse<T> {
|
||||
results: T[];
|
||||
count: number;
|
||||
next?: string;
|
||||
previous?: string;
|
||||
}
|
||||
|
||||
// payment
|
||||
export interface CreatePaymentOut {
|
||||
start_pay_url: string;
|
||||
authority: string;
|
||||
base_amount: number;
|
||||
discount_amount: number;
|
||||
amount: number;
|
||||
}
|
||||
Reference in New Issue
Block a user