model Account {
  id           String    @id @default(uuid())
  email        String    @unique
  passwordHash String
  roleId       String
  role         Role      @relation(fields: [roleId], references: [id])
  isActive     Boolean   @default(true)
  lastLoginAt  DateTime?
  createdAt    DateTime  @default(now())
  updatedAt    DateTime  @updatedAt

  // Связи с профилями разных типов
  profileId    String
  profileType  ProfileType
  profile      Profile   @relation(fields: [profileId], references: [id])
}

model Profile {
  id          String    @id @default(uuid())
  accountId   String    @unique
  account     Account   @relation(fields: [accountId], references: [id])
  type        ProfileType
  firstName   String?
  lastName    String?
  profileImage String?
  bio         String?   @db.Text
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt

  // Дополнительные поля для разных типов профилей
  nickname     String?
  rank         String?
  unit         String?
  city         String?
  birthDate    DateTime?
  registeredAt DateTime?
  community    String?
  specialization String?
  department   String?
  description  String? @db.Text
  isElite      Boolean? @default(false)
}

enum ProfileType {
  STUDENT
  TEACHER
  ADMIN
}

// Модель курса с расширенной функциональностью
model Course {
  id          String  @id @default(uuid())
  title       String
  description String? @db.Text
  imageUrl    String? // URL изображения курса

  // Даты проведения
  startDate DateTime
  endDate   DateTime

  // Связи с преподавателем
  teacherId String
  teacher   Profile @relation(fields: [teacherId], references: [id])

  // Материалы и структура курса
  materials   CourseMaterial[]
  enrollments CourseEnrollment[]
  homework    CourseHomework[] // Добавлено

  // Мета-информация
  version     String? // Например "V5" для "Курс Молодого Бойца V5"
  category    CourseCategory // Добавлено
  isPublished Boolean        @default(false)

  // Timestamps
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Материалы курса
model CourseMaterial {
  id       String       @id @default(uuid())
  courseId String
  course   Course       @relation(fields: [courseId], references: [id])
  title    String
  content  String       @db.Text
  type     MaterialType
  order    Int

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Типы материалов курса
enum MaterialType {
  LECTURE
  PRACTICE
  TEST
  ASSIGNMENT
}

// Зачисление на курс
model CourseEnrollment {
  id        String         @id @default(uuid())
  courseId  String
  course    Course         @relation(fields: [courseId], references: [id])
  studentId String
  student   Profile @relation(fields: [studentId], references: [id])

  // Статус и прогресс
  status           EnrollmentStatus
  courseProgress   Float            @default(0) // Общий прогресс курса в процентах
  homeworkProgress Float            @default(0) // Прогресс по домашним заданиям в процентах

  // Оценка
  grade       Float? // Баллы за курс (например, 5.0)
  isCompleted Boolean @default(false)

  // Домашние задания студента
  homeworkSubmissions HomeworkSubmission[]

  // Даты
  enrolledAt  DateTime  @default(now())
  completedAt DateTime?

  // Timestamps
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Домашние задания курса
model CourseHomework {
  id          String    @id @default(uuid())
  courseId    String
  course      Course    @relation(fields: [courseId], references: [id])
  title       String
  description String?   @db.Text
  dueDate     DateTime?

  // Связь с выполненными заданиями
  submissions HomeworkSubmission[]

  // Timestamps
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Выполненные домашние задания
model HomeworkSubmission {
  id           String           @id @default(uuid())
  homeworkId   String
  homework     CourseHomework   @relation(fields: [homeworkId], references: [id])
  enrollmentId String
  enrollment   CourseEnrollment @relation(fields: [enrollmentId], references: [id])

  // Содержание
  content     String?  @db.Text
  attachments String[] // URLs приложенных файлов

  // Статус и оценка
  status SubmissionStatus @default(PENDING)
  grade  Float?

  // Timestamps
  submittedAt DateTime  @default(now())
  gradedAt    DateTime?
  updatedAt   DateTime  @updatedAt
}

model Award {
  id          String         @id @default(uuid())
  name        String
  imageUrl    String
  description String?
  studentId   String
  student     Profile @relation(fields: [studentId], references: [id])
  receivedAt  DateTime       @default(now())
}

model Achievement {
  id          String         @id @default(uuid())
  name        String
  imageUrl    String
  description String?
  studentId   String
  student     Profile @relation(fields: [studentId], references: [id])
  unlockedAt  DateTime       @default(now())
}

// Модель для управления ролями
model Role {
  id          String    @id @default(uuid())
  name        String    @unique
  description String?
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt

  // Связи с разрешениями
  permissions Permission[]
}

// Модель для управления разрешениями
model Permission {
  id          String    @id @default(uuid())
  roleId      String
  role        Role      @relation(fields: [roleId], references: [id])
  action      String
  resource    String
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}

// Все enum'ы
enum UserRole {
  GUEST // Гость (без регистрации)
  USER // Базовый пользователь
  STUDENT // Учащийся
  TEACHER // Преподаватель
  MODERATOR // Модератор
  ADMIN // Администратор
}

enum CourseCategory {
  TACTICAL_MEDICINE // Тактическая медицина
  MILITARY_TRAINING // Военная подготовка
  COMBAT_TRAINING // Подготовка бойца
  SPECIAL_TRAINING // Специальная подготовка
}

enum EnrollmentStatus {
  PENDING // Ожидает начала
  ENROLLED // Зачислен
  IN_PROGRESS // В процессе
  COMPLETED // Завершен
  DROPPED // Отчислен
}

enum SubmissionStatus {
  PENDING // Ожидает проверки
  APPROVED // Принято
  REJECTED // Отклонено
  REVISED // На доработке
}

слишком много полей у некоторых моделей. сделай декомпозицию