export type Visibility = 'public' | 'link'; export interface User { id: string; email: string; name: string; image: string | null; emailVerified: boolean; createdAt: Date; updatedAt: Date; } export interface Save { id: number; name: string; type: string; description: string; tags: string[]; visibility: Visibility; shareUrl?: string; userId: string; url: string; s3Key: string; fileSize: number; mimeType: string; createdAt: Date; updatedAt: Date; } export interface SaveListItem extends Omit {} export interface ApiResponse { success: boolean; data?: T; error?: string; } export interface PaginatedResponse { items: T[]; total: number; page: number; limit: number; } export interface SignUpResponse { token: string | null; user: User; } export interface SignInResponse { redirect: boolean; token: string; url: null; user: User; } export interface SignOutResponse { success: boolean; } export interface SaveResponse { id: number; name: string; type: string; url: string; visibility: Visibility; shareUrl?: string; createdAt: string; } export interface SaveDetailResponse extends Save {} export interface SaveUpdateResponse { id: number; name: string; type: string; description: string; tags: string[]; visibility: Visibility; shareUrl?: string; updatedAt: string; } export interface DeleteSaveResponse { success: boolean; message: string; } export interface CreateSaveFromUrlRequest { url: string; name?: string; description?: string; tags?: string[]; visibility?: Visibility; } export interface UpdateSaveRequest { name?: string; description?: string; tags?: string[]; visibility?: Visibility; }