// // WorkOrderCtrl.swift // // // Created by Michiel Carman on 11/10/21. // import Foundation import Vapor import Fluent import FluentPostgresDriver final class WorkOrderCtrl{ //Create Unit func create(req: Request) throws -> EventLoopFuture{ let input = try req.content.decode(mdlWorkOrder.Input.self) let output = self.createUnit(input) return self.save(output, req, input) } //Update Unit func update(req: Request) throws -> EventLoopFuture{ let input = try req.content.decode(mdlWorkOrder.Input.self) return try qbase(req: req).first().unwrap(or: Abort(.notFound)).flatMap{output in self.mapOutput(output, input) return self.save(output, req: req) } } //Get all Divisions func readAll(req: Request) throws -> EventLoopFuture>{ return try qbase(req: req) .paginate(for: req) .map{ page in page.map{ self.createRead($0) } } } //Get 1 Division func read(req: Request) throws -> EventLoopFuture{ return try qbase(req: req).first().unwrap(or: Abort(.internalServerError)).map{self.createRead($0)} } //Delete 1 Division func delete(req: Request) throws -> EventLoopFuture{ guard let id = req.parameters.get("id", as: Int.self) else{ throw Abort(.badRequest) } return mdlWorkOrder.find(id, on: req.db).unwrap(or: Abort(.notFound)).flatMap{ $0.delete(on: req.db)}.map{.ok} } } extension WorkOrderCtrl{ //Query Settings func qbase(req: Request) throws -> QueryBuilder { let query = mdlWorkOrder.query(on: req.db) .with(\.$customer) .with(\.$machine) .with(\.$priority) .with(\.$reason) .with(\.$incompletereason) .with(\.$workorderstatuses) .with(\.$userss) .with(\.$inspections) .with(\.$consumptions) .with(\.$notes) .with(\.$files) .with(\.$signatures) .with(\.$parts) .with(\.$statuses) if let id = req.parameters.get("id", as: Int.self){ return query.filter(\.$id == id) } else{ return query } } struct Input: Content{ let id: Int? let number: String let specialinstruction: String let scheduledstartdate: Date let scheduledenddate: Date let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let customer: mdlCustomer let machine: mdlMachine let priority: mdlPriority let reason: mdlReason let incompletereason: mdlIncompleteReason let workorderstatus: [mdlWorkOrder]? let users: [mdlWorkOrderUser]? let inspections: [mdlInspection]? let consumptions: [mdlConsumption]? let notes: [mdlNote]? let files: [mdlFile]? let signatures: [mdlSignature]? let parts: [mdlWorkOrderPart]? let statuses: [mdlStatus]? } //create Output func createRead(_ output: mdlWorkOrder) -> mdlWorkOrder.Output { return mdlWorkOrder.Output( id: output.id! , number: output.number , specialinstruction: output.specialinstruction , scheduledstartdate: output.scheduledstartdate , scheduledenddate: output.scheduledenddate , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , customer: output.$customer.value! , machine: output.$machine.value! , priority: output.$priority.value! , reason: output.$reason.value! , incompletereason: output.$incompletereason.value! , workorderstatuses: output.$workorderstatuses.value! , users: output.$userss.value! , inspections: output.$inspections.value! , consumptions: output.$consumptions.value! , notes: output.$notes.value! , files: output.$files.value! , signatures: output.$signatures.value! , parts: output.$parts.value! , statuses: output.$statuses.value! ) } func mapOutput(_ output: Optional.WrappedType, _ input: mdlWorkOrder.Input){ output.number = input.number; output.specialinstruction = input.specialinstruction; output.scheduledstartdate = input.scheduledstartdate; output.scheduledenddate = input.scheduledenddate; output.createdate = input.createdate; output.updatedate = input.updatedate; output.createuserid = input.createuserid; output.updateuserid = input.updateuserid; output.$customer.id = input.customer.id!; output.$machine.id = input.machine.id!; output.$priority.id = input.priority.id!; output.$reason.id = input.reason.id!; output.$incompletereason.id = input.incompletereason.id!; output.$workorderstatuses.value = input.workorderstatuses!; output.$userss.value = input.users!; output.$inspections.value = input.inspections!; output.$consumptions.value = input.consumptions!; output.$notes.value = input.notes!; output.$files.value = input.files!; output.$signatures.value = input.signatures!; output.$parts.value = input.parts!; output.$statuses.value = input.statuses!; } func createUnit(_ input: mdlWorkOrder.Input) -> mdlWorkOrder { return mdlWorkOrder( id: input.id ?? nil , number: input.number , specialinstruction: input.specialinstruction , scheduledstartdate: input.scheduledstartdate , scheduledenddate: input.scheduledenddate , createuserid: input.createuserid ?? -1 , createdate: input.createdate , updateuserid: input.updateuserid ?? -1 , updatedate: input.updatedate , customer: input.customer , machine: input.machine , priority: input.priority , reason: input.reason , incompletereason: input.incompletereason , users: input.users! , workorderstatuses: input.workorderstatuses! , inspections: input.inspections! , consumptions: input.consumptions! , notes: input.notes! , files: input.files! , signatures: input.signatures! , parts: input.parts! , statuses: input.statuses! ) } //update function func save(_ output: Optional.WrappedType, req: Request) -> EventLoopFuture { return output .save(on: req.db) .map{mdlWorkOrder.Output( id: output.id! , number: output.number , specialinstruction: output.specialinstruction , scheduledstartdate: output.scheduledstartdate , scheduledenddate: output.scheduledenddate , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , customer: output.$customer.value! , machine: output.$machine.value! , priority: output.$priority.value! , reason: output.$reason.value! , incompletereason: output.$incompletereason.value! , workorderstatuses: output.$workorderstatuses.value! , users: output.$userss.value! , inspections: output.$inspections.value! , consumptions: output.$consumptions.value! , notes: output.$notes.value! , files: output.$files.value! , signatures: output.$signatures.value! , parts: output.$parts.value! , statuses: output.$statuses.value! ) } } //create function func save(_ output: mdlWorkOrder, _ req: Request, _ input: mdlWorkOrder.Input) -> EventLoopFuture { return output .save(on: req.db) .map{ mdlWorkOrder.Output( id: output.id! , number: output.number , specialinstruction: output.specialinstruction , scheduledstartdate: output.scheduledstartdate , scheduledenddate: output.scheduledenddate , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , customer: input.customer , machine: input.machine , priority: input.priority , reason: input.reason , incompletereason: input.incompletereason , workorderstatuses: input.workorderstatuses! , users: input.users! , inspections: input.inspections! , consumptions: input.consumptions! , notes: input.notes! , files: input.files! , signatures: input.signatures! , parts: input.parts! , statuses: input.statuses! ) } } } extension WorkOrderCtrl: RouteCollection{ func boot(routes: RoutesBuilder) throws{ let apigroup = routes.grouped("workorders") apigroup.get("", use: readAll) apigroup.get(":id", use: read) apigroup.post("", use: create) apigroup.post(":id", use: update) apigroup.delete(":id", use: delete) } }