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

185 строки
5.8 KiB

  1. //
  2. // Location.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 mdlLocation: Model, Content{
  12. struct Input: Content{
  13. let id: Int?
  14. let name: String
  15. let address: String
  16. let address2: String
  17. let city: String
  18. let state: String
  19. let zip: String
  20. let dealercode: String
  21. let logofile: String
  22. let isactive: Bool
  23. let createdate: Date?
  24. let createuserid: Int?
  25. let updatedate: Date?
  26. let updateuserid: Int?
  27. let unit: mdlUnit
  28. let labsetting: mdlLabSetting
  29. let user: mdlUser
  30. let contacts: [mdlContact]?
  31. let gates: [mdlGate]?
  32. }
  33. struct Output: Content{
  34. let id: Int?
  35. let name: String
  36. let address: String
  37. let address2: String
  38. let city: String
  39. let state: String
  40. let zip: String
  41. let dealercode: String
  42. let logofile: String
  43. let isactive: Bool
  44. let createdate: Date?
  45. let createuserid: Int?
  46. let updatedate: Date?
  47. let updateuserid: Int?
  48. let unit: mdlUnit
  49. let labsetting: mdlLabSetting
  50. let user: mdlUser
  51. let contacts: [mdlContact]?
  52. let gates: [mdlGate]?
  53. }
  54. static let schema = "Location"
  55. @ID(custom: "id", generatedBy: .database) var id: Int?
  56. @Field(key: "name") var name: String
  57. @Field(key: "address") var address: String
  58. @Field(key: "address2") var address2: String
  59. @Field(key: "city") var city: String
  60. @Field(key: "state") var state: String
  61. @Field(key: "zip") var zip: String
  62. @Field(key: "dealerCode") var dealercode: String
  63. @Field(key: "logoFile") var logofile: String
  64. @Field(key: "isActive") var isactive: Bool
  65. @Field(key: "createUserId" ) var createuserid: Int?
  66. @Timestamp(key: "createDate", on: .create) var createdate: Date?
  67. @Field(key: "updateUserId") var updateuserid: Int?
  68. @Timestamp(key: "updateDate", on: .update) var updatedate: Date?
  69. @Parent(key: "unitId") var unit: mdlUnit
  70. @Parent(key: "labSettingId") var labsetting: mdlLabSetting
  71. @Parent(key: "userId") var user: mdlUser
  72. //@Children(for: \.$location) var labsettings: [mdlLabSetting]
  73. //@Children(for: \.$location) var users: [mdlUser]
  74. @Children(for: \.$location) var contacts: [mdlContact]
  75. @Children(for: \.$location) var gates: [mdlGate]
  76. init(){}
  77. init(id: Int? = nil){
  78. self.id = id!
  79. }
  80. init(id: Int? = nil, name: String, address: String, address2: String, city: String, state: String, zip: String, dealercode: String, logofile: String, isactive: Bool = true, createuserid: Int? = -1, createdate: Date? = nil, updateuserid: Int? = -1, updatedate: Date? = nil, unit: mdlUnit, labsetting: mdlLabSetting, user: mdlUser, contacts: [mdlContact]?, gates: [mdlGate]?){
  81. self.id = id
  82. self.name = name
  83. self.address = address
  84. self.address2 = address2
  85. self.city = city
  86. self.state = state
  87. self.zip = zip
  88. self.dealercode = dealercode
  89. self.logofile = logofile
  90. self.isactive = isactive
  91. self.createuserid = createuserid
  92. self.createdate = createdate
  93. self.updateuserid = updateuserid
  94. self.updatedate = updatedate
  95. self.$unit.id = unit.id!
  96. self.$labsetting.id = labsetting.id!
  97. self.$user.id = user.id!
  98. self.$contacts.value = contacts
  99. self.$gates.value = gates
  100. }
  101. }
  102. extension mdlLocation {
  103. struct create: Migration{
  104. func prepare(on database: Database) -> EventLoopFuture<Void> {
  105. return database.schema("Location")
  106. .field("id", .int, .identifier(auto: true))
  107. .field("name", .string)
  108. .field("address", .string)
  109. .field("address2", .string)
  110. .field("city", .string)
  111. .field("state", .string)
  112. .field("zip", .string)
  113. .field("dealerCode", .string)
  114. .field("logoFile", .string)
  115. .field("isActive", .bool)
  116. .field("labSettingId", .int, .required, .references("LabSetting", "id"))
  117. .field("unitId", .int, .required, .references("Unit", "id"))
  118. .field("userId", .int, .required, .references("User", "id"))
  119. .field("createUserId", .int)
  120. .field("createDate", .datetime)
  121. .field("updateUserId", .int)
  122. .field("updateDate", .datetime)
  123. .create()
  124. }
  125. func revert(on database: Database) -> EventLoopFuture<Void> {
  126. database.schema("Location").delete()
  127. }
  128. }
  129. struct seed: Migration {
  130. func prepare(on database: Database) -> EventLoopFuture<Void> {
  131. // 1
  132. let array: [mdlLocation] = [
  133. .init(
  134. id: -1
  135. , name: "System"
  136. , address: ""
  137. , address2: ""
  138. , city: "", state: ""
  139. , zip: "", dealercode: ""
  140. , logofile: ""
  141. , isactive: true
  142. , unit: mdlUnit(
  143. id: 11
  144. )
  145. , labsetting: mdlLabSetting(id: -1)
  146. , user: mdlUser(id: -1)
  147. , contacts: []
  148. , gates: []
  149. )
  150. ]
  151. // 2
  152. return array.map { obj in
  153. obj.save(on: database)
  154. }
  155. .flatten(on: database.eventLoop)
  156. }
  157. func revert(on database: Database) -> EventLoopFuture<Void> {
  158. // 3
  159. mdlLocation.query(on: database).delete()
  160. }
  161. }
  162. }