// // InspectionCtrl.swift // // // Created by Michiel Carman on 11/10/21. // import Foundation import Vapor import Fluent import FluentPostgresDriver final class InspectionCtrl{ //Create Unit func create(req: Request) throws -> EventLoopFuture{ let input = try req.content.decode(mdlInspection.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(mdlInspection.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 mdlInspection.find(id, on: req.db).unwrap(or: Abort(.notFound)).flatMap{ $0.delete(on: req.db)}.map{.ok} } } extension InspectionCtrl{ //Query Settings func qbase(req: Request) throws -> QueryBuilder { let query = mdlInspection.query(on: req.db) .with(\.$workorder) .with(\.$inspectiontype) .with(\.$inspectionlevel) .with(\.$technicians) .with(\.$inspectioncategories) if let id = req.parameters.get("id", as: Int.self){ return query.filter(\.$id == id) } else{ return query } } //create Output func createRead(_ output: mdlInspection) -> mdlInspection.Output { return mdlInspection.Output( id: output.id!, interval: output.interval, segment: output.segment, startdate: output.startdate, enddate: output.enddate, createdate: output.createdate, createuserid: output.createuserid, updatedate: output.updatedate, updateuserid: output.updateuserid, workorder: output.$workorder.value!, inspectiontype: output.$inspectiontype.value!, inspectionlevel: output.$inspectionlevel.value!, technicians: output.$technicians.value!, inspectioncategories: output.$inspectioncategories.value! ) } func mapOutput(_ output: Optional.WrappedType, _ input: mdlInspection.Input){ output.interval = input.interval; output.segment = input.segment; output.startdate = input.startdate; output.enddate = input.enddate; output.createdate = input.createdate; output.updatedate = input.updatedate; output.createuserid = input.createuserid; output.updateuserid = input.updateuserid; output.workorder = input.workorder; output.inspectiontype = input.inspectiontype; output.inspectionlevel = input.inspectionlevel; output.technicians = input.technicians!; output.inspectioncategories = input.inspectioncategories! } func createUnit(_ input: mdlInspection.Input) -> mdlInspection { return mdlInspection( id: input.id ?? nil , interval: input.interval , segment: input.segment , startdate: input.startdate , enddate: input.enddate , createuserid: input.createuserid ?? -1 , createdate: input.createdate , updateuserid: input.updateuserid ?? -1 , updatedate: input.updatedate , workorder: input.workorder , inspectiontye: input.inspectiontype , inspectionlevel: input.inspectionlevel , technicians: input.technicians! , inspectioncategoryies: input.inspectioncategories! ) } //update function func save(_ output: Optional.WrappedType, req: Request) -> EventLoopFuture { return output .save(on: req.db) .map{mdlInspection.Output( id: output.id! , interval: output.interval , segment: output.segment , startdate: output.startdate , enddate: output.enddate , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , workorder: output.workorder , inspectiontype: output.inspectiontype , inspectionlevel: output.inspectionlevel , technicians: output.technicians , inspectioncategories: output.inspectioncategories ) } } //create function func save(_ output: mdlInspection, _ req: Request, _ input: mdlInspection.Input) -> EventLoopFuture { return output .save(on: req.db) .map{ mdlInspection.Output( id: output.id! , interval: output.interval , segment: output.segment , startdate: output.startdate , enddate: output.enddate , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , workorder: input.workorder , inspectiontype: input.inspectiontype , inspectionlevel: input.inspectionlevel , technicians: input.technicians , inspectioncategories: input.inspectioncategories ) } } } extension InspectionCtrl: RouteCollection{ func boot(routes: RoutesBuilder) throws{ let apigroup = routes.grouped("inspections") apigroup.get("", use: readAll) apigroup.get(":id", use: read) apigroup.post("", use: create) apigroup.post(":id", use: update) apigroup.delete(":id", use: delete) } }