|
- //
- // Token.swift
- //
- //
- // Created by Michiel Carman on 4/5/24.
- //
-
- import Vapor
- import Fluent
-
- enum SessionSource: Int, Content {
- case signup
- case login
- }
-
- final class Token: Model, Content{
- static let schema = "token"
-
- @ID(custom: "id", generatedBy: .database) var id: Int?
- @Parent(key: "userId") var user: mdlUser
- @Field(key: "value") var value: String
- @Field(key: "source") var source: SessionSource
- @Field(key: "expiresAt") var expiresat: Date?
- @Timestamp(key: "createdAt", on: .create) var createdat: Date?
-
- init(){}
-
- init(id: Int? = nil, userid: mdlUser.IDValue, token: String,
- source: SessionSource, expiresat: Date?) {
- self.id = id
- self.$user.id = userid
- self.value = token
- self.source = source
- self.expiresat = expiresat
- }
- }
- extension Token{
- struct Create: AsyncMigration {
- func prepare(on database: Database) async throws {
- try await database.schema(Token.schema)
- .field("id", .int, .identifier(auto: true))
- .field("userId", .int, .references("user", "id"))
- .field("value", .string, .required).unique(on: "value")
- .field("source", .int, .required)
- .field("createdAt", .datetime, .required)
- .field("expiresAt", .datetime)
- .create()
- }
-
- // 5
- func revert(on database: Database) async throws {
- try await database.schema(Token.schema).delete()
- }
- }
- }
|