diff --git a/server/src/controllers/trip.ts b/server/src/controllers/trip.ts index 2f72086..ab24ec9 100644 --- a/server/src/controllers/trip.ts +++ b/server/src/controllers/trip.ts @@ -1,6 +1,6 @@ import { Request, Response } from "express"; import errorWrapper from "../middlewares/errorWrapper"; -import { addTrip } from "../services/tripServices"; +import { addTrip, getTripById } from "../services/tripServices"; import { Prisma, Trip } from "@prisma/client"; import { PrismaClient } from "@prisma/client"; import CustomError from "../services/CustomError"; @@ -23,6 +23,16 @@ const createTrip = errorWrapper(async (req: Request, res: Response) => { throw new CustomError("No such Vehicle entry found", 404); } + await prisma.sTSVehicleEntry.update({ + where: { + id: stsVehicleId, + }, + data: { + exitTime, + weightOfWaste, + }, + }); + const vehicle = stsVehicleInfo.vehicle; const sts = stsVehicleInfo.sts; @@ -48,4 +58,57 @@ const createTrip = errorWrapper(async (req: Request, res: Response) => { res.status(201).json(newTrip); }); -export { createTrip }; +const getListOfTrips = errorWrapper(async (req: Request, res: Response) => { + const { tripStatus } = req.query; + + let where: Prisma.TripWhereInput | undefined = undefined; + + if (tripStatus) { + where = { + tripStatus: tripStatus as string, + }; + } + + const trips = await prisma.trip.findMany({ + where, + }); + res.json(trips); +}); + +const completeTrip = errorWrapper(async (req: Request, res: Response) => { + const { tripId, landfillId, vehicleId, weightOfWaste, entryTime } = req.body; + + prisma.landfillVehicleEntry.create({ + data: { + landfillId, + vehicleId, + weightOfWaste, + entryTime, + }, + }); + + const trip = await getTripById(tripId); + + if (!trip) { + throw new CustomError("No such trip found", 404); + } + + const shortage = Number(trip.weightOfWaste) - weightOfWaste; + + // calculate actual duration + + const completedTrip = await prisma.trip.update({ + where: { + id: tripId, + }, + data: { + tripStatus: "COMPLETED", + weightOfWaste, + shortage, + }, + }); + + res.json(completedTrip); +}); + +export { createTrip, getListOfTrips, completeTrip }; diff --git a/server/src/controllers/vehicle.ts b/server/src/controllers/vehicle.ts index 89e6db8..e47eae0 100644 --- a/server/src/controllers/vehicle.ts +++ b/server/src/controllers/vehicle.ts @@ -1,3 +1,4 @@ +import { Prisma } from "./../../node_modules/.prisma/client/index.d"; import { PrismaClient, Vehicle } from "@prisma/client"; import { Request, Response } from "express"; import errorWrapper from "../middlewares/errorWrapper"; @@ -63,10 +64,37 @@ const removeVehicle = errorWrapper( { statusCode: 500, message: "Couldn't delete vehicle" } ); +const getVehiclesOnQuery = errorWrapper(async (req: Request, res: Response) => { + const { landFillId, vehicleType, vehicleNumber } = req.query; + + let where: Prisma.VehicleWhereInput | undefined = undefined; + if (landFillId || vehicleType || vehicleNumber) { + where = {}; + if (landFillId) { + where.landFillId = landFillId as string; + } + + if (vehicleType) { + where.vehicleType = vehicleType as string; + } + + if (vehicleNumber) { + where.vehicleNumber = vehicleNumber as string; + } + } + + const vehicles = await prisma.vehicle.findMany({ + where, + }); + + res.json(vehicles); +}); + export { createVehicle, fetchAllVehicles, fetchVehicleById, editVehicle, removeVehicle, + getVehiclesOnQuery, }; diff --git a/server/src/prisma/schema.prisma b/server/src/prisma/schema.prisma index 46fd547..f86f1bb 100644 --- a/server/src/prisma/schema.prisma +++ b/server/src/prisma/schema.prisma @@ -177,6 +177,7 @@ model Trip { vehicleId String weightOfWaste Decimal? + shortage Decimal? estimatedFuelCost Decimal? distance Decimal? diff --git a/server/src/prisma/seed.ts b/server/src/prisma/seed.ts index 2ae36e4..76b0691 100644 --- a/server/src/prisma/seed.ts +++ b/server/src/prisma/seed.ts @@ -332,6 +332,15 @@ async function main() { console.log(newStsVehicleEntry); } + console.log("Seeding trips..."); + + for (const trip of tripData) { + const newTrip = await prisma.trip.create({ + data: trip, + }); + console.log(newTrip); + } + console.log("Seeding completed!"); } diff --git a/server/src/routes/trip.ts b/server/src/routes/trip.ts index 8ae05b1..d296fc5 100644 --- a/server/src/routes/trip.ts +++ b/server/src/routes/trip.ts @@ -1,7 +1,9 @@ import express from "express"; -import { createTrip } from "../controllers/trip"; +import { completeTrip, createTrip, getListOfTrips } from "../controllers/trip"; const router = express.Router(); router.route("/create").post(createTrip); +router.route("/search").get(getListOfTrips); +router.route("/complete").post(completeTrip); export default router; diff --git a/server/src/routes/vehicles.ts b/server/src/routes/vehicles.ts index 93d6a47..f9839af 100644 --- a/server/src/routes/vehicles.ts +++ b/server/src/routes/vehicles.ts @@ -4,12 +4,14 @@ import { editVehicle, fetchAllVehicles, fetchVehicleById, + getVehiclesOnQuery, removeVehicle, } from "../controllers/vehicle"; const router = express.Router(); router.route("/create").post(createVehicle); +router.route("/search").get(getVehiclesOnQuery); router.route("/").get(fetchAllVehicles); router.route("/:vehicleId").get(fetchVehicleById); router.route("/:vehicleId").put(editVehicle);