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,107 @@
//
// CampusModel.swift
// ExodaiAcademy
//
// Created by Exodai on 23/01/2026.
//
import Fluent
final class CampusModel: Model, @unchecked Sendable {
static let schema: String = Database.campuses.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.content)
var content: String?
@Enum(key: FieldKeys.status)
var status: Status
@Field(key: FieldKeys.instructorID)
var instructorID: UserModel.IDValue
@OptionalField(key: FieldKeys.price)
var price: Double?
@OptionalField(key: FieldKeys.tags)
var tags: [TagModel.IDValue]?
@OptionalField(key: FieldKeys.categories)
var categories: [CategoryModel.IDValue]?
// MARK: - Timestamps
@Timestamp(key: FieldKeys.createdAt, on: .create)
var createdAt: Date?
@Timestamp(key: FieldKeys.updatedAt, on: .update)
var updatedAt: Date?
@Field(key: FieldKeys.publishDate)
var publishDate: Date?
// MARK: - Initializers
init() {}
}
extension CampusModel {
struct FieldKeys {
static var title: FieldKey { "title" }
static var description: FieldKey { "description" }
static var slug: FieldKey {"slug"}
static var content: FieldKey { "content" }
static var status: FieldKey { "status" }
static var instructorID: FieldKey { "instructorID" }
static var price: FieldKey { "price" }
static var tags: FieldKey { "tags" }
static var categories: FieldKey { "categories" }
static var createdAt: FieldKey { "createdAt" }
static var updatedAt: FieldKey { "updatedAt" }
static var publishDate: FieldKey { "publishDate" }
}
}
import Fluent
extension CampusModel {
struct Migration: AsyncMigration {
func prepare(on database: any FluentKit.Database) async throws {
try await database.schema(CampusModel.schema)
.id()
.field(FieldKeys.title, .string)
.field(FieldKeys.description, .string)
.field(FieldKeys.slug, .string)
.field(FieldKeys.content, .string)
.field(FieldKeys.status, .string, .required)
.field(FieldKeys.instructorID, .uuid, .required)
.field(FieldKeys.price, .double)
.field(FieldKeys.tags, .array(of: .uuid))
.field(FieldKeys.categories, .array(of: .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(CampusModel.schema).delete()
}
}
}