Initial commit

This commit is contained in:
Johan
2026-01-26 00:37:35 +01:00
commit f303cb46b7
30 changed files with 2251 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
//
// 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()
}
}
}