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