// // SessionModel.swift // ExodaiAcademy // // Created by Exodai on 23/01/2026. // import Fluent final class SessionModel: Model, @unchecked Sendable { static let schema: String = Database.sessions.rawValue // MARK: - ID @ID(key: .id) var id: UUID? // MARK: - CMS Fields (ALL optional) @OptionalField(key: FieldKeys.title) var title: String? @OptionalField(key: FieldKeys.description) var description: String? @OptionalField(key: FieldKeys.slug) var slug: String? @OptionalField(key: FieldKeys.mp4URL) var mp4URL: String? @OptionalField(key: FieldKeys.hlsURL) var hlsURL: String? @OptionalField(key: FieldKeys.content) var content: String? @OptionalEnum(key: FieldKeys.status) var status: Status? @OptionalField(key: FieldKeys.courseID) var courseID: CourseModel.IDValue? // MARK: - Timestamps @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: - Initializer init() {} } extension SessionModel { struct FieldKeys { static var title: FieldKey { "title" } static var description: FieldKey { "description" } static var slug: FieldKey { "slug" } static var mp4URL: FieldKey { "mp4URL" } static var hlsURL: FieldKey { "hlsURL" } static var content: FieldKey { "content" } static var status: FieldKey { "status" } static var courseID: FieldKey { "courseID" } static var createdAt: FieldKey { "createdAt" } static var updatedAt: FieldKey { "updatedAt" } static var publishDate: FieldKey { "publishDate" } } } extension SessionModel { struct Migration: AsyncMigration { func prepare(on database: any FluentKit.Database) async throws { try await database.schema(SessionModel.schema) .id() .field(FieldKeys.title, .string) .field(FieldKeys.description, .string) .field(FieldKeys.slug, .string) .field(FieldKeys.mp4URL, .string) .field(FieldKeys.hlsURL, .string) .field(FieldKeys.content, .string) .field(FieldKeys.status, .string) .field(FieldKeys.courseID, .uuid) .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(SessionModel.schema).delete() } } }