feat: Moves api controller to it's own module.

This commit is contained in:
2025-01-25 15:54:02 -05:00
parent 67e689b51e
commit 0fad024350
14 changed files with 234 additions and 80 deletions

View File

@@ -25,7 +25,9 @@ public extension DatabaseClient.Users {
} login: { login in
try login.validate()
var query = UserModel.query(on: database)
var query = UserModel
.query(on: database)
.with(\.$token)
if let username = login.username {
query = query.filter(\UserModel.$username == username)
@@ -37,15 +39,19 @@ public extension DatabaseClient.Users {
throw NotFoundError()
}
let token = try user.generateToken()
let token: User.Token
try await token.save(on: database)
// Check if the user already has a token.
if let userToken = user.token {
token = try userToken.toDTO()
} else {
// Generate a new token for the user if they didn't have one.
let tokenModel = try user.generateToken()
try await tokenModel.save(on: database)
token = try tokenModel.toDTO()
}
return try User.Token(
id: token.requireID(),
userID: user.requireID(),
value: token.value
)
return token
} logout: { id in
guard let token = try await UserTokenModel.find(id, on: database)