Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
6 changes: 2 additions & 4 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/app.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
const express = require('express');
const connection = require('./models/connection');
const { travelModel } = require('./models');
const { passagerRoute, driverRoute } = require('./routes');
const { passengerRoute, driverRoute } = require('./routes');

const app = express();

app.use(express.json());
app.use('/passengers', passagerRoute);
app.use('/passengers', passengerRoute);
app.use('/drivers', driverRoute);

module.exports = app;
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// src/controllers/passenger.controller.js
const passengerService = require('../services/passenger.service');
const { mapError } = require('../utils/errorMap');

const createTravel = async (req, res) => {
const { passengerId } = req.params;
const { startingAddress, endingAddress, waypoints } = req.body;

const { type, message } = await passengerService.requestTravel(passengerId, startingAddress, endingAddress, waypoints);

// Linha de código responsável por gerar uma resposta em caso de erro no
// processamento do componente de software da camada `Service`
if (type) {
return res.status(mapError(type)).json(message);
}

res.status(201).json(message);
};

module.exports = {
createTravel,
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ const findAll = async () => {
return camelize(result);
}

const findById = async (driverId) => {
const [[result]] = await connection.execute(
'SELECT * FROM drivers WHERE id = ?',
[driverId],
);
return camelize(result);
};

module.exports = {
findAll,
findById
}
4 changes: 2 additions & 2 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/models/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
const travelModel = require('./travel.model');
const driverModel = require('./driver.model');
const passagerModel = require('./passager.model');
const passengerModel = require('./passenger.model');
const waypointModel = require('./waypoint.model');

module.exports = {
travelModel,
driverModel,
passagerModel,
passengerModel,
waypointModel,
}
47 changes: 47 additions & 0 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/routes/driver.router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const { Router } = require('express');
const { driverService } = require('../services');
const { mapError } = require('../utils/errorMap');

const route = Router();

route.get('/open/travels', async (_req, res) => {
const { type, message } = await driverService.getWaitingDriverTravels();

if (type) return res.status(mapError(type)).json({ message });

res.status(200).json(message);
});

route.get('/', async (_req,res) => {
const { type, message } = await driverService.findAll();

if (type) return res.status(mapError(type)).json({ message });

res.status(200).json(message);
});

route.put('/:driverId/travels/:travelId/assign', async (req, res) => {
const { type, message } = await driverService.travelAssign(req.params);

if (type) return res.status(mapError(type)).json({ message });

res.status(200).json(message);
});

route.put('/:driverId/travels/:travelId/start', async (req, res) => {
const { type, message } = await driverService.startTravel(req.params);

if (type) return res.status(mapError(type)).json({ message });

res.status(200).json(message);
});

route.put('/:driverId/travels/:travelId/end', async (req, res) => {
const { type, message } = await driverService.endTravel(req.params);

if (type) return res.status(mapError(type)).json({ message });

res.status(200).json(message);
});

module.exports = route;
49 changes: 0 additions & 49 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/routes/driverRoute.js

This file was deleted.

6 changes: 3 additions & 3 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const driverRoute = require("./driverRoute");
const passagerRoute = require("./passagerRoute");
const driverRoute = require("./driver.router");
const passengerRoute = require("./passenger.router.js");

module.exports = {
driverRoute,
passagerRoute,
passengerRoute,
}
17 changes: 0 additions & 17 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/routes/passagerRoute.js

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const { Router } = require('express');
const { createTravel } = require('../controllers/passenger.controller');

const route = Router();

route.post('/:passengerId/request/travel', createTravel);

module.exports = route;
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
const { travelModel, driverModel } = require('../models');
const {
validateInputValues,
validateAlreadyDriver,
} = require('./validations/validationsInputValues');

const WAITING_DRIVER = 1;
const DRIVER_ON_THE_WAY = 2;
const TRAVEL_IN_PROGRESS = 3;
const TRAVEL_FINISHED = 4;

const getWaitingDriverTravels = async () => {
const result = await travelModel.findByTravelStatusId(WAITING_DRIVER);

if (result.length > 0) return { type: null, message: result };

return { type: 'TRAVEL_NOT_FOUND', message: 'Not found waiting travel' };
}

const findAll = async () => {
const result = await driverModel.findAll();

if (result.length > 0) return { type: null, message: result };

return { type: 'DRIVER_NOT_FOUND', message: 'Not found driver' };
}

async function setStatus(status, travelId, driverId) {
await travelModel.setStatus(status, travelId, driverId);

const result = await travelModel.findById(travelId);
return { type: null, message: result };
}

const travelAssign = async ({ travelId, driverId }) => {
let error = await checkValidations({ travelId, driverId });

if (error.type) return error;

error = await validateAlreadyDriver(travelId);
if (error.type) return error;

await travelModel.setDriver(travelId, driverId);
return await setStatus(DRIVER_ON_THE_WAY, travelId, driverId);
}

const startTravel = async ({ travelId, driverId }) => {
const error = await validateInputValues({ travelId, driverId });

if (error.type) return error;

return await setStatus(TRAVEL_IN_PROGRESS, travelId, driverId);
}

const endTravel = async ({ travelId, driverId }) => {
const error = await validateInputValues({ travelId, driverId });

if (error.type) return error;

return await setStatus(TRAVEL_FINISHED, travelId, driverId);
}

module.exports = {
getWaitingDriverTravels,
findAll,
travelAssign,
startTravel,
endTravel
};
7 changes: 7 additions & 0 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/services/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const passengerService = require('./passenger.service');
const driverService = require('./driver.service');

module.exports = {
passengerService,
driverService
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const { travelModel, passagerModel, waypointModel } = require('../models');
const { travelModel, passengerModel, waypointModel } = require('../models');
const { validateRequestTravelSchema } = require('./validations/validationsInputValues');

const doesPassengerExist = async (passengerId) => {
const passenger = await passagerModel.findById(passengerId);
const passenger = await passengerModel.findById(passengerId);

if (passenger) return true;
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@ const addRequestTravelSchema = Joi.object({
waypoints: Joi.array().items(waypointSchema)
});

const addPassengerSchema = Joi.object({
name: Joi.string().min(3).required(),
email: Joi.string().email().required(),
phone: Joi.string().min(9).max(20).required()
});

module.exports = {
idSchema,
addRequestTravelSchema,
addPassengerSchema,
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// src/services/validations/validationsInputValues.js
const { addRequestTravelSchema } = require('./schemas');
const { travelModel, driverModel } = require('../../models');
const { addRequestTravelSchema, idSchema, addPassengerSchema } = require('./schemas');

const validateRequestTravelSchema = (passengerId, startingAddress, endingAddress, waypoints) => {
const { error } = addRequestTravelSchema
Expand All @@ -9,6 +10,47 @@ const validateRequestTravelSchema = (passengerId, startingAddress, endingAddress
return { type: null, message: '' };
};

const validateInputValues = async ({ travelId, driverId }) => {
/* Valida se travelId existe */
const travel = await travelModel.findById(travelId);
if (!travel) return { type: 'TRAVEL_NOT_FOUND', message: 'travel id not found' };

/* Valida se driverId existe */
const driver = await driverModel.findById(driverId);
if (!driver) return { type: 'DRIVER_NOT_FOUND', message: 'driver id not found' };

return { type: null, message: '' };
};

const validateAlreadyDriver = async (travelId) => {
const travel = await travelModel.findById(travelId);

if (travel && travel.driverId) {
return { type: 'TRAVEL_CONFLICT', message: 'travel already assigned' };
}

return { type: null, message: '' };
};

const validateId = (id) => {
const { error } = idSchema.validate(id);
if (error) return { type: 'INVALID_VALUE', message: '"id" must be a number' };

return { type: null, message: '' };
};

const validateNewPassenger = (name, email, phone) => {
const { error } = addPassengerSchema
.validate({ name, email, phone });
if (error) return { type: 'INVALID_VALUE', message: error.message };

return { type: null, message: '' };
};

module.exports = {
validateRequestTravelSchema,
validateInputValues,
validateAlreadyDriver,
validateId,
validateNewPassenger
};
13 changes: 13 additions & 0 deletions Md03_Dev_Back_end/Bloco22/exercicios/src/utils/errorMap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const errorMap = {
TRAVEL_NOT_FOUND: 404,
DRIVER_NOT_FOUND: 404,
INVALID_VALUE: 422,
TRAVEL_CONFLICT: 409,
};

const mapError = (type) => errorMap[type] || 500;

module.exports = {
errorMap,
mapError,
};
Loading