microtecflix/src/types.ts

160 lines
3.3 KiB
TypeScript

export type UserRole = 'admin' | 'student';
export type SubscriptionStatus = 'ACTIVE' | 'OVERDUE' | 'CANCELED' | 'TRIAL';
export interface User {
id: string;
name: string;
email: string;
password?: string;
role: UserRole;
subscriptionStatus: SubscriptionStatus;
asaasCustomerId: string | null;
unlockedCourses?: string[]; // IDs of courses unlocked individually
cpf?: string;
birthDate?: string;
whatsapp?: string;
avatarUrl?: string;
trialEndsAt?: string | null;
createdAt: string;
}
export interface SystemSettings {
trialDurationDays: number;
asaasEnvironment: 'sandbox' | 'production';
asaasApiKey: string;
asaasWebhookUrl: string;
asaasWebhookSecret: string;
helpText: string;
enableBoleto?: boolean;
}
export interface Course {
id: string;
title: string;
description: string;
thumbnail: string;
category: string;
certificateMode?: 'PER_MODULE' | 'FULL_COURSE';
isLocked?: boolean; // Se true, o aluno precisa comprar ou assinar para acessar
price?: number; // Preço para compra avulsa (vitalícia)
createdAt: string;
}
export interface Plan {
id: string;
title: string;
description: string;
price: number;
cycle: 'MONTHLY' | 'YEARLY' | 'LIFETIME';
includedCourses: string[]; // Array vazio significa 'Global/Todos os cursos'
active: boolean;
createdAt: string;
}
export interface Module {
id: string;
courseId: string;
title: string;
order: number;
createdAt: string;
}
export interface Lesson {
id: string;
moduleId: string;
title: string;
videoUrl: string; // YouTube embed link or direct HTML5 mp4/hls link
videoType: 'youtube' | 'direct';
order: number;
content: string; // Additional lesson resources/description
createdAt: string;
}
export interface Note {
id: string;
userId: string;
lessonId: string;
content: string;
createdAt: string;
}
export interface LessonProgress {
id: string;
userId: string;
lessonId: string;
watchedPercentage: number;
completed: boolean;
updatedAt: string;
}
export interface WebhookLog {
id: string;
event: string;
payload: string;
receivedAt: string;
}
export interface SubscriptionPayment {
id: string;
userId: string;
value: number;
planId?: string;
courseId?: string;
status: 'PENDING' | 'RECEIVED' | 'CONFIRMED' | 'OVERDUE' | 'REFUNDED' | 'DELETED' | 'CANCELED';
billingType: 'PIX' | 'CREDIT_CARD' | 'BOLETO';
invoiceUrl: string;
dueDate: string;
paidAt: string | null;
createdAt: string;
}
export interface AdminDashboardStats {
mrr: number;
activeSubscribers: number;
overdueSubscribers: number;
canceledSubscribers: number;
}
export interface Question {
id: string;
text: string;
options: string[];
correctOptionIndex: number;
}
export interface ModuleActivity {
id: string;
moduleId: string;
questions: Question[];
createdAt: string;
}
export interface Notification {
id: string;
userId: string;
message: string;
read: boolean;
createdAt: string;
}
export interface ModuleGrade {
id: string;
userId: string;
activityId: string;
score: number;
passed: boolean;
createdAt: string;
}
export interface Certificate {
id: string;
userId: string;
courseId: string | null;
moduleId: string | null;
certificateType: 'COURSE' | 'MODULE';
unlockedAt: string;
finalGrade: number | null;
courseName: string;
moduleName: string | null;
}