Files
2026-01-26 00:37:35 +01:00

80 lines
2.1 KiB
Swift

//
// FileModel.swift
// ExodaiAcademy
//
// Created by Exodai on 24/01/2026.
//
import Fluent
final class FileModel: Model, @unchecked Sendable {
static let schema: String = Database.files.rawValue
@ID(key: .id)
var id: UUID?
@Field(key: FieldKeys.folderID)
var folderID: FolderModel.IDValue
@Field(key: FieldKeys.name)
var name: String
@Field(key: FieldKeys.type)
var type: String
@Field(key: FieldKeys.mimeType)
var mimeType: String
@Field(key: FieldKeys.storageKey)
var storageKey: String
@Field(key: FieldKeys.size)
var size: Int64
@OptionalField(key: FieldKeys.metadata)
var metadata: String?
@Timestamp(key: FieldKeys.createdAt, on: .create)
var createdAt: Date?
init() {}
}
extension FileModel {
struct FieldKeys {
static var folderID: FieldKey { "folderID" }
static var name: FieldKey { "name" }
static var type: FieldKey { "type" }
static var mimeType: FieldKey { "mimeType" }
static var storageKey: FieldKey { "storageKey" }
static var size: FieldKey { "size" }
static var metadata: FieldKey { "metadata" }
static var createdAt: FieldKey { "createdAt" }
}
}
import Fluent
extension FileModel {
struct Migration: AsyncMigration {
func prepare(on database: any FluentKit.Database) async throws {
try await database.schema(FileModel.schema)
.id()
.field(FieldKeys.folderID, .uuid, .required)
.field(FieldKeys.name, .string, .required)
.field(FieldKeys.type, .string, .required)
.field(FieldKeys.mimeType, .string, .required)
.field(FieldKeys.storageKey, .string, .required)
.field(FieldKeys.size, .int64, .required)
.field(FieldKeys.metadata, .string)
.field(FieldKeys.createdAt, .datetime)
.create()
}
func revert(on database: any FluentKit.Database) async throws {
try await database.schema(FileModel.schema).delete()
}
}
}