// // File.swift // // // Created by Michiel Carman on 9/24/24. // import Fluent import Vapor final class User: Model, Content { static let schema = "user" final class Public: Content { var id: UUID? var username: String init(id: UUID?, username: String) { self.id = id self.username = username } } @ID() var id: UUID? @Field(key: "username") var username: String @Field(key: "password_hash") var passwordHash: String // @Timestamp(key: "created_at", on: .create) // var createdAt: Date? // // @Timestamp(key: "updated_at", on: .update) // var updatedAt: Date? init() {} init(id: UUID? = nil, username: String, passwordHash: String) { self.id = id self.username = username self.passwordHash = passwordHash } } extension User { func convertToPublic() -> User.Public { return User.Public(id: id, username: username) } } extension User: ModelAuthenticatable { static let usernameKey = \User.$username static let passwordHashKey = \User.$passwordHash func verify(password: String) throws -> Bool { try Bcrypt.verify(password, created: self.passwordHash) } }