/** * File: prisma.ts * Created by: AI Assistant * Date: 2025-11-29 * Purpose: Prisma type definitions for kreatiVortex platform * Part of: kreatiVortex - Platform Pembelajaran Tari Online */ export interface UserWithRelations { id: string; name: string; email: string; emailVerified: boolean; image?: string; createdAt: Date; updatedAt: Date; role: UserRole; profile?: UserProfile; classesTeaching?: Class[]; classesEnrolled?: Class[]; videos?: Video[]; forumPosts?: ForumPost[]; assignments?: Assignment[]; } export interface UserRole { id: string; name: 'ADMINISTRATOR' | 'PENDIDIK' | 'CALON_PENDIDIK' | 'UMUM'; description: string; permissions: string[]; } export interface UserProfile { id: string; userId: string; nim?: string; phone?: string; address?: string; bio?: string; avatar?: string; createdAt: Date; updatedAt: Date; } export interface Class { id: string; name: string; description: string; code: string; educatorId: string; educator: UserWithRelations; isActive: boolean; maxStudents?: number; createdAt: Date; updatedAt: Date; createdBy: string; updatedBy: string; students?: UserWithRelations[]; videos?: Video[]; forums?: Forum[]; assignments?: Assignment[]; } export interface Video { id: string; title: string; description?: string; videoUrl: string; videoType: 'YOUTUBE' | 'LOCAL'; thumbnailUrl?: string; duration?: number; uploaderId: string; uploader: UserWithRelations; classId?: string; class?: Class; isPublic: boolean; viewCount: number; createdAt: Date; updatedAt: Date; createdBy: string; updatedBy: string; comments?: Comment[]; } export interface Forum { id: string; title: string; description?: string; type: 'GENERAL' | 'CLASS'; classId?: string; class?: Class; createdBy: string; creator: UserWithRelations; isActive: boolean; createdAt: Date; updatedAt: Date; updatedBy: string; posts?: ForumPost[]; } export interface ForumPost { id: string; title: string; content: string; forumId: string; forum: Forum; authorId: string; author: UserWithRelations; parentId?: string; parent?: ForumPost; replies?: ForumPost[]; isPinned: boolean; isActive: boolean; createdAt: Date; updatedAt: Date; updatedBy: string; comments?: Comment[]; } export interface Assignment { id: string; title: string; description: string; dueDate: Date; classId: string; class: Class; educatorId: string; educator: UserWithRelations; maxScore: number; isActive: boolean; createdAt: Date; updatedAt: Date; createdBy: string; updatedBy: string; submissions?: AssignmentSubmission[]; } export interface AssignmentSubmission { id: string; assignmentId: string; assignment: Assignment; studentId: string; student: UserWithRelations; documentUrl: string; documentType: string; score?: number; feedback?: string; status: 'SUBMITTED' | 'REVIEWED' | 'REVISED' | 'APPROVED'; submittedAt: Date; reviewedAt?: Date; reviewedBy?: string; reviewer?: UserWithRelations; createdAt: Date; updatedAt: Date; updatedBy: string; } export interface Comment { id: string; content: string; authorId: string; author: UserWithRelations; videoId?: string; video?: Video; forumPostId?: string; forumPost?: ForumPost; parentId?: string; parent?: Comment; replies?: Comment[]; isActive: boolean; createdAt: Date; updatedAt: Date; updatedBy: string; }