Added the catalogue models and seed to support phase 4 of the POC prototype in the Persistence package.
This commit is contained in:
1 parent
0dc3fe6bea
commit
95e0a455e8
14 files changed
+743
-9
No files matched your search
@@ -94,6 +94,14 @@ final class ListingRecord: Model, @unchecked Sendable {
|
||||
@OptionalField(key: "sold_at")
|
||||
var soldAt: Date?
|
||||
|
||||
/// The declared defects, one per line.
|
||||
@OptionalField(key: "defects")
|
||||
var defects: String?
|
||||
|
||||
/// The URL paths of the photos, one per line, the front first.
|
||||
@OptionalField(key: "photos")
|
||||
var photos: String?
|
||||
|
||||
// MARK: Initializers
|
||||
|
||||
init() {}
|
||||
@@ -132,6 +140,8 @@ final class ListingRecord: Model, @unchecked Sendable {
|
||||
self.coverImprint = listing.cover.imprint
|
||||
self.coverNumber = listing.cover.number
|
||||
self.listedAt = listing.listedAt
|
||||
self.defects = listing.defects.isEmpty ? nil : listing.defects.joined(separator: "\n")
|
||||
self.photos = listing.photos.isEmpty ? nil : listing.photos.joined(separator: "\n")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -173,7 +183,9 @@ extension ListingRecord {
|
||||
number: coverNumber
|
||||
),
|
||||
listedAt: listedAt,
|
||||
soldAt: soldAt
|
||||
soldAt: soldAt,
|
||||
defects: defects?.split(separator: "\n").map(String.init) ?? [],
|
||||
photos: photos?.split(separator: "\n").map(String.init) ?? []
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user