Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

64 строки
1.2 KiB

  1. //
  2. // File.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 9/24/24.
  6. //
  7. import Fluent
  8. import Vapor
  9. final class User: Model, Content {
  10. static let schema = "user"
  11. final class Public: Content {
  12. var id: UUID?
  13. var username: String
  14. init(id: UUID?, username: String) {
  15. self.id = id
  16. self.username = username
  17. }
  18. }
  19. @ID()
  20. var id: UUID?
  21. @Field(key: "username")
  22. var username: String
  23. @Field(key: "password_hash")
  24. var passwordHash: String
  25. // @Timestamp(key: "created_at", on: .create)
  26. // var createdAt: Date?
  27. //
  28. // @Timestamp(key: "updated_at", on: .update)
  29. // var updatedAt: Date?
  30. init() {}
  31. init(id: UUID? = nil, username: String, passwordHash: String) {
  32. self.id = id
  33. self.username = username
  34. self.passwordHash = passwordHash
  35. }
  36. }
  37. extension User {
  38. func convertToPublic() -> User.Public {
  39. return User.Public(id: id, username: username)
  40. }
  41. }
  42. extension User: ModelAuthenticatable {
  43. static let usernameKey = \User.$username
  44. static let passwordHashKey = \User.$passwordHash
  45. func verify(password: String) throws -> Bool {
  46. try Bcrypt.verify(password, created: self.passwordHash)
  47. }
  48. }