// // User.swift // // // Created by Michiel Carman on 10/24/21. // import Foundation import Vapor import Fluent import FluentPostgresDriver final class mdlUser: Model, Content{ static let schema = "User" @ID(custom: "id", generatedBy: .database) var id: Int? @Field(key: "number") var number: String @Field(key: "firstName") var firstname: String @Field(key: "lastName") var lastname: String @Field(key: "userName") var username: String @Field(key: "password") var password: String @Field(key: "activationCode") var activationcode: String @Field(key: "isActive") var isactive: Bool @Field(key: "createUserId" ) var createuserid: Int? @Timestamp(key: "createDate", on: .create) var createdate: Date? @Field(key: "updateUserId") var updateuserid: Int? @Timestamp(key: "updateDate", on: .update) var updatedate: Date? @Parent(key: "divisionId") var division: mdlDivision //@Parent(key: "locationId") var location: mdlLocation //@Parent(key: "gateId") var gate: mdlGate //@Children(for: \.$user) var workorderusers: [mdlWorkOrderUser] @Siblings(through: mdlWorkOrderUser.self, from: \.$user, to: \.$workorder) public var workorders: [mdlWorkOrder] @Siblings(through: mdlXUserRole.self, from: \.$user, to: \.$role) public var roles: [mdlRole] @Siblings(through: mdlXUserModule.self, from: \.$user, to: \.$module) public var modules: [mdlModule] @Siblings(through: mdlInspectionUser.self, from: \.$user, to: \.$inspection) public var inspections: [mdlInspection] @Siblings(through: mdlLocation.self, from: \.$user, to: \.$labsetting) public var labsettings: [mdlLabSetting] init(){} init(id: Int? = nil){ self.id = id } 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]?){ self.id = id self.number = number self.firstname = firstname self.lastname = lastname self.username = username self.password = password self.activationcode = activationcode self.isactive = isactive self.createuserid = createuserid self.createdate = createdate self.updateuserid = updateuserid self.updatedate = updatedate self.$division.id = division.id! self.$roles.value = roles self.$modules.value = modules self.$workorders.value = workorderusers self.$inspections.value = inspections self.$labsettings.value = labsettings } } extension mdlUser { struct Input: Content{ let id: Int? let number: String let firstname: String let lastname: String let username: String let password: String let activationcode: String let isactive: Bool let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let division: mdlDivision let inspections: [mdlInspection]? let roles: [mdlRole]? let modules: [mdlModule]? let workorderusers: [mdlWorkOrder]? let labsettings: [mdlLabSetting]? } struct Output: Content{ let id: Int? let number: String let firstname: String let lastname: String let username: String let password: String let activationcode: String let isactive: Bool let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let division: mdlDivision let inspections: [mdlInspection]? let roles: [mdlRole]? let modules: [mdlModule]? let workorderusers: [mdlWorkOrder]? let labsettings: [mdlLabSetting]? } struct create: Migration{ func prepare(on database: Database) -> EventLoopFuture { return database.schema("User") .field("id", .int, .identifier(auto: true)) .field("number", .string) .field("firstName", .string) .field("lastName", .string) .field("userName", .string) .field("password", .string) .field("activationCode", .string) .field("isActive", .bool) .field("createUserId", .int) .field("createDate", .datetime) .field("updateUserId", .int) .field("updateDate", .datetime) .field("divisionId", .int, .required, .references("Division", "id")) //.field("gateId", .int, .references("Gate", "id")) .create() } func revert(on database: Database) -> EventLoopFuture { database.schema("User").delete() } } struct seed: Migration{ func prepare(on database: Database) -> EventLoopFuture { let array: [mdlUser] = [ .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: []) ] return array.map{obj in obj.save(on: database) } .flatten(on: database.eventLoop) } func revert(on database: Database) -> EventLoopFuture { mdlUser.query(on: database).delete() } } }