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,103 @@
//
// 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()
}
}
}