Added the catalogue models and seed to support phase 4 of the POC prototype in the Persistence package.

This commit is contained in:
javier committed 2026-09-21 12:50:53 +02:00
1 parent 0dc3fe6bea
commit 95e0a455e8
14 files changed
+743 -9

No files matched your search

@@ -0,0 +1,69 @@
import FluentKit
import Foundation
/// A FluentKit model of a single `passkeys` row: a WebAuthn credential registered to an account.
final class PasskeyRecord: Model, @unchecked Sendable {
// MARK: Properties
static let schema = "passkeys"
@ID(key: .id)
var id: UUID?
@Parent(key: "user_id")
var user: UserRecord
/// The credential's identifier, base64url-encoded without padding.
@Field(key: "credential_id")
var credentialID: String
/// The credential's public key, COSE-encoded, as base64.
@Field(key: "public_key")
var publicKey: String
@Field(key: "sign_count")
var signCount: Int
@Field(key: "created_at")
var createdAt: Date
// MARK: Initializers
init() {}
init(
userID: UUID,
credentialID: String,
publicKey: [UInt8],
signCount: UInt32,
at date: Date
) {
self.$user.id = userID
self.credentialID = credentialID
self.publicKey = Data(publicKey).base64EncodedString()
self.signCount = Int(signCount)
self.createdAt = date
}
}
// MARK: - Extensions
extension PasskeyRecord {
// MARK: Computed
/// The `Sendable` snapshot of the saved record; its user must be eager-loaded.
var snapshot: Passkey {
get throws {
.init(
credentialID: credentialID,
publicKey: Array(Data(base64Encoded: publicKey) ?? .init()),
signCount: UInt32(clamping: signCount),
user: try user.snapshot
)
}
}
}