Ajustes CRUDs das rotas de itineraries

This commit is contained in:
Matheus Albino Brunhara
2022-09-03 20:29:15 -03:00
parent 76f2d63fbc
commit 3aa7b9bf96
3 changed files with 215 additions and 69 deletions

View File

@@ -0,0 +1,43 @@
import Destination from "../models/Destination";
import Itinerary from "../models/Itinerary";
import NeighborhoodServed from "../models/NeighborhoodServed";
const itineraryExample: Itinerary = {
id_itinerary: 1,
vehicle_plate: 'ABC1234',
price: 120.00,
days_of_week: '0111110',
specific_day: undefined,
estimated_departure_time: '17:40:00',
estimated_arrival_time: '19:00:00',
available_seats: 5,
itinerary_nickname: 'Van do Osva',
// created_at: new Date('2022-09-03T20:54:04'),
// updated_at: new Date('2022-09-03T20:54:05'),
};
const neighborhoodsServed: NeighborhoodServed[] = [
{
id_neighborhood: 1,
itinerary: itineraryExample,
name: 'Parque Jambeiro',
latitude: -22.962812284675504,
longitude: -47.0504998323243,
// created_at: new Date('2022-09-03T20:54:04'),
// updated_at: new Date('2022-09-03T20:54:05'),
}
];
const destinations: Destination[] = [
{
id_destination: 1,
itinerary: itineraryExample,
name: 'PUC Campinas 1',
latitude: -22.83427688865263,
longitude: -47.048043986779355,
// created_at: new Date('2022-09-03T20:54:04'),
// updated_at: new Date('2022-09-03T20:54:05'),
}
];
export default { itineraryExample, neighborhoodsServed, destinations };

View File

