// // OilSampleItem.swift // // // Created by Michiel Carman on 11/11/21. // import Foundation import Vapor import Fluent import FluentPostgresDriver final class OilSampleItemCtrl{ //Create Unit func create(req: Request) throws -> EventLoopFuture{ let input = try req.content.decode(mdlOilSampleItem.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(mdlOilSampleItem.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 mdlOilSampleItem.find(id, on: req.db).unwrap(or: Abort(.notFound)).flatMap{ $0.delete(on: req.db)}.map{.ok} } } extension OilSampleItemCtrl{ //Query Settings func qbase(req: Request) throws -> QueryBuilder { let query = mdlOilSampleItem.query(on: req.db).with(\.$oilsample) if let id = req.parameters.get("id", as: Int.self){ return query.filter(\.$id == id) } else{ return query } } /* let id: Int? let compartmentname: String let compartmentcode: String let compartmentlocationname1: String let compartmentlocationcode1: String let compartmentlocationname2: String let compartmentlocationcode2: String let hoursonoil: Decimal? let oiladded: Decimal? let jobsitename: String let fluidname: String let viscosityname: String let oilchanged: Bool? let filterchanged: Bool? let levelname: String let comment: String let createdate: Date? let createuserid: Int? let updatedate: Date? let updateuserid: Int? let oilsample: mdlOilSample */ //create Output func createRead(_ output: mdlOilSampleItem) -> mdlOilSampleItem.Output { return mdlOilSampleItem.Output( id: output.id!, compartmentname: output.compartmentname, compartmentcode: output.compartmentcode, compartmentlocationname1: output.compartmentlocationname1, compartmentlocationcode1: output.compartmentlocationcode1, compartmentlocationname2: output.compartmentlocationname2, compartmentlocationcode2: output.compartmentlocationcode2, hoursonoil: output.hoursonoil, oiladded: output.oiladded, jobsitename: output.jobsitename, fluidname: output.fluidname, viscosityname: output.viscosityname, oilchanged: output.oilchanged, filterchanged: output.filterchanged, levelname: output.levelname, comment: output.comment, createdate: output.createdate, createuserid: output.createuserid, updatedate: output.updatedate, updateuserid: output.updateuserid, oilsample: output.$oilsample.value! ) } func mapOutput(_ output: Optional.WrappedType, _ input: mdlOilSampleItem.Input){ output.compartmentname = input.compartmentname; output.compartmentcode = input.compartmentcode; output.compartmentlocationname1 = input.compartmentlocationname1; output.compartmentlocationcode1 = input.compartmentlocationcode1; output.compartmentlocationname2 = input.compartmentlocationname2; output.compartmentlocationcode2 = input.compartmentlocationcode2; output.hoursonoil = input.hoursonoil; output.oiladded = input.oiladded; output.jobsitename = input.jobsitename; output.fluidname = input.fluidname; output.viscosityname = input.viscosityname; output.oilchanged = input.oilchanged; output.filterchanged = input.filterchanged; output.levelname = input.levelname; output.comment = input.comment; output.createdate = input.createdate; output.updatedate = input.updatedate; output.createuserid = input.createuserid; output.updateuserid = input.updateuserid; output.$oilsample.id = input.oilsample.id! } func createUnit(_ input: mdlOilSampleItem.Input) -> mdlOilSampleItem { return mdlOilSampleItem( id: input.id ?? nil , compartmentname: input.compartmentname , compartmentcode: input.compartmentcode , compartmentlocationname1: input.compartmentlocationname1 , compartmentlocationcode1: input.compartmentlocationcode1 , compartmentlocationname2: input.compartmentlocationname2 , compartmentlocationcode2: input.compartmentlocationcode2 , hoursonoil: input.hoursonoil , oiladded: input.oiladded , jobsitename: input.jobsitename , fluidname: input.fluidname , viscosityname: input.viscosityname , oilchanged: input.oilchanged , filterchanged: input.filterchanged , levelname: input.levelname , comment: input.comment , createuserid: input.createuserid ?? -1 , createdate: input.createdate , updateuserid: input.updateuserid ?? -1 , updatedate: input.updatedate , oilsample: input.oilsample ) } //update function func save(_ output: Optional.WrappedType, req: Request) -> EventLoopFuture { return output .save(on: req.db) .map{mdlOilSampleItem.Output( id: output.id! , compartmentname: output.compartmentname , compartmentcode: output.compartmentcode , compartmentlocationname1: output.compartmentlocationname1 , compartmentlocationcode1: output.compartmentlocationcode1 , compartmentlocationname2: output.compartmentlocationname2 , compartmentlocationcode2: output.compartmentlocationcode2 , hoursonoil: output.hoursonoil , oiladded: output.oiladded , jobsitename: output.jobsitename , fluidname: output.fluidname , viscosityname: output.viscosityname , oilchanged: output.oilchanged , filterchanged: output.filterchanged , levelname: output.levelname , comment: output.comment , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , oilsample: output.oilsample ) } } //create function func save(_ output: mdlOilSampleItem, _ req: Request, _ input: mdlOilSampleItem.Input) -> EventLoopFuture { return output .save(on: req.db) .map{ mdlOilSampleItem.Output( id: output.id! , compartmentname: output.compartmentname , compartmentcode: output.compartmentcode , compartmentlocationname1: output.compartmentlocationname1 , compartmentlocationcode1: output.compartmentlocationcode1 , compartmentlocationname2: output.compartmentlocationname2 , compartmentlocationcode2: output.compartmentlocationcode2 , hoursonoil: output.hoursonoil , oiladded: output.oiladded , jobsitename: output.jobsitename , fluidname: output.fluidname , viscosityname: output.viscosityname , oilchanged: output.oilchanged , filterchanged: output.filterchanged , levelname: output.levelname , comment: output.comment , createdate: output.createdate , createuserid: output.createuserid , updatedate: output.updatedate , updateuserid: output.updateuserid , oilsample: input.oilsample ) } } } extension OilSampleItemCtrl: RouteCollection{ func boot(routes: RoutesBuilder) throws{ let apigroup = routes.grouped("oilsampleitems") apigroup.get("", use: readAll) apigroup.get(":id", use: read) apigroup.post("", use: create) apigroup.post(":id", use: update) apigroup.delete(":id", use: delete) } }