// // CourseModel.swift // ExodaiAcademy // // Created by Exodai on 23/01/2026. // import Fluent final class CourseModel: Model, @unchecked Sendable { static let schema: String = Database.courses.rawValue // MARK: - ID @ID(key: .id) var id: UUID? // MARK: - Data @OptionalField(key: FieldKeys.title) var title: String? @OptionalField(key: FieldKeys.description) var description: String? @OptionalField(key: FieldKeys.slug) var slug: String? @OptionalField(key: FieldKeys.excerpt) var excerpt: String? @OptionalField(key: FieldKeys.content) var content: String? @OptionalField(key: FieldKeys.campusID) var campusID: CampusModel.IDValue? @Field(key: FieldKeys.authorID) var authorID: UserModel.IDValue @OptionalField(key: FieldKeys.image) var image: String? @Enum(key: FieldKeys.status) var status: Status @Timestamp(key: FieldKeys.createdAt, on: .create) var createdAt: Date? @Timestamp(key: FieldKeys.updatedAt, on: .update) var updatedAt: Date? @OptionalField(key: FieldKeys.publishDate) var publishDate: Date? // MARK: - Initializers init() {} } extension CourseModel { struct FieldKeys { static var title: FieldKey { "title" } static var description: FieldKey { "description" } static var slug: FieldKey { "slug" } static var excerpt: FieldKey { "excerpt" } static var content: FieldKey { "content" } static var campusID: FieldKey { "campusID" } static var authorID: FieldKey { "authorID" } static var image: FieldKey { "image" } static var status: FieldKey { "status" } static var createdAt: FieldKey { "createdAt" } static var updatedAt: FieldKey { "updatedAt" } static var publishDate: FieldKey { "publishDate" } } } extension CourseModel { struct Migration: AsyncMigration { func prepare(on database: any FluentKit.Database) async throws { try await database.schema(CourseModel.schema) .id() .field(FieldKeys.title, .string) .field(FieldKeys.description, .string) .field(FieldKeys.slug, .string) .field(FieldKeys.excerpt, .string) .field(FieldKeys.content, .string) .field(FieldKeys.campusID, .uuid) .field(FieldKeys.authorID, .uuid, .required) .field(FieldKeys.image, .string) .field(FieldKeys.status, .string, .required) .field(FieldKeys.createdAt, .datetime) .field(FieldKeys.updatedAt, .datetime) .field(FieldKeys.publishDate, .datetime) .create() } func revert(on database: any FluentKit.Database) async throws { try await database.schema(CourseModel.schema).delete() } } }