Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 

56 řádky
1.4 KiB

  1. //
  2. // Token.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 4/5/24.
  6. //
  7. import Vapor
  8. import Fluent
  9. enum SessionSource: Int, Content {
  10. case signup
  11. case login
  12. }
  13. final class Token: Model, Content{
  14. static let schema = "token"
  15. @ID(custom: "id", generatedBy: .database) var id: Int?
  16. @Parent(key: "userId") var user: mdlUser
  17. @Field(key: "value") var value: String
  18. @Field(key: "source") var source: SessionSource
  19. @Field(key: "expiresAt") var expiresat: Date?
  20. @Timestamp(key: "createdAt", on: .create) var createdat: Date?
  21. init(){}
  22. init(id: Int? = nil, userid: mdlUser.IDValue, token: String,
  23. source: SessionSource, expiresat: Date?) {
  24. self.id = id
  25. self.$user.id = userid
  26. self.value = token
  27. self.source = source
  28. self.expiresat = expiresat
  29. }
  30. }
  31. extension Token{
  32. struct Create: AsyncMigration {
  33. func prepare(on database: Database) async throws {
  34. try await database.schema(Token.schema)
  35. .field("id", .int, .identifier(auto: true))
  36. .field("userId", .int, .references("user", "id"))
  37. .field("value", .string, .required).unique(on: "value")
  38. .field("source", .int, .required)
  39. .field("createdAt", .datetime, .required)
  40. .field("expiresAt", .datetime)
  41. .create()
  42. }
  43. // 5
  44. func revert(on database: Database) async throws {
  45. try await database.schema(Token.schema).delete()
  46. }
  47. }
  48. }