// // ConfirmationModel.swift // ExodaiAcademy // // Created by Exodai on 23/01/2026. // import Fluent import Vapor import Fluent final class ConfirmationModel: Model, @unchecked Sendable { static let schema: String = Database.confirmations.rawValue @ID(key: .id) var id: UUID? @Field(key: FieldKeys.userID) var userID: UserModel.IDValue @Field(key: FieldKeys.confirmationCode) var confirmationCode: String @Field(key: FieldKeys.email) var email: String @Timestamp(key: FieldKeys.createdAt, on: .create) var createdAt: Date? @Timestamp(key: FieldKeys.validTill, on: .none) var validTill: Date? @Field(key: FieldKeys.isConfirmed) var isConfirmed: Bool init() {} init(id: UUID? = nil, userID: UserModel.IDValue, email: String?, confirmationCode: String, validTill: Date, isConfirmed: Bool = false) { self.id = id self.userID = userID self.confirmationCode = confirmationCode self.validTill = validTill self.isConfirmed = isConfirmed } } extension ConfirmationModel { struct FieldKeys { static var userID: FieldKey { "userID" } static var confirmationCode: FieldKey { "confirmationCode" } static var email: FieldKey { "email" } static var createdAt: FieldKey { "createdAt" } static var validTill: FieldKey { "validTill" } static var isConfirmed: FieldKey { "isConfirmed" } } } extension ConfirmationModel { struct Migration: AsyncMigration { func prepare(on database: any FluentKit.Database) async throws { try await database.schema(ConfirmationModel.schema) .id() .field(FieldKeys.userID, .uuid, .required) .field(FieldKeys.confirmationCode, .string, .required) .field(FieldKeys.email, .string, .required) .field(FieldKeys.createdAt, .datetime) .field(FieldKeys.validTill, .datetime) .field(FieldKeys.isConfirmed, .bool, .required) .create() } func revert(on database: any FluentKit.Database) async throws { try await database.schema(ConfirmationModel.schema).delete() } } }