// // File.swift // // // Created by Michiel Carman on 9/24/24. // import Vapor import Fluent final class Token: Model, Content, @unchecked Sendable { static let schema = "token" @ID() var id: UUID? @Parent(key: "user_id") var user: User @Field(key: "value") var value: String init() {} init(id: UUID? = nil, userId: User.IDValue, token: String) { self.id = id self.$user.id = userId self.value = token } } extension Token { static func generate(for user: User) throws -> Token { let random = [UInt8].random(count: 32).base64 return try Token( userId: user.requireID(), token: random) } } extension Token: ModelTokenAuthenticatable { typealias User = App.User static let valueKey = \Token.$value static let userKey = \Token.$user var isValid: Bool { true } }