60 lines
1.5 KiB
Swift
60 lines
1.5 KiB
Swift
//
|
|
// FolderModel.swift
|
|
// ExodaiAcademy
|
|
//
|
|
// Created by Exodai on 24/01/2026.
|
|
//
|
|
|
|
import Fluent
|
|
|
|
final class FolderModel: Model, @unchecked Sendable {
|
|
static let schema: String = Database.folders.rawValue
|
|
|
|
@ID(key: .id)
|
|
var id: UUID?
|
|
|
|
@Field(key: FieldKeys.name)
|
|
var name: String
|
|
|
|
@OptionalField(key: FieldKeys.parentFolderID)
|
|
var parentFolderID: FolderModel.IDValue?
|
|
|
|
@Timestamp(key: FieldKeys.createdAt, on: .create)
|
|
var createdAt: Date?
|
|
|
|
@Timestamp(key: FieldKeys.updatedAt, on: .update)
|
|
var updatedAt: Date?
|
|
|
|
init() {}
|
|
}
|
|
|
|
extension FolderModel {
|
|
struct FieldKeys {
|
|
static var name: FieldKey { "name" }
|
|
static var parentFolderID: FieldKey { "parentFolderID" }
|
|
static var createdAt: FieldKey { "createdAt" }
|
|
static var updatedAt: FieldKey { "updatedAt" }
|
|
}
|
|
}
|
|
|
|
import Fluent
|
|
|
|
extension FolderModel {
|
|
struct Migration: AsyncMigration {
|
|
|
|
func prepare(on database: any FluentKit.Database) async throws {
|
|
try await database.schema(FolderModel.schema)
|
|
.id()
|
|
.field(FieldKeys.name, .string, .required)
|
|
.field(FieldKeys.parentFolderID, .uuid)
|
|
.field(FieldKeys.createdAt, .datetime)
|
|
.field(FieldKeys.updatedAt, .datetime)
|
|
.create()
|
|
}
|
|
|
|
func revert(on database: any FluentKit.Database) async throws {
|
|
try await database.schema(FolderModel.schema).delete()
|
|
}
|
|
}
|
|
}
|