import Fluent import Vapor final class UserToken: Model, Content, @unchecked Sendable { static let schema = "user_token" @ID(key: .id) var id: UUID? @Field(key: "value") var value: String @Parent(key: "user_id") var user: User init() {} init(id: UUID? = nil, value: String, userID: User.IDValue) { self.id = id self.value = value $user.id = userID } } extension UserToken { struct Migrate: AsyncMigration { let name = "CreateUserToken" func prepare(on database: any Database) async throws { try await database.schema(UserToken.schema) .id() .field("value", .string, .required) .field("user_id", .uuid, .required, .references(User.schema, "id")) .unique(on: "value") .create() } func revert(on database: any Database) async throws { try await database.schema(UserToken.schema).delete() } } } extension UserToken: ModelTokenAuthenticatable { static let valueKey = \UserToken.$value static let userKey = \UserToken.$user var isValid: Bool { true } }