Initial commit

This commit is contained in:
Johan
2026-01-26 00:37:35 +01:00
commit f303cb46b7
30 changed files with 2251 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
//
// LogModel.swift
// ExodaiAcademy
//
// Created by Exodai on 24/01/2026.
//
import Fluent
final class LogModel: Model, @unchecked Sendable {
static let schema: String = Database.logs.rawValue
@ID(key: .id)
var id: UUID?
@Field(key: FieldKeys.event)
var event: String
@OptionalField(key: FieldKeys.actorID)
var actorID: UserModel.IDValue?
@OptionalField(key: FieldKeys.targetType)
var targetType: String?
@OptionalField(key: FieldKeys.targetID)
var targetID: UUID?
@OptionalField(key: FieldKeys.context)
var context: String?
@OptionalField(key: FieldKeys.ipAddress)
var ipAddress: String?
@Timestamp(key: FieldKeys.createdAt, on: .create)
var createdAt: Date?
init() {}
}
extension LogModel {
struct FieldKeys {
static var event: FieldKey { "event" }
static var actorID: FieldKey { "actorID" }
static var ipAddress: FieldKey { "ipAddress" }
static var targetType: FieldKey { "targetType" }
static var targetID: FieldKey { "targetID" }
static var context: FieldKey { "context" }
static var createdAt: FieldKey { "createdAt" }
}
}
extension LogModel {
struct Migration: AsyncMigration {
func prepare(on database: any FluentKit.Database) async throws {
try await database.schema(LogModel.schema)
.id()
.field(FieldKeys.event, .string, .required)
.field(FieldKeys.actorID, .uuid)
.field(FieldKeys.ipAddress, .string)
.field(FieldKeys.targetType, .string)
.field(FieldKeys.targetID, .uuid)
.field(FieldKeys.context, .string)
.field(FieldKeys.createdAt, .datetime)
.create()
}
func revert(on database: any FluentKit.Database) async throws {
try await database.schema(LogModel.schema).delete()
}
}
}