@@ -1,94 +1,119 @@
import { Router } from 'express';
import { getRepository } from 'typeorm';
import axios from 'axios'
import AppError from '../errors/AppError';
import Itinerary from '../models/Itinerary';
import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords';
import CreateItineraryService from '../services/CreateItineraryService';
import NeighborhoodServed from '../models/NeighborhoodServed';
import Destination from '../models/Destination';
import testData from "../constants/itineraryExample"
const itinerariesRouter = Router();
itinerariesRouter.post('/', async (request, response) => {
const data = [
{
motorista: 'João',
valor: 'R$ 150,00',
lugares: '2',
avaliacao: '4.5',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Ricardo',
valor: 'R$ 180,00',
lugares: '5',
avaliacao: '4.0',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Luiz',
valor: 'R$ 200,00',
lugares: '1',
avaliacao: '4.3',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Marcos',
valor: 'R$ 199,00',
lugares: '6',
avaliacao: '4.9',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Orandi',
valor: 'R$ 210,00',
lugares: '8',
avaliacao: '5.0',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Pedro',
valor: 'R$ 189,00',
lugares: '4',
avaliacao: '4.1',
bairros_atendidos: [{lat:-22.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
{
motorista: 'Pericles',
valor: 'R$ 220,00',
lugares: '19',
avaliacao: '4.5',
bairros_atendidos: [{lat:-23.873432, lgn:-47.142274}],
destinos: [{lat:-22.833645, lgn:-47.048905}],
},
];
itinerariesRouter.get('/', async (request, response) => {
const itinerariesRepository = getRepository(Itinerary);
const itineraries = await itinerariesRepository.find();
return response.json({ data: itineraries });
})
itinerariesRouter.post('/', async (request, response) => {
const {
id_itinerary,
vehicle_plate,
price,
days_of_week,
specific_day,
estimated_departure_time,
estimated_arrival_time,
available_seats,
itinerary_nickname,
neighborhoodsServed,
destinations
} = request.body;
const createItineraryService = new CreateItineraryService();
const itinerary = await createItineraryService.execute({
id_itinerary,
vehicle_plate,
price,
days_of_week,
specific_day,
estimated_departure_time,
estimated_arrival_time,
available_seats,
itinerary_nickname,
neighborhoodsServed,
destinations
});
return response.json({ data: itinerary, message: 'Itinerário criado com sucesso!' });
});
itinerariesRouter.post('/examples', async (request, response) => {
const createItineraryService = new CreateItineraryService();
const itinerary = await createItineraryService.execute({
id_itinerary: testData.itineraryExample.id_itinerary,
vehicle_plate: testData.itineraryExample.vehicle_plate,
price: testData.itineraryExample.price,
days_of_week: testData.itineraryExample.days_of_week,
specific_day: testData.itineraryExample.specific_day,
estimated_departure_time: testData.itineraryExample.estimated_departure_time,
estimated_arrival_time: testData.itineraryExample.estimated_arrival_time,
available_seats: testData.itineraryExample.available_seats,
itinerary_nickname: testData.itineraryExample.itinerary_nickname,
neighborhoodsServed: testData.neighborhoodsServed,
destinations: testData.destinations,
});
return response.json({ data: itinerary, message: 'Itinerário criado com sucesso!' });
});
itinerariesRouter.post('/inradius', async (request, response) => {
const { coordinatesFrom, coordinatesTo } = request.body;
console.log(coordinatesFrom, coordinatesTo);
let lat_from: number = +coordinatesFrom.lat;
let lng_from: number = +coordinatesFrom.lng;
let lat_to: number = +coordinatesTo.lat;
let lng_to: number = +coordinatesTo.lng;
let lat_from:number = +coordinatesFrom.lat;
let lng_from:number = +coordinatesFrom.lng;
let lat_to:number = +coordinatesTo.lat;
let lng_to:number = +coordinatesTo.lng;
const { data, status } = await axios.get<Itinerary[]>(
'https://630d4f7fb37c364eb702a43d.mockapi.io/vehiclemos/itineraries',
{
headers: {
Accept: 'application/json',
},
},
);
if (status !== 200) {
throw new AppError('Não foi possível recuperar a lista de modelos do veículo informado.', 200);
}
console.log(data)
// "data" é a lista de itinerários
let transportsFiltered = data.filter(x => {
var distance = 0;
var distance2 = 0;
for (const i of x.bairros_atendidos) {
let lat2:number = +i.lat;
let lng2:number = +i.lgn;
distance = CalculateDistanceBetweenCoords({lat1:lat_from, lng1:lng_from, lat2, lng2});
let lat2: number = +i.lat;
let lng2: number = +i.lgn;
distance = CalculateDistanceBetweenCoords({ lat1: lat_from, lng1: lng_from, lat2, lng2 });
if (distance <= 10) break;
}
for (const j of x.destinos) {
let lat2:number = +j.lat;
let lng2:number = +j.lgn;
distance2 = CalculateDistanceBetweenCoords({lat1:lat_to, lng1:lng_to, lat2, lng2});
let lat2: number = +j.lat;
let lng2: number = +j.lgn;
distance2 = CalculateDistanceBetweenCoords({ lat1: lat_to, lng1: lng_to, lat2, lng2 });
if (distance2 <= 10) break;
}
@@ -99,4 +124,11 @@ itinerariesRouter.post('/', async (request, response) => {
return response.json(transportsFiltered);
});
itinerariesRouter.post('/', async (request, response) => {
const itinerariesRepository = getRepository(Itinerary);
// const itinerary = itinerariesRepository.create();
// return user;
})
export default itinerariesRouter;

View File

@@ -0,0 +1,71 @@
import { getRepository } from 'typeorm';
import AppError from '../errors/AppError';
import Itinerary from '../models/Itinerary';
import NeighborhoodServed from '../models/NeighborhoodServed';
import Destination from '../models/Destination';
interface Request {
id_itinerary: number,
vehicle_plate: string,
price: number,
days_of_week: string,
specific_day: Date | undefined,
estimated_departure_time: string,
estimated_arrival_time: string,
available_seats: number,
itinerary_nickname: string,
neighborhoodsServed: NeighborhoodServed[],
destinations: Destination[]
}
class CreateItineraryService {
public async execute({
id_itinerary,
vehicle_plate,
price,
days_of_week,
specific_day,
estimated_departure_time,
estimated_arrival_time,
available_seats,
itinerary_nickname,
neighborhoodsServed,
destinations,
}: Request): Promise<Itinerary> {
const itinerariesRepository = getRepository(Itinerary);
// TODO, verificar se o período já está ocupado para a placa da vehicle informada!
// const checkUserEmailExists = await usersRepository.findOne({
// where: { id_itinerary },
// });
// if (checkUserEmailExists) {
// throw new AppError('Email já cadastrado!', 200);
// }
const itinerary = itinerariesRepository.create({
id_itinerary,
vehicle_plate,
price,
days_of_week,
specific_day,
estimated_departure_time,
estimated_arrival_time,
available_seats,
itinerary_nickname
});
await itinerariesRepository.save(itinerary);
itinerary.neighborhoodsServed = neighborhoodsServed
itinerary.destinations = destinations
await itinerariesRepository.save(itinerary);
return itinerary;
}
}
export default CreateItineraryService;