// // Machine.swift // // // Created by Michiel Carman on 10/25/21. // import Foundation import Vapor import Fluent import FluentPostgresDriver final class mdlMachine: Model, Content{ static let schema = "Machine" @ID(custom: "id", generatedBy: .database) var id: Int? @Field(key: "manufacturerYear") var manufactureryear: String @Field(key: "description") var description: String @Field(key: "currentLocation") var currentlocation: String @Field(key: "lastServiceDate") var lastservicedate: Date? @Field(key: "isActive") var isactive: Bool @Field(key: "voltage") var voltage: Decimal? @Field(key: "kw") var kw: Decimal? @Field(key: "phase") var phase: Int? @Field(key: "inServiceDate") var inservicedate: Date? @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: "machineTypeId") var machinetype: mdlMachineType @Parent(key: "modelId") var model: mdlModel @Parent(key: "machineId") var parent: mdlMachine @Children(for: \.$machine) var machinenumbers: [mdlMachineNumber] @Children(for: \.$machine) var machinemeters: [mdlMachineMeter] @Children(for: \.$parent) var children: [mdlMachine] @Children(for: \.$machine) var templates: [mdlTemplate] @Children(for: \.$machine) var workorders: [mdlWorkOrder] @Siblings(through: mdlXCustomerMachine.self, from: \.$machine, to: \.$customer) public var customers: [mdlCustomer] init(){} init(id: Int? = nil, manufactureryear: String, description: String, currentlocation: String, lastservicedate: Date? = nil, isactive: Bool = true, voltage: Decimal? = nil, kw: Decimal? = nil, phase: Int? = nil, inservicedate: Date? = nil, createuserid: Int? = -1, createdate: Date? = nil, updateuserid: Int? = -1, updatedate: Date? = nil, machinetype: mdlMachineType, parent: mdlMachine, model: mdlModel, machinenumbers: [mdlMachineNumber], machinemeters: [mdlMachineMeter], customers: [mdlCustomer], children: [mdlMachine], templates: [mdlTemplate], workorders: [mdlWorkOrder]){ self.id = id self.manufactureryear = manufactureryear self.description = description self.currentlocation = currentlocation self.lastservicedate = lastservicedate self.isactive = isactive self.voltage = voltage self.kw = kw self.phase = phase self.inservicedate = inservicedate self.createuserid = createuserid self.createdate = createdate self.updateuserid = updateuserid self.updatedate = updatedate self.$model.id = model.id! self.$machinenumbers.value = machinenumbers self.$machinemeters.value = machinemeters self.$customers.value = customers self.$children.value = children self.$templates.value = templates self.$workorders.value = workorders } } extension mdlMachine{ struct Input: Content{ let id: Int? let manufactureryear: String let description: String let currentlocation: String let lastservicedate: Date? let isactive: Bool let voltage: Decimal? let kw: Decimal? let phase: Int? let inservicedate: Date? let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let machinetype: mdlMachineType let parent: mdlMachine let model: mdlModel let machinenumbers: [mdlMachineNumber] let machinemeters: [mdlMachineMeter] let customers: [mdlCustomer] let children: [mdlMachine] let templates: [mdlTemplate] let workorders: [mdlWorkOrder] } struct Output: Content{ let id: Int? let manufactureryear: String let description: String let currentlocation: String let lastservicedate: Date? let isactive: Bool let voltage: Decimal? let kw: Decimal? let phase: Int? let inservicedate: Date? let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let machinetype: mdlMachineType let parent: mdlMachine let model: mdlModel let machinenumbers: [mdlMachineNumber] let machinemeters: [mdlMachineMeter] let customers: [mdlCustomer] let children: [mdlMachine] let templates: [mdlTemplate] let workorders: [mdlWorkOrder] } } extension mdlMachine { struct create: Migration{ func prepare(on database: Database) -> EventLoopFuture { return database.schema("Machine") .field("id", .int, .identifier(auto: true)) .field("manufacturerYear", .string) .field("description", .string) .field("currentLocation", .string) .field("lastServiceDate", .datetime) .field("isActive", .bool) .field("voltage", .float) .field("kw", .float) .field("phase", .int) .field("inServiceDate", .datetime) .field("modelId", .int, .required, .references("Model", "id")) .field("machineTypeId", .int, .references("MachineType", "id")) .field("machineId", .int, .references("Machine", "id")) .field("createUserId", .int) .field("createDate", .datetime) .field("updateUserId", .int) .field("updateDate", .datetime) .create() } func revert(on database: Database) -> EventLoopFuture { database.schema("Machine").delete() } } /* Uncomment if you need to seed the table. struct seed: Migration { func prepare(on database: Database) -> EventLoopFuture { // 1 let array: [<#Model#>] = [ <#init#> ] // 2 return array.map { obj in obj.save(on: database) } .flatten(on: database.eventLoop) } func revert(on database: Database) -> EventLoopFuture { // 3 <#Model#>.query(on: database).delete() } } */ }