You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
5.7 KiB

  1. //
  2. // User.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 10/24/21.
  6. //
  7. import Foundation
  8. import Vapor
  9. import Fluent
  10. import FluentPostgresDriver
  11. final class mdlUser: Model, Content{
  12. static let schema = "User"
  13. @ID(custom: "id", generatedBy: .database) var id: Int?
  14. @Field(key: "number") var number: String
  15. @Field(key: "firstName") var firstname: String
  16. @Field(key: "lastName") var lastname: String
  17. @Field(key: "userName") var username: String
  18. @Field(key: "password") var password: String
  19. @Field(key: "activationCode") var activationcode: String
  20. @Field(key: "isActive") var isactive: Bool
  21. @Field(key: "createUserId" ) var createuserid: Int?
  22. @Timestamp(key: "createDate", on: .create) var createdate: Date?
  23. @Field(key: "updateUserId") var updateuserid: Int?
  24. @Timestamp(key: "updateDate", on: .update) var updatedate: Date?
  25. @Parent(key: "divisionId") var division: mdlDivision
  26. //@Parent(key: "locationId") var location: mdlLocation
  27. //@Parent(key: "gateId") var gate: mdlGate
  28. //@Children(for: \.$user) var workorderusers: [mdlWorkOrderUser]
  29. @Siblings(through: mdlWorkOrderUser.self, from: \.$user, to: \.$workorder) public var workorders: [mdlWorkOrder]
  30. @Siblings(through: mdlXUserRole.self, from: \.$user, to: \.$role) public var roles: [mdlRole]
  31. @Siblings(through: mdlXUserModule.self, from: \.$user, to: \.$module) public var modules: [mdlModule]
  32. @Siblings(through: mdlInspectionUser.self, from: \.$user, to: \.$inspection) public var inspections: [mdlInspection]
  33. @Siblings(through: mdlLocation.self, from: \.$user, to: \.$labsetting) public var labsettings: [mdlLabSetting]
  34. init(){}
  35. init(id: Int? = nil){
  36. self.id = id
  37. }
  38. init(id: Int? = nil, number: String, firstname: String, lastname: String, username: String, password: String, activationcode: String, isactive: Bool = true, createuserid: Int? = -1, createdate: Date? = nil, updateuserid: Int? = -1, updatedate: Date? = nil, division: mdlDivision, roles: [mdlRole]?, modules: [mdlModule]?, workorderusers: [mdlWorkOrder]?, inspections: [mdlInspection]?, labsettings: [mdlLabSetting]?){
  39. self.id = id
  40. self.number = number
  41. self.firstname = firstname
  42. self.lastname = lastname
  43. self.username = username
  44. self.password = password
  45. self.activationcode = activationcode
  46. self.isactive = isactive
  47. self.createuserid = createuserid
  48. self.createdate = createdate
  49. self.updateuserid = updateuserid
  50. self.updatedate = updatedate
  51. self.$division.id = division.id!
  52. self.$roles.value = roles
  53. self.$modules.value = modules
  54. self.$workorders.value = workorderusers
  55. self.$inspections.value = inspections
  56. self.$labsettings.value = labsettings
  57. }
  58. }
  59. extension mdlUser {
  60. struct Input: Content{
  61. let id: Int?
  62. let number: String
  63. let firstname: String
  64. let lastname: String
  65. let username: String
  66. let password: String
  67. let activationcode: String
  68. let isactive: Bool
  69. let createdate: Date?
  70. let createuserid: Int?
  71. let updatedate: Date?
  72. let updateuserid: Int?
  73. let division: mdlDivision
  74. let inspections: [mdlInspection]?
  75. let roles: [mdlRole]?
  76. let modules: [mdlModule]?
  77. let workorderusers: [mdlWorkOrder]?
  78. let labsettings: [mdlLabSetting]?
  79. }
  80. struct Output: Content{
  81. let id: Int?
  82. let number: String
  83. let firstname: String
  84. let lastname: String
  85. let username: String
  86. let password: String
  87. let activationcode: String
  88. let isactive: Bool
  89. let createdate: Date?
  90. let createuserid: Int?
  91. let updatedate: Date?
  92. let updateuserid: Int?
  93. let division: mdlDivision
  94. let inspections: [mdlInspection]?
  95. let roles: [mdlRole]?
  96. let modules: [mdlModule]?
  97. let workorderusers: [mdlWorkOrder]?
  98. let labsettings: [mdlLabSetting]?
  99. }
  100. struct create: Migration{
  101. func prepare(on database: Database) -> EventLoopFuture<Void> {
  102. return database.schema("User")
  103. .field("id", .int, .identifier(auto: true))
  104. .field("number", .string)
  105. .field("firstName", .string)
  106. .field("lastName", .string)
  107. .field("userName", .string)
  108. .field("password", .string)
  109. .field("activationCode", .string)
  110. .field("isActive", .bool)
  111. .field("createUserId", .int)
  112. .field("createDate", .datetime)
  113. .field("updateUserId", .int)
  114. .field("updateDate", .datetime)
  115. .field("divisionId", .int, .required, .references("Division", "id"))
  116. //.field("gateId", .int, .references("Gate", "id"))
  117. .create()
  118. }
  119. func revert(on database: Database) -> EventLoopFuture<Void> {
  120. database.schema("User").delete()
  121. }
  122. }
  123. struct seed: Migration{
  124. func prepare(on database: Database) -> EventLoopFuture<Void> {
  125. let array: [mdlUser] = [
  126. .init(id: -1, number: "0000", firstname: "System", lastname: "Admin", username: "sysadmin", password: "p@$$w0rd", activationcode: "", isactive: true, createuserid: -1, updateuserid: -1, division: mdlDivision(id: -1), roles: [], modules: [], workorderusers: [], inspections: [], labsettings: [])
  127. ]
  128. return array.map{obj in obj.save(on: database)
  129. }
  130. .flatten(on: database.eventLoop)
  131. }
  132. func revert(on database: Database) -> EventLoopFuture<Void> {
  133. mdlUser.query(on: database).delete()
  134. }
  135. }
  136. }