feat: Updates api controllers to use database client.
This commit is contained in:
@@ -51,6 +51,21 @@ public extension DatabaseClient.Users {
|
||||
guard let token = try await UserTokenModel.find(id, on: database)
|
||||
else { return }
|
||||
try await token.delete(on: database)
|
||||
} token: { _ in
|
||||
guard let user = try await UserModel.query(on: database)
|
||||
.with(\.$token)
|
||||
.first()
|
||||
else {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
|
||||
guard let token = user.token else {
|
||||
let token = try user.generateToken()
|
||||
try await token.save(on: database)
|
||||
return try token.toDTO()
|
||||
}
|
||||
|
||||
return try token.toDTO()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,6 +171,9 @@ final class UserModel: Model, @unchecked Sendable {
|
||||
@Timestamp(key: "updated_at", on: .update)
|
||||
var updatedAt: Date?
|
||||
|
||||
@OptionalChild(for: \.$user)
|
||||
var token: UserTokenModel?
|
||||
|
||||
init() {}
|
||||
|
||||
init(
|
||||
@@ -210,6 +228,10 @@ final class UserTokenModel: Model, Codable, @unchecked Sendable {
|
||||
$user.id = userID
|
||||
}
|
||||
|
||||
func toDTO() throws -> User.Token {
|
||||
try .init(id: requireID(), userID: $user.id, value: value)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Authentication
|
||||
@@ -219,8 +241,6 @@ extension User: SessionAuthenticatable {
|
||||
public var sessionID: String { username }
|
||||
}
|
||||
|
||||
extension User: Content {}
|
||||
|
||||
public struct UserPasswordAuthenticator: AsyncBasicAuthenticator {
|
||||
public typealias User = SharedModels.User
|
||||
|
||||
|
||||
Reference in New Issue
Block a user