58 lines
1.1 KiB
Swift
58 lines
1.1 KiB
Swift
//
|
|
// CategoryModel.swift
|
|
// ExodaiAcademy
|
|
//
|
|
// Created by Exodai on 23/01/2026.
|
|
//
|
|
|
|
import Fluent
|
|
|
|
final class CategoryModel: Model, @unchecked Sendable {
|
|
static let schema: String = Database.categories.rawValue
|
|
|
|
// MARK: - ID
|
|
|
|
@ID(key: .id)
|
|
var id: UUID?
|
|
|
|
// MARK: - Data
|
|
|
|
@Field(key: FieldKeys.name)
|
|
var name: String
|
|
|
|
// MARK: - Initializers
|
|
|
|
init() {}
|
|
|
|
init(
|
|
id: UUID? = nil,
|
|
name: String
|
|
) {
|
|
self.id = id
|
|
self.name = name
|
|
}
|
|
}
|
|
|
|
extension CategoryModel {
|
|
struct FieldKeys {
|
|
static var name: FieldKey { "name" }
|
|
}
|
|
}
|
|
|
|
extension CategoryModel {
|
|
struct Migration: AsyncMigration {
|
|
|
|
func prepare(on database: any FluentKit.Database) async throws {
|
|
try await database.schema(CategoryModel.schema)
|
|
.id()
|
|
.field(FieldKeys.name, .string, .required)
|
|
.unique(on: FieldKeys.name)
|
|
.create()
|
|
}
|
|
|
|
func revert(on database: any FluentKit.Database) async throws {
|
|
try await database.schema(CategoryModel.schema).delete()
|
|
}
|
|
}
|
|
}
|