diff --git a/docs/insomnia.json b/docs/insomnia.json index e9f818cd5..21ca7a6ac 100644 --- a/docs/insomnia.json +++ b/docs/insomnia.json @@ -1 +1 @@ -{"_type":"export","__export_format":4,"__export_date":"2022-05-02T01:47:37.705Z","__export_source":"insomnia.desktop.app:v2022.2.1","resources":[{"_id":"req_cad0bada1e284ba2976efb0e393a909f","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651249698792,"created":1650255059765,"url":"localhost:3000/orders","name":"get orders","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{"type":"basic","useISO88591":false,"disabled":false,"username":"1","password":"senha"},"metaSortKey":-1650255059765,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_2c705df1dbcc47eabcc60bf90498a478","parentId":null,"modified":1649907991761,"created":1649907991761,"name":"New Document","description":"","scope":"design","_type":"workspace"},{"_id":"req_8b5826bdf37e4c32976e2e45a727119c","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455976995,"created":1650253425954,"url":"localhost:3000/order","name":"create order","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"restaurantId\": 1,\n \"clientId\": 1,\n \"payment\": 24.0\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_63b72947e1dc47c493557a05c2a6b730"}],"authentication":{},"metaSortKey":-1650253425954,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_16d8de8b5c894b2ab211dee134309cf7","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455977580,"created":1650253366994,"url":"localhost:3000/deliveryman","name":"create deliveryman","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Jose Cruz\",\n\t\"password\": \"senha\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_749c1e2b1f6a44e284e77fbfe06605ad"}],"authentication":{},"metaSortKey":-1650253366994,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_c188ea3e0164487bada3c59e422105e5","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455973682,"created":1650253304747,"url":"localhost:3000/restaurant","name":"create restaurant","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Bob's Madalena\",\n\t\"address\": \"Av. Eng. Abdias de Carvalho, 365 - Ilha do Retiro, Recife - PE, 50750-257\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_d22d284e543c43b9acc3c37540493e7f"}],"authentication":{},"metaSortKey":-1650253304747,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_254f144297f54edab16918b4d8581b45","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651456012214,"created":1649907991788,"url":"localhost:3000/client","name":"create client","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Bezaliel Silva\",\n\t\"address\": \"Rua Visconde de Barbacena, 329 - Varzea, Recife - PE\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_5954be099a9641828e1fd7983127c578"}],"authentication":{},"metaSortKey":-1649907991788,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ad445f5f0b6d2ce1fe949db6bf9158952b37c855","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649908250482,"created":1649907991778,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1649907991778,"_type":"environment"},{"_id":"jar_ad445f5f0b6d2ce1fe949db6bf9158952b37c855","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649907991782,"created":1649907991782,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_092caef0a2b549b0bb0a74205f4ad63c","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1650253145428,"created":1649907991773,"fileName":"ESS","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"uts_13eae73b98704a449e0fb87cf730cb29","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649907991790,"created":1649907991790,"name":"Example Test Suite","_type":"unit_test_suite"}]} \ No newline at end of file +{"_type":"export","__export_format":4,"__export_date":"2022-05-02T01:47:37.705Z","__export_source":"insomnia.desktop.app:v2022.2.1","resources":[{"_id":"req_cad0bada1e284ba2976efb0e393a909f","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651249698792,"created":1650255059765,"url":"localhost:3000/orders","name":"get orders","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{"type":"basic","useISO88591":false,"disabled":false,"username":"1","password":"senha"},"metaSortKey":-1650255059765,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_2c705df1dbcc47eabcc60bf90498a478","parentId":null,"modified":1649907991761,"created":1649907991761,"name":"New Document","description":"","scope":"design","_type":"workspace"},{"_id":"req_8b5826bdf37e4c32976e2e45a727119c","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455976995,"created":1650253425954,"url":"localhost:3000/order","name":"create order","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"restaurantId\": 1,\n \"clientId\": 1,\n \"payment\": 24.0\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_63b72947e1dc47c493557a05c2a6b730"}],"authentication":{},"metaSortKey":-1650253425954,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_16d8de8b5c894b2ab211dee134309cf7","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455977580,"created":1650253366994,"url":"localhost:3000/deliverer","name":"create deliverer","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Jose Cruz\",\n\t\"password\": \"senha\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_749c1e2b1f6a44e284e77fbfe06605ad"}],"authentication":{},"metaSortKey":-1650253366994,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_c188ea3e0164487bada3c59e422105e5","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651455973682,"created":1650253304747,"url":"localhost:3000/restaurant","name":"create restaurant","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Bob's Madalena\",\n\t\"address\": \"Av. Eng. Abdias de Carvalho, 365 - Ilha do Retiro, Recife - PE, 50750-257\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_d22d284e543c43b9acc3c37540493e7f"}],"authentication":{},"metaSortKey":-1650253304747,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_254f144297f54edab16918b4d8581b45","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1651456012214,"created":1649907991788,"url":"localhost:3000/client","name":"create client","description":"","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"Bezaliel Silva\",\n\t\"address\": \"Rua Visconde de Barbacena, 329 - Varzea, Recife - PE\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json","id":"pair_5954be099a9641828e1fd7983127c578"}],"authentication":{},"metaSortKey":-1649907991788,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ad445f5f0b6d2ce1fe949db6bf9158952b37c855","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649908250482,"created":1649907991778,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1649907991778,"_type":"environment"},{"_id":"jar_ad445f5f0b6d2ce1fe949db6bf9158952b37c855","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649907991782,"created":1649907991782,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_092caef0a2b549b0bb0a74205f4ad63c","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1650253145428,"created":1649907991773,"fileName":"ESS","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"uts_13eae73b98704a449e0fb87cf730cb29","parentId":"wrk_2c705df1dbcc47eabcc60bf90498a478","modified":1649907991790,"created":1649907991790,"name":"Example Test Suite","_type":"unit_test_suite"}]} \ No newline at end of file diff --git a/server/server.ts b/server/server.ts index 517aed166..03ce9a5da 100644 --- a/server/server.ts +++ b/server/server.ts @@ -1,14 +1,14 @@ import express = require('express') import bodyParser = require('body-parser') -import { RestaurantsService } from './src/restaurants-service' -import { ClientsService } from './src/clients-service' -import { DeliverymenService } from './src/deliverymen-service' -import { OrdersService } from './src/orders-service' -import { Order } from './src/order' -import { DeliveriesService } from './src/deliveries-service' +import { RestaurantsService } from './src/service/restaurants-service' +import { ClientsService } from './src/service/clients-service' +import { DeliverersService } from './src/service/deliverers-service' +import { OrdersService } from './src/service/orders-service' +import { Order } from './src/model/order' +import { DeliveriesService } from './src/service/deliveries-service' import { Request, Response } from 'express-serve-static-core' -import { DeliveryMapper } from './src/delivery-mapper' -import { Action } from './src/delivery-action' +import { DeliveryMapper } from './src/mapper/delivery-mapper' +import { Action } from './src/model/delivery-action' const app = express() @@ -24,9 +24,9 @@ app.use(bodyParser.json()) const restaurantService: RestaurantsService = new RestaurantsService() const clientsService: ClientsService = new ClientsService() -const deliverymenService: DeliverymenService = new DeliverymenService() +const deliverersService: DeliverersService = new DeliverersService() const ordersService: OrdersService = new OrdersService() -const deliveriesService: DeliveriesService = new DeliveriesService(ordersService, deliverymenService) +const deliveriesService: DeliveriesService = new DeliveriesService(ordersService, deliverersService) const deliveryMapper: DeliveryMapper = new DeliveryMapper() function extractCredentials (req: Request, res: Response): string[] { @@ -58,8 +58,8 @@ app.post('/client', function (req, res) { return res.send(clientsService.add(req.body)) }) -app.post('/deliveryman', function (req, res) { - return res.send(deliverymenService.add(req.body)) +app.post('/deliverer', function (req, res) { + return res.send(deliverersService.add(req.body)) }) app.post('/order', function (req, res) { @@ -67,12 +67,12 @@ app.post('/order', function (req, res) { const orderId = req.body.id const client = clientsService.getById(req.body.clientId) const restaurant = restaurantService.getById(req.body.restaurantId) - const deliveryman = req.body.deliverymanId + const deliverer = req.body.delivererId const payment = Number(req.body.payment) if (!client) throw Error('invalid client') if (!restaurant) throw Error('invalid restaurant') const order = ordersService.add({ id: orderId, restaurant: restaurant, client: client, payment: payment }) - deliveriesService.addOrder(order.id, deliveryman) + deliveriesService.addOrder(order.id, deliverer) return res.send(order) } catch (e) { return res.status(500).send(e) @@ -82,9 +82,9 @@ app.post('/order', function (req, res) { app.get('/order/:orderId', function (req, res) { try { const [username, password] = extractCredentials(req, res) - deliverymenService.auth(Number(username), password) + deliverersService.auth(Number(username), password) - const delivery = deliveriesService.byDeliveryman(Number(username)).find(({ order }) => req.params.orderId == order.id) + const delivery = deliveriesService.byDeliverer(Number(username)).find(({ order }) => req.params.orderId == order.id) return res.send(deliveryMapper.toJson(delivery)) } catch (e) { if (e.message == 'auth failed') { @@ -97,7 +97,7 @@ app.get('/order/:orderId', function (req, res) { app.get('/order/:orderId/:action', function (req, res) { try { const [username, password] = extractCredentials(req, res) - deliverymenService.auth(Number(username), password) + deliverersService.auth(Number(username), password) const delivery = deliveriesService.takeAction(Number(username), Number(req.params.orderId), (req.params.action)) return res.send(deliveryMapper.toJson(delivery)) @@ -112,7 +112,7 @@ app.get('/order/:orderId/:action', function (req, res) { app.post('/evaluation', function (req, res) { try { const [username, password] = extractCredentials(req, res) - deliverymenService.auth(Number(username), password) + deliverersService.auth(Number(username), password) const delivery = deliveriesService.evaluateOrder(Number(username), Number(req.body.id), Number(req.body.restaurantScore), Number(req.body.clientScore)) return res.send(deliveryMapper.toJson(delivery)) } catch (e) { @@ -126,9 +126,9 @@ app.post('/evaluation', function (req, res) { app.get('/orders/', function (req, res) { try { const [username, password] = extractCredentials(req, res) - deliverymenService.auth(Number(username), password) + deliverersService.auth(Number(username), password) - const ans = deliveriesService.byDeliveryman(Number(username)).map(delivery => deliveryMapper.toJsonMinimal(delivery)) + const ans = deliveriesService.byDeliverer(Number(username)).map(delivery => deliveryMapper.toJsonMinimal(delivery)) return res.status(200).send(ans) } catch (e) { if (e.message == 'auth failed') { @@ -141,9 +141,9 @@ app.get('/orders/', function (req, res) { app.get('/user/', function (req, res) { try { const [username, password] = extractCredentials(req, res) - deliverymenService.auth(Number(username), password) - const deliveryman = deliverymenService.getById(Number(username)) - return res.status(200).send({ name: deliveryman.name, wallet: deliveryman.wallet }) + deliverersService.auth(Number(username), password) + const deliverer = deliverersService.getById(Number(username)) + return res.status(200).send({ name: deliverer.name, wallet: deliverer.wallet }) } catch (e) { if (e.message == 'auth failed') { return res.status(401).send(e) diff --git a/server/spec/clients-services.spec.ts b/server/spec/clients-services.spec.ts index ce3dd7a5c..8204d7bbf 100644 --- a/server/spec/clients-services.spec.ts +++ b/server/spec/clients-services.spec.ts @@ -1,6 +1,6 @@ import 'jasmine' -import { Client } from '../src/client' -import { ClientsService } from '../src/clients-service' +import { Client } from '../src/model/client' +import { ClientsService } from '../src/service/clients-service' describe('O servico de clientes', () => { let clientsService: ClientsService diff --git a/server/spec/deliverers-service.spec.ts b/server/spec/deliverers-service.spec.ts new file mode 100644 index 000000000..4560240e1 --- /dev/null +++ b/server/spec/deliverers-service.spec.ts @@ -0,0 +1,39 @@ +import 'jasmine' +import { Deliverer } from '../src/model/deliverer' +import { DeliverersService } from '../src/service/deliverers-service' + +describe('O servico de entregadores', () => { + let deliverersService: DeliverersService + const deliverer1 = { + name: 'Gabriel Mendes' + } + const deliverer2 = { + name: 'José Cruz' + } + + beforeEach(() => deliverersService = new DeliverersService()) + + it('é inicialmente vazio', () => { + expect(deliverersService.deliverers.length).toBe(0) + }) + + it('cadastra entregadores corretamente', () => { + deliverersService.add(deliverer1) + deliverersService.add(deliverer2) + + expect(deliverersService.deliverers.length).toBe(2) + const result = deliverersService.getById(2) + expect(result.id).toBe(2) + expect(result.name).toBe(deliverer2.name) + expect(result.wallet).toBe(0.0) + }) + + it('atualiza saldo da carteira corretamente', () => { + deliverersService.add(deliverer1) + deliverersService.add(deliverer2) + + deliverersService.getById(2).addBalance(5.0) + deliverersService.getById(2).addBalance(7.0) + expect(deliverersService.getById(2).wallet).toBe(12.0) + }) +}) diff --git a/server/spec/deliveries-service.spec.ts b/server/spec/deliveries-service.spec.ts index b36d1b049..411d7ea06 100644 --- a/server/spec/deliveries-service.spec.ts +++ b/server/spec/deliveries-service.spec.ts @@ -1,12 +1,12 @@ import 'jasmine' -import { Client } from '../src/client' -import { Deliveryman } from '../src/deliveryman' -import { Order } from '../src/order' -import { DeliveriesService } from '../src/deliveries-service' -import { Restaurant } from '../src/restaurant' -import { OrdersService } from '../src/orders-service' -import { DeliverymenService } from '../src/deliverymen-service' -import { Action } from '../src/delivery-action' +import { Client } from '../src/model/client' +import { Deliverer } from '../src/model/deliverer' +import { Order } from '../src/model/order' +import { DeliveriesService } from '../src/service/deliveries-service' +import { Restaurant } from '../src/model/restaurant' +import { OrdersService } from '../src/service/orders-service' +import { DeliverersService } from '../src/service/deliverers-service' +import { Action } from '../src/model/delivery-action' describe('O servico de pedidos', () => { const NOW = new Date() @@ -15,7 +15,7 @@ describe('O servico de pedidos', () => { const TLED = new Date(NOW.getTime() - 61 * 1000) let ordersService: OrdersService - let deliverymenService: DeliverymenService + let deliverersService: DeliverersService let deliveriesService: DeliveriesService const restaurant: Restaurant = { @@ -28,11 +28,11 @@ describe('O servico de pedidos', () => { name: 'Bezaliel Silva', address: 'Rua Visconde de Barbacena, 329 - Várzea, Recife - PE, 50740-445' } - const deliveryman1 = { + const deliverer1 = { id: 1, name: 'Jose Cruz' } - const deliveryman2 = { + const deliverer2 = { id: 2, name: 'Gabriel Mendes' } @@ -51,8 +51,8 @@ describe('O servico de pedidos', () => { beforeEach(() => { ordersService = new OrdersService() - deliverymenService = new DeliverymenService() - deliveriesService = new DeliveriesService(ordersService, deliverymenService) + deliverersService = new DeliverersService() + deliveriesService = new DeliveriesService(ordersService, deliverersService) jasmine.clock().install() }) @@ -72,99 +72,99 @@ describe('O servico de pedidos', () => { expect(deliveriesService.deliveries.length).toBe(1) expect(result.order).toBe(order) expect(result.status).toBe('pending') - expect(result.deliveryman).toBeUndefined() + expect(result.deliverer).toBeUndefined() }) it('cadastra pedido com entregador', () => { const order = ordersService.add(order1) - const deliverymanA = deliverymenService.add(deliveryman1) - deliveriesService.addOrder(order.id, deliverymanA.id) + const delivererA = deliverersService.add(deliverer1) + deliveriesService.addOrder(order.id, delivererA.id) const result = deliveriesService.deliveries[0] expect(deliveriesService.deliveries.length).toBe(1) expect(result.order).toBe(order) expect(result.status).toBe('pending') - expect(result.deliveryman).toBe(deliverymanA) + expect(result.deliverer).toBe(delivererA) }) it('buscar pedido por entregador', () => { - const deliverymanA = deliverymenService.add(deliveryman1) - const deliverymanB = deliverymenService.add(deliveryman2) + const delivererA = deliverersService.add(deliverer1) + const delivererB = deliverersService.add(deliverer2) const orderA = ordersService.add(order1) const orderB = ordersService.add(order2) - deliveriesService.addOrder(orderA.id, deliverymanA.id) - deliveriesService.addOrder(orderB.id, deliverymanB.id) + deliveriesService.addOrder(orderA.id, delivererA.id) + deliveriesService.addOrder(orderB.id, delivererB.id) - const resultA = deliveriesService.byDeliveryman(deliverymanA.id) - const resultB = deliveriesService.byDeliveryman(deliverymanB.id) + const resultA = deliveriesService.byDeliverer(delivererA.id) + const resultB = deliveriesService.byDeliverer(delivererB.id) expect(deliveriesService.deliveries.length).toBe(2) expect(resultA.length).toBe(1) expect(resultA[0].order).toBe(orderA) - expect(resultA[0].deliveryman).toBe(deliverymanA) + expect(resultA[0].deliverer).toBe(delivererA) expect(resultB.length).toBe(1) expect(resultB[0].order).toBe(orderB) - expect(resultB[0].deliveryman).toBe(deliverymanB) + expect(resultB[0].deliverer).toBe(delivererB) }) it('pedido expirado, status expired, entregador na blocklist', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) jasmine.clock().mockDate(TLED) - deliveriesService.addOrder(order.id, deliveryman.id) + deliveriesService.addOrder(order.id, deliverer.id) jasmine.clock().mockDate(NOW) deliveriesService.process() - const result = deliveriesService.byDeliveryman(deliveryman.id)[0] + const result = deliveriesService.byDeliverer(deliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(1) expect(result.order).toBe(order) expect(result.status).toBe('expired') - expect(result.blocklist).toContain(deliveryman.id) + expect(result.blocklist).toContain(deliverer.id) }) describe('recebe resposta do entregador', () => { it('aceitar pedido, status in_progress', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) - deliveriesService.addOrder(order.id, deliveryman.id) - deliveriesService.takeAction(deliveryman.id, order.id, Action.ACCEPT) + const deliverer = deliverersService.add(deliverer1) + deliveriesService.addOrder(order.id, deliverer.id) + deliveriesService.takeAction(deliverer.id, order.id, Action.ACCEPT) - const result = deliveriesService.byDeliveryman(deliveryman.id) + const result = deliveriesService.byDeliverer(deliverer.id) expect(deliveriesService.deliveries.length).toBe(0) expect(result.length).toBe(1) expect(result[0].order).toBe(order) expect(result[0].status).toBe('in_progress') - expect(result[0].deliveryman).toBe(deliveryman) + expect(result[0].deliverer).toBe(deliverer) }) it('rejeitar pedido, status rejected, entregador na blocklist', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) - deliveriesService.addOrder(order.id, deliveryman.id) - deliveriesService.takeAction(deliveryman.id, order.id, Action.REJECT) + deliveriesService.addOrder(order.id, deliverer.id) + deliveriesService.takeAction(deliverer.id, order.id, Action.REJECT) - const result = deliveriesService.byDeliveryman(deliveryman.id)[0] + const result = deliveriesService.byDeliverer(deliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(1) expect(result.order).toBe(order) expect(result.status).toBe('rejected') - expect(result.blocklist).toContain(deliveryman.id) + expect(result.blocklist).toContain(deliverer.id) }) it('coletar pedido, status collected', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) jasmine.clock().mockDate(FIVE_MIN_BEFORE) - deliveriesService.addOrder(order.id, deliveryman.id) - deliveriesService.takeAction(deliveryman.id, order.id, Action.ACCEPT) + deliveriesService.addOrder(order.id, deliverer.id) + deliveriesService.takeAction(deliverer.id, order.id, Action.ACCEPT) jasmine.clock().mockDate(NOW) - deliveriesService.takeAction(deliveryman.id, order.id, Action.COLLECT) + deliveriesService.takeAction(deliverer.id, order.id, Action.COLLECT) deliveriesService.process() - const result = deliveriesService.byDeliveryman(deliveryman.id)[0] + const result = deliveriesService.byDeliverer(deliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(0) expect(result.order).toBe(order) @@ -175,17 +175,17 @@ describe('O servico de pedidos', () => { it('finalizar pedido, status finished, adicionar payment a carteira do entregador', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) jasmine.clock().mockDate(FIVE_MIN_BEFORE) - deliveriesService.addOrder(order.id, deliveryman.id) - deliveriesService.takeAction(deliveryman.id, order.id, Action.ACCEPT) + deliveriesService.addOrder(order.id, deliverer.id) + deliveriesService.takeAction(deliverer.id, order.id, Action.ACCEPT) jasmine.clock().mockDate(ONE_MIN_BEFORE) - deliveriesService.takeAction(deliveryman.id, order.id, Action.COLLECT) + deliveriesService.takeAction(deliverer.id, order.id, Action.COLLECT) deliveriesService.process() jasmine.clock().mockDate(NOW) - deliveriesService.takeAction(deliveryman.id, order.id, Action.FINISH) - const result = deliveriesService.byDeliveryman(deliveryman.id)[0] + deliveriesService.takeAction(deliverer.id, order.id, Action.FINISH) + const result = deliveriesService.byDeliverer(deliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(0) expect(result.order).toBe(order) @@ -193,44 +193,44 @@ describe('O servico de pedidos', () => { expect(result.createdAt.getTime()).toBe(FIVE_MIN_BEFORE.getTime()) expect(result.collectedAt.getTime()).toBe(ONE_MIN_BEFORE.getTime()) expect(result.finishedAt.getTime()).toBe(NOW.getTime()) - expect(deliverymenService.getById(deliveryman.id).wallet).toBe(order.payment) + expect(deliverersService.getById(deliverer.id).wallet).toBe(order.payment) }) it('pedido assinalado para entregador', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) deliveriesService.addOrder(order.id) deliveriesService.process() - const result = deliveriesService.byDeliveryman(deliveryman.id)[0] + const result = deliveriesService.byDeliverer(deliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(1) expect(result.order).toBe(order) expect(result.status).toBe('pending') - expect(result.deliveryman).toBe(deliveryman) + expect(result.deliverer).toBe(deliverer) }) it('pedido rejeitado por entregador, assinala proximo', () => { const order = ordersService.add(order1) - const deliveryman = deliverymenService.add(deliveryman1) + const deliverer = deliverersService.add(deliverer1) deliveriesService.addOrder(order.id) deliveriesService.process() - const extraDeliveryman = deliverymenService.add(deliveryman2) - deliveriesService.takeAction(deliveryman.id, order.id, Action.REJECT) + const extradeliverer = deliverersService.add(deliverer2) + deliveriesService.takeAction(deliverer.id, order.id, Action.REJECT) deliveriesService.process() - const resultRejected = deliveriesService.byDeliveryman(deliveryman.id)[0] - const resultExtra = deliveriesService.byDeliveryman(extraDeliveryman.id)[0] + const resultRejected = deliveriesService.byDeliverer(deliverer.id)[0] + const resultExtra = deliveriesService.byDeliverer(extradeliverer.id)[0] expect(deliveriesService.deliveries.length).toBe(1) expect(resultRejected.order).toBe(order) expect(resultRejected.status).toBe('rejected') - expect(resultRejected.deliveryman).toBe(deliveryman) - expect(resultRejected.blocklist).toContain(deliveryman.id) + expect(resultRejected.deliverer).toBe(deliverer) + expect(resultRejected.blocklist).toContain(deliverer.id) expect(resultExtra.order).toBe(order) expect(resultExtra.status).toBe('pending') - expect(resultExtra.deliveryman).toBe(extraDeliveryman) - expect(resultExtra.blocklist).toContain(deliveryman.id) + expect(resultExtra.deliverer).toBe(extradeliverer) + expect(resultExtra.blocklist).toContain(deliverer.id) }) }) }) diff --git a/server/spec/deliverymen-service.spec.ts b/server/spec/deliverymen-service.spec.ts deleted file mode 100644 index 187a613e3..000000000 --- a/server/spec/deliverymen-service.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import 'jasmine' -import { Deliveryman } from '../src/deliveryman' -import { DeliverymenService } from '../src/deliverymen-service' - -describe('O servico de entregadores', () => { - let deliverymenService: DeliverymenService - const deliveryman1 = { - name: 'Gabriel Mendes' - } - const deliveryman2 = { - name: 'José Cruz' - } - - beforeEach(() => deliverymenService = new DeliverymenService()) - - it('é inicialmente vazio', () => { - expect(deliverymenService.deliverymen.length).toBe(0) - }) - - it('cadastra entregadores corretamente', () => { - deliverymenService.add(deliveryman1) - deliverymenService.add(deliveryman2) - - expect(deliverymenService.deliverymen.length).toBe(2) - const result = deliverymenService.getById(2) - expect(result.id).toBe(2) - expect(result.name).toBe(deliveryman2.name) - expect(result.wallet).toBe(0.0) - }) - - it('atualiza saldo da carteira corretamente', () => { - deliverymenService.add(deliveryman1) - deliverymenService.add(deliveryman2) - - deliverymenService.getById(2).addBalance(5.0) - deliverymenService.getById(2).addBalance(7.0) - expect(deliverymenService.getById(2).wallet).toBe(12.0) - }) -}) diff --git a/server/spec/orders-service.spec.ts b/server/spec/orders-service.spec.ts index 2c947f294..0dc7d3d8f 100644 --- a/server/spec/orders-service.spec.ts +++ b/server/spec/orders-service.spec.ts @@ -1,8 +1,8 @@ import 'jasmine' -import { Client } from '../src/client' -import { Order } from '../src/order' -import { OrdersService } from '../src/orders-service' -import { Restaurant } from '../src/restaurant' +import { Client } from '../src/model/client' +import { Order } from '../src/model/order' +import { OrdersService } from '../src/service/orders-service' +import { Restaurant } from '../src/model/restaurant' describe('O servico de pedidos', () => { let ordersService: OrdersService @@ -39,6 +39,6 @@ describe('O servico de pedidos', () => { expect(result.restaurant).toBe(restaurant) expect(result.client).toBe(client) expect(result.payment).toBe(50.0) - expect(result.deliveryman).toBeUndefined() + expect(result.deliverer).toBeUndefined() }) }) diff --git a/server/spec/restaurants-service.spec.ts b/server/spec/restaurants-service.spec.ts index 885af7ab2..2e95c9fa5 100644 --- a/server/spec/restaurants-service.spec.ts +++ b/server/spec/restaurants-service.spec.ts @@ -1,6 +1,6 @@ import 'jasmine' -import { Restaurant } from '../src/restaurant' -import { RestaurantsService } from '../src/restaurants-service' +import { Restaurant } from '../src/model/restaurant' +import { RestaurantsService } from '../src/service/restaurants-service' describe('O servico de restaurantes', () => { let restaurantsService: RestaurantsService diff --git a/server/spec/server.spec.ts b/server/spec/server.spec.ts index 9c1e116bb..a337c7f68 100644 --- a/server/spec/server.spec.ts +++ b/server/spec/server.spec.ts @@ -1,14 +1,14 @@ import 'jasmine' import request = require('request-promise') -import { Client } from '../src/client' -import { Deliveryman } from '../src/deliveryman' -import { Order } from '../src/order' -import { Restaurant } from '../src/restaurant' +import { Client } from '../src/model/client' +import { Deliverer } from '../src/model/deliverer' +import { Order } from '../src/model/order' +import { Restaurant } from '../src/model/restaurant' const baseUrl = 'http://localhost:3000' const restaurantUrl = `${baseUrl}/restaurant/` const clientUrl = `${baseUrl}/client/` -const deliverymanUrl = `${baseUrl}/deliveryman/` +const delivererUrl = `${baseUrl}/deliverer/` const orderUrl = `${baseUrl}/order/` const ordersUrl = `${baseUrl}/orders/` const processUrl = `${baseUrl}/process/` @@ -21,13 +21,13 @@ describe('O servidor', () => { name: "Bob's Madalena", address: 'Av. Eng. Abdias de Carvalho, 365 - Ilha do Retiro, Recife - PE, 50750-257' } - const deliveryman1 = { + const deliverer1 = { id: 2, name: 'Gabriel Mendes', password: 'mendao' } - const deliveryman2 = { + const deliverer2 = { id: 3, name: 'Jose Cruz', password: 'casa' @@ -79,12 +79,12 @@ describe('O servidor', () => { }) it('cadastra entregador', () => { - const options = { method: 'POST', uri: (deliverymanUrl), body: deliveryman1, json: true } + const options = { method: 'POST', uri: (delivererUrl), body: deliverer1, json: true } return request(options) .then(body => { - const res = (body) - expect(res.id).toBe(deliveryman1.id) - expect(res.name).toBe(deliveryman1.name) + const res = (body) + expect(res.id).toBe(deliverer1.id) + expect(res.name).toBe(deliverer1.name) expect(res.wallet).toBe(0.0) }) }) @@ -93,15 +93,15 @@ describe('O servidor', () => { method: 'GET', uri: (userUrl), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } return request(options) .then(body => { const res = body - expect(res.name).toBe(deliveryman1.name) + expect(res.name).toBe(deliverer1.name) expect(res.wallet).toBe(0.0) }) }) @@ -130,8 +130,8 @@ describe('O servidor', () => { method: 'GET', uri: (uri), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password } } @@ -169,8 +169,8 @@ describe('O servidor', () => { method: 'GET', uri: (uri), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password } } return request(options) @@ -190,8 +190,8 @@ describe('O servidor', () => { method: 'GET', uri: (uri), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } @@ -209,8 +209,8 @@ describe('O servidor', () => { method: 'GET', uri: (ordersUrl), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } @@ -236,8 +236,8 @@ describe('O servidor', () => { method: 'GET', uri: (uri), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } @@ -261,8 +261,8 @@ describe('O servidor', () => { method: 'GET', uri: (uri), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } @@ -280,26 +280,26 @@ describe('O servidor', () => { method: 'GET', uri: (userUrl), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } return request(options) .then(body => { const res = body - expect(res.name).toBe(deliveryman1.name) + expect(res.name).toBe(deliverer1.name) expect(res.wallet).toBe(order2.payment) }) }) it('cadastrar entregador 2', () => { - const options = { method: 'POST', uri: (deliverymanUrl), body: deliveryman2, json: true } + const options = { method: 'POST', uri: (delivererUrl), body: deliverer2, json: true } return request(options) .then(body => { - const res = (body) - expect(res.id).toBe(deliveryman2.id) - expect(res.name).toBe(deliveryman2.name) + const res = (body) + expect(res.id).toBe(deliverer2.id) + expect(res.name).toBe(deliverer2.name) expect(res.wallet).toBe(0.0) }) }) @@ -314,7 +314,7 @@ describe('O servidor', () => { method: 'GET', uri: (ordersUrl), auth: { - user: deliveryman2.id.toString(), + user: deliverer2.id.toString(), pass: 'casarao' }, json: true @@ -335,8 +335,8 @@ describe('O servidor', () => { method: 'GET', uri: (ordersUrl), auth: { - user: deliveryman2.id.toString(), - pass: deliveryman2.password + user: deliverer2.id.toString(), + pass: deliverer2.password }, json: true } @@ -359,8 +359,8 @@ describe('O servidor', () => { method: 'GET', uri: (orderUrl + order1.id), auth: { - user: deliveryman1.id.toString(), - pass: deliveryman1.password + user: deliverer1.id.toString(), + pass: deliverer1.password }, json: true } diff --git a/server/src/deliverymen-service.ts b/server/src/deliverymen-service.ts deleted file mode 100644 index 4743a8a58..000000000 --- a/server/src/deliverymen-service.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Deliveryman } from './deliveryman' - -export class DeliverymenService { - deliverymen: Deliveryman[] = [] - idCount = 1 - - retrieveId (deliveryman: Deliveryman): void { - if (deliveryman.id) { - if (this.getById(deliveryman.id)) throw Error('deliveryman id in use') - return - } - deliveryman.id = this.idCount++ - } - - add (deliveryman: Deliveryman): Deliveryman { - this.retrieveId(deliveryman) - const newDeliveryman = new Deliveryman(deliveryman) - this.deliverymen.push(newDeliveryman) - return newDeliveryman - } - - get (): Deliveryman[] { - return this.deliverymen - } - - getFree (): Deliveryman[] { - return this.deliverymen.filter(deliveryman => deliveryman.isFree()) - } - - getById (deliverymanId: number): Deliveryman { - return this.deliverymen.find(({ id }) => id == deliverymanId) - } - - auth (username: number, password: string) { - const stored = this.getById(username).password - if ((stored || '') != password) { - throw Error('auth failed') - } - } -} diff --git a/server/src/delivery-mapper.ts b/server/src/mapper/delivery-mapper.ts similarity index 86% rename from server/src/delivery-mapper.ts rename to server/src/mapper/delivery-mapper.ts index 64b86827c..606a2040b 100644 --- a/server/src/delivery-mapper.ts +++ b/server/src/mapper/delivery-mapper.ts @@ -1,7 +1,7 @@ -import { Order } from './order' -import { Delivery } from './delivery' -import { Client } from './client' -import { Restaurant } from './restaurant' +import { Order } from '../model/order' +import { Delivery } from '../model/delivery' +import { Client } from '../model/client' +import { Restaurant } from '../model/restaurant' export class DeliveryMapper { toJsonMinimal (delivery: Delivery) { diff --git a/server/src/client.ts b/server/src/model/client.ts similarity index 100% rename from server/src/client.ts rename to server/src/model/client.ts diff --git a/server/src/deliveryman.ts b/server/src/model/deliverer.ts similarity index 63% rename from server/src/deliveryman.ts rename to server/src/model/deliverer.ts index c059f7f54..f3b013e7a 100644 --- a/server/src/deliveryman.ts +++ b/server/src/model/deliverer.ts @@ -1,6 +1,6 @@ import { Delivery } from './delivery' -export class Deliveryman { +export class Deliverer { // personal information name: string email: string @@ -15,16 +15,16 @@ export class Deliveryman { wallet = 0.0 deliveries: Delivery[] = [] - constructor (deliveryman: Deliveryman) { - this.name = deliveryman.name - this.email = deliveryman.email - this.password = deliveryman.password - this.phoneNumber = deliveryman.phoneNumber - this.cnh = deliveryman.cnh - this.birthDate = deliveryman.birthDate - this.address = deliveryman.address + constructor (deliverer: Deliverer) { + this.name = deliverer.name + this.email = deliverer.email + this.password = deliverer.password + this.phoneNumber = deliverer.phoneNumber + this.cnh = deliverer.cnh + this.birthDate = deliverer.birthDate + this.address = deliverer.address - this.id = deliveryman.id + this.id = deliverer.id } addBalance (amount: number) { diff --git a/server/src/delivery-action.ts b/server/src/model/delivery-action.ts similarity index 100% rename from server/src/delivery-action.ts rename to server/src/model/delivery-action.ts diff --git a/server/src/delivery-status.ts b/server/src/model/delivery-status.ts similarity index 100% rename from server/src/delivery-status.ts rename to server/src/model/delivery-status.ts diff --git a/server/src/delivery.ts b/server/src/model/delivery.ts similarity index 76% rename from server/src/delivery.ts rename to server/src/model/delivery.ts index fb0ccd63b..bc32f410f 100644 --- a/server/src/delivery.ts +++ b/server/src/model/delivery.ts @@ -1,10 +1,10 @@ import { Order } from './order' -import { Deliveryman } from './deliveryman' +import { Deliverer } from './deliverer' import { Status } from './delivery-status' export class Delivery { order: Order - deliveryman: Deliveryman + deliverer: Deliverer blocklist: Set createdAt: Date collectedAt: Date @@ -14,7 +14,7 @@ export class Delivery { constructor (delivery: Delivery) { this.order = delivery.order - this.deliveryman = delivery.deliveryman + this.deliverer = delivery.deliverer this.createdAt = delivery.createdAt ? delivery.createdAt : new Date() this.blocklist = delivery.blocklist ? delivery.blocklist : new Set() this.status = Status.PENDING @@ -32,7 +32,7 @@ export class Delivery { finish () { this.status = Status.FINISHED this.finishedAt = new Date() - this.deliveryman.addBalance(this.order.payment) + this.deliverer.addBalance(this.order.payment) } evaluate () { @@ -42,18 +42,18 @@ export class Delivery { reject () { this.status = Status.REJECTED - this.blocklist.add(this.deliveryman.id) + this.blocklist.add(this.deliverer.id) } expire () { this.status = Status.EXPIRED - if (this.deliveryman) { - this.blocklist.add(this.deliveryman.id) + if (this.deliverer) { + this.blocklist.add(this.deliverer.id) } } - isBlocklisted (deliverymanId: number): boolean { - return this.blocklist.has(deliverymanId) + isBlocklisted (delivererId: number): boolean { + return this.blocklist.has(delivererId) } inactive () { diff --git a/server/src/order.ts b/server/src/model/order.ts similarity index 52% rename from server/src/order.ts rename to server/src/model/order.ts index 896214559..5d03d9774 100644 --- a/server/src/order.ts +++ b/server/src/model/order.ts @@ -1,23 +1,23 @@ import { Restaurant } from './restaurant' import { Client } from './client' -import { Deliveryman } from './deliveryman' +import { Deliverer } from './deliverer' export class Order { id: number restaurant: Restaurant client: Client payment: number - deliveryman: Deliveryman + deliverer: Deliverer - constructor (order: Order) { // id: number, restaurant: Restaurant, client: Client + constructor (order: Order) { this.id = order.id this.restaurant = order.restaurant this.client = order.client this.payment = order.payment - this.deliveryman = order.deliveryman + this.deliverer = order.deliverer } - setDeliveryman (deliveryman: Deliveryman): void { - this.deliveryman = deliveryman + setDeliverer (deliverer: Deliverer): void { + this.deliverer = deliverer } } diff --git a/server/src/restaurant.ts b/server/src/model/restaurant.ts similarity index 100% rename from server/src/restaurant.ts rename to server/src/model/restaurant.ts diff --git a/server/src/clients-service.ts b/server/src/service/clients-service.ts similarity index 94% rename from server/src/clients-service.ts rename to server/src/service/clients-service.ts index 406d148bc..016d710d8 100644 --- a/server/src/clients-service.ts +++ b/server/src/service/clients-service.ts @@ -1,4 +1,4 @@ -import { Client } from './client' +import { Client } from '../model/client' export class ClientsService { clients: Client[] = [] diff --git a/server/src/service/deliverers-service.ts b/server/src/service/deliverers-service.ts new file mode 100644 index 000000000..9cbc27c70 --- /dev/null +++ b/server/src/service/deliverers-service.ts @@ -0,0 +1,40 @@ +import { Deliverer } from '../model/deliverer' + +export class DeliverersService { + deliverers: Deliverer[] = [] + idCount = 1 + + retrieveId (deliverer: Deliverer): void { + if (deliverer.id) { + if (this.getById(deliverer.id)) throw Error('deliveryman id in use') + return + } + deliverer.id = this.idCount++ + } + + add (deliverer: Deliverer): Deliverer { + this.retrieveId(deliverer) + const newDeliverer = new Deliverer(deliverer) + this.deliverers.push(newDeliverer) + return newDeliverer + } + + get (): Deliverer[] { + return this.deliverers + } + + getFree (): Deliverer[] { + return this.deliverers.filter(deliverer => deliverer.isFree()) + } + + getById (deliverer: number): Deliverer { + return this.deliverers.find(({ id }) => id == deliverer) + } + + auth (username: number, password: string) { + const stored = this.getById(username).password + if ((stored || '') != password) { + throw Error('auth failed') + } + } +} diff --git a/server/src/deliveries-service.ts b/server/src/service/deliveries-service.ts similarity index 55% rename from server/src/deliveries-service.ts rename to server/src/service/deliveries-service.ts index 561183e56..a1ab7555b 100644 --- a/server/src/deliveries-service.ts +++ b/server/src/service/deliveries-service.ts @@ -1,21 +1,21 @@ -import { Delivery } from './delivery' -import { Action } from './delivery-action' -import { Status } from './delivery-status' -import { Deliveryman } from './deliveryman' -import { DeliverymenService } from './deliverymen-service' +import { Delivery } from '../model/delivery' +import { Action } from '../model/delivery-action' +import { Status } from '../model/delivery-status' +import { Deliverer } from '../model/deliverer' +import { DeliverersService } from './deliverers-service' import { OrdersService } from './orders-service' const TIMELIMIT = 60 * 1000 export class DeliveriesService { ordersService: OrdersService - deliverymenService: DeliverymenService + deliverersService: DeliverersService deliveries: Delivery[] = [] idCount = 1 - constructor (ordersService: OrdersService, deliverymenService: DeliverymenService) { + constructor (ordersService: OrdersService, deliverersService: DeliverersService) { this.ordersService = ordersService - this.deliverymenService = deliverymenService + this.deliverersService = deliverersService } removeDelivery (delivery: Delivery) { @@ -33,29 +33,29 @@ export class DeliveriesService { }) expired = this.deliveries.filter(delivery => delivery.incomplete()) - const freeDeliverymen: Deliveryman[] = this.deliverymenService.getFree() + const freeDeliverers: Deliverer[] = this.deliverersService.getFree() for (let i = 0; i < expired.length; i++) { - const deliveryman = freeDeliverymen.find(deliveryman => deliveryman.isFree() && !expired[i].isBlocklisted(deliveryman.id)) - if (deliveryman) { + const deliverer = freeDeliverers.find(deliverer => deliverer.isFree() && !expired[i].isBlocklisted(deliverer.id)) + if (deliverer) { const order = expired[i].order const blocklist = expired[i].blocklist - const delivery: Delivery = new Delivery({ order: order, deliveryman: deliveryman, blocklist: blocklist, createdAt: new Date() }) - deliveryman.addDelivery(delivery) + const delivery: Delivery = new Delivery({ order: order, deliverer: deliverer, blocklist: blocklist, createdAt: new Date() }) + deliverer.addDelivery(delivery) this.deliveries.push(delivery) this.removeDelivery(expired[i]) } } } - takeAction (deliverymanId: number, orderId: number, action: Action): Delivery { - const deliveryman = this.deliverymenService.getById(deliverymanId) - if (!deliveryman) { - throw Error('no deliveryman') + takeAction (delivererId: number, orderId: number, action: Action): Delivery { + const deliverer = this.deliverersService.getById(delivererId) + if (!deliverer) { + throw Error('no deliverer') } - if (!deliveryman.deliveries) { + if (!deliverer.deliveries) { throw Error('not performed') } - const delivery = deliveryman.deliveries[0] + const delivery = deliverer.deliveries[0] if (delivery.order.id != orderId) { throw Error('not performed') } @@ -92,36 +92,36 @@ export class DeliveriesService { return delivery } - evaluateOrder (deliverymanId: number, orderId: number, rScore: number, cScore: number): Delivery { - const deliveryman = this.deliverymenService.getById(deliverymanId) - const delivery = deliveryman.getDeliveryById(orderId) - if (delivery.deliveryman && delivery.deliveryman.id != deliverymanId) throw Error('invalid delivery for deliveryman') + evaluateOrder (delivererId: number, orderId: number, rScore: number, cScore: number): Delivery { + const deliverer = this.deliverersService.getById(delivererId) + const delivery = deliverer.getDeliveryById(orderId) + if (delivery.deliverer && delivery.deliverer.id != delivererId) throw Error('invalid delivery for deliverer') delivery.order.restaurant.addScore(rScore) delivery.order.client.addScore(cScore) delivery.evaluate() return delivery } - addOrder (orderId: number, deliverymanId?: number) { + addOrder (orderId: number, delivererId?: number) { const order = this.ordersService.getById(orderId) const delivery = new Delivery({ order: order, createdAt: new Date(0) }) - if (deliverymanId) { - const deliveryman = this.deliverymenService.getById(deliverymanId) - if (deliveryman?.isFree()) { - delivery.deliveryman = deliveryman + if (delivererId) { + const deliverer = this.deliverersService.getById(delivererId) + if (deliverer?.isFree()) { + delivery.deliverer = deliverer delivery.createdAt = new Date() - deliveryman.addDelivery(delivery) + deliverer.addDelivery(delivery) } } this.deliveries.push(delivery) return delivery } - addDeliveryman (deliveryman: Deliveryman) { - return this.deliverymenService.add(deliveryman) + addDeliverer (deliverer: Deliverer) { + return this.deliverersService.add(deliverer) } - byDeliveryman (id: number): Delivery[] { - return this.deliverymenService.getById(id).deliveries + byDeliverer (id: number): Delivery[] { + return this.deliverersService.getById(id).deliveries } } diff --git a/server/src/orders-service.ts b/server/src/service/orders-service.ts similarity index 93% rename from server/src/orders-service.ts rename to server/src/service/orders-service.ts index 756921fd0..b01241e53 100644 --- a/server/src/orders-service.ts +++ b/server/src/service/orders-service.ts @@ -1,4 +1,4 @@ -import { Order } from './order' +import { Order } from '../model/order' export class OrdersService { orders: Order[] = [] diff --git a/server/src/restaurants-service.ts b/server/src/service/restaurants-service.ts similarity index 94% rename from server/src/restaurants-service.ts rename to server/src/service/restaurants-service.ts index 5a8ff1640..a6de31e3c 100644 --- a/server/src/restaurants-service.ts +++ b/server/src/service/restaurants-service.ts @@ -1,4 +1,4 @@ -import { Restaurant } from './restaurant' +import { Restaurant } from '../model/restaurant' export class RestaurantsService { restaurants: Restaurant[] = [] diff --git a/test-acceptance/features/order_management.feature b/test-acceptance/features/order_management.feature index 798f8b3a8..9b9b1b201 100644 --- a/test-acceptance/features/order_management.feature +++ b/test-acceptance/features/order_management.feature @@ -13,18 +13,18 @@ Feature: Order Management And I receive a response with field "id" value "13" And I receive a response with field "name" value "Bob's Madalena" And I receive a response with field "address" value "Av. Eng. Abdias de Carvalho, 365 - Ilha do Retiro, Recife - PE, 50750-257" - Scenario: create deliveryman + Scenario: create deliverer Given server is up - When I create a deliveryman with name "Jose Cruz", password "senha", id "1" + When I create a deliverer with name "Jose Cruz", password "senha", id "1" Then I receive code "200" And I receive a response with field "id" value "1" And I receive a response with field "name" value "Jose Cruz" Scenario: check wallet Given I'm on the page "deliveries" - Then deliveryman wallet has "0" - Scenario: create a order to deliveryman + Then deliverer wallet has "0" + Scenario: create a order to deliverer Given I'm on the page "deliveries" - When I create a order from client "14", to restaurant "13", to deliveryman "1", payment "10", id "33" + When I create a order from client "14", to restaurant "13", to deliverer "1", payment "10", id "33" Then I receive code "200" And the order "33" appears on list with status "pending" Scenario: reject order @@ -32,9 +32,9 @@ Feature: Order Management When I click to see details from order "33" with status "pending" And I reject the order "33" Then the order has status "rejected" - Scenario: create a second order to deliveryman + Scenario: create a second order to deliverer Given I'm on the page "deliveries" - When I create a order from client "14", to restaurant "13", to deliveryman "1", payment "23", id "22" + When I create a order from client "14", to restaurant "13", to deliverer "1", payment "23", id "22" Then I receive code "200" And the order "22" appears on list with status "pending" Scenario: accept second order @@ -42,16 +42,19 @@ Feature: Order Management When I click to see details from order "22" with status "pending" And I accept the order "22" Then the order has status "in_progress" + And I don't see client address Scenario: collect second order Given I'm on the page "deliveries" When I click to see details from order "22" with status "in_progress" And I collect the order "22" Then the order has status "collected" + And I see client address "Rua Visconde de Barbacena, 329 - Varzea, Recife - PE" Scenario: finish second order Given I'm on the page "deliveries" When I click to see details from order "22" with status "collected" And I finish the order "22" Then the order has status "finished" + And I don't see client address Scenario: check wallet after finished order Given I'm on the page "deliveries" - Then deliveryman wallet has "23" + Then deliverer wallet has "23" diff --git a/test-acceptance/stepdefinitions/order_management.ts b/test-acceptance/stepdefinitions/order_management.ts index 514e2cadc..8b061221b 100644 --- a/test-acceptance/stepdefinitions/order_management.ts +++ b/test-acceptance/stepdefinitions/order_management.ts @@ -39,8 +39,8 @@ defineSupportCode(function ({ Given, When, Then }) { lastResponse = response }) - When(/^I create a deliveryman with name "([^\"]*)", password "([^\"]*)", id "(\d*)"$/, async (name, password, id) => { - const response = await serverClient.send(new Request("POST", "/deliveryman", { + When(/^I create a deliverer with name "([^\"]*)", password "([^\"]*)", id "(\d*)"$/, async (name, password, id) => { + const response = await serverClient.send(new Request("POST", "/deliverer", { "id": id, "name": name, "password": password @@ -48,13 +48,13 @@ defineSupportCode(function ({ Given, When, Then }) { lastResponse = response }) - When(/^I create a order from client "([^\"]*)", to restaurant "([^\"]*)", to deliveryman "([^\"]*)", payment "(\d*)", id "(\d*)"$/, async (client, restaurant, deliveryman, payment, id) => { + When(/^I create a order from client "([^\"]*)", to restaurant "([^\"]*)", to deliverer "([^\"]*)", payment "(\d*)", id "(\d*)"$/, async (client, restaurant, deliverer, payment, id) => { const response = await serverClient.send(new Request("POST", "/order", { "id": id, "clientId": client, "restaurantId": restaurant, "payment": payment, - "deliverymanId": deliveryman + "delivererId": deliverer })) lastResponse = response }) @@ -63,8 +63,8 @@ defineSupportCode(function ({ Given, When, Then }) { expect(lastResponse.status.toString()).to.equal(statusCode) }) - Then(/^deliveryman wallet has "(\d*)"$/, async (wallet) => { - await expect(element(by.id(`deliveryman-wallet`)).getText()).to.eventually.equal(wallet); + Then(/^deliverer wallet has "(\d*)"$/, async (wallet) => { + await expect(element(by.id(`deliverer-wallet`)).getText()).to.eventually.equal(wallet); }) Then(/^the order "(\d*)" appears on list with status "([^\"]*)"$/, async (orderId, status) => { @@ -100,4 +100,12 @@ defineSupportCode(function ({ Given, When, Then }) { Then(/^the order has status "([^\"]*)"$/, async (status) => { await expect(element(by.id(`delivery-status`)).getText()).to.eventually.equal(status) }) + + Then(/^I don't see client address$/, async () => { + expect((await element.all(by.id(`client-address`))).length).to.equal(0) + }) + + Then(/^I see client address "([^\"]*)"$/, async (address) => { + await expect(element(by.id(`client-address`)).getText()).to.eventually.equal(address) + }) }) \ No newline at end of file diff --git a/web-app/src/app/Interface/delivery-man.service.spec.ts b/web-app/src/app/Interface/deliverer.service.spec.ts similarity index 51% rename from web-app/src/app/Interface/delivery-man.service.spec.ts rename to web-app/src/app/Interface/deliverer.service.spec.ts index ebf4692dc..253b62140 100644 --- a/web-app/src/app/Interface/delivery-man.service.spec.ts +++ b/web-app/src/app/Interface/deliverer.service.spec.ts @@ -1,12 +1,12 @@ import { TestBed } from '@angular/core/testing'; -import { DeliveryManService } from './delivery-man.service'; +import { DelivererService } from './deliverer.service'; -describe('DeliveryManService', () => { +describe('DelivererService', () => { beforeEach(() => TestBed.configureTestingModule({})); it('should be created', () => { - const service: DeliveryManService = TestBed.get(DeliveryManService); + const service: DelivererService = TestBed.get(DelivererService); expect(service).toBeTruthy(); }); }); diff --git a/web-app/src/app/Interface/delivery-man.service.ts b/web-app/src/app/Interface/deliverer.service.ts similarity index 95% rename from web-app/src/app/Interface/delivery-man.service.ts rename to web-app/src/app/Interface/deliverer.service.ts index e6d6314ea..3cf82b442 100644 --- a/web-app/src/app/Interface/delivery-man.service.ts +++ b/web-app/src/app/Interface/deliverer.service.ts @@ -4,7 +4,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) -export class DeliveryManService { +export class DelivererService { //lembrete btoa('1:senha') vai ser substituido futuramente. private headers = new HttpHeaders({ diff --git a/web-app/src/app/app.module.ts b/web-app/src/app/app.module.ts index b14ce1b8b..748105f73 100644 --- a/web-app/src/app/app.module.ts +++ b/web-app/src/app/app.module.ts @@ -13,7 +13,7 @@ import { DeliveriesService } from './Interface/deliveries.service'; import { ReviewComponent } from './pages/review/review.component'; import { LoginComponent } from './pages/login/login.component'; import { HomeComponent } from './pages/home/home.component'; -import { DeliveryManService } from './Interface/delivery-man.service'; +import { DelivererService } from './Interface/deliverer.service'; import { TopPageComponent } from './pages/top-page/top-page.component'; import { AboutComponent } from './pages/about/about.component'; @@ -61,7 +61,7 @@ import { AboutComponent } from './pages/about/about.component'; } ]) ], - providers: [DeliveriesService, DeliveryManService], + providers: [DeliveriesService, DelivererService], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/web-app/src/app/pages/deliveries/deliveries.component.html b/web-app/src/app/pages/deliveries/deliveries.component.html index 46ad9f9a8..044067d28 100644 --- a/web-app/src/app/pages/deliveries/deliveries.component.html +++ b/web-app/src/app/pages/deliveries/deliveries.component.html @@ -4,8 +4,8 @@

You delivery is not logged in, please login to use the system.

-

Wallet: R$ {{wallet}}

-

User: {{user}}

+

Wallet: R$ {{wallet}}

+

User: {{user}}

diff --git a/web-app/src/app/pages/deliveries/deliveries.component.ts b/web-app/src/app/pages/deliveries/deliveries.component.ts index bcff32bf5..794db2d1c 100644 --- a/web-app/src/app/pages/deliveries/deliveries.component.ts +++ b/web-app/src/app/pages/deliveries/deliveries.component.ts @@ -5,7 +5,7 @@ import { Delivery } from '../../Interface/delivery'; import { DeliveriesService } from '../../Interface/deliveries.service'; import { interval } from 'rxjs'; import { Subscription } from 'rxjs'; -import { DeliveryManService } from 'src/app/Interface/delivery-man.service'; +import { DelivererService } from 'src/app/Interface/deliverer.service'; @Component({ selector: 'app-root', @@ -13,7 +13,7 @@ import { DeliveryManService } from 'src/app/Interface/delivery-man.service'; styleUrls: ['./deliveries.component.css'] }) export class DeliveriesComponent implements OnInit { - constructor(private deliveriesService: DeliveriesService, private deliveryManService: DeliveryManService, titleService: Title) { + constructor(private deliveriesService: DeliveriesService, private deliveryManService: DelivererService, titleService: Title) { titleService.setTitle("Cin Delivery deliveries") } diff --git a/web-app/src/app/pages/delivery/delivery.component.html b/web-app/src/app/pages/delivery/delivery.component.html index f7eaec23a..2ccb230a0 100644 --- a/web-app/src/app/pages/delivery/delivery.component.html +++ b/web-app/src/app/pages/delivery/delivery.component.html @@ -10,8 +10,8 @@

Delivery Information

Payment: R$ {{delivery.payment}}

-

Client Name: {{delivery.client.name}}

-

Client Address: {{delivery.client.address}}

+

Client Name: {{delivery.client.name}}

+

Client Address: {{delivery.client.address}}