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

79 lines
2.2 KiB
Swift

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