Ajustes CRUDs das rotas de itineraries
This commit is contained in:
43
src/constants/itineraryExample.ts
Normal file
43
src/constants/itineraryExample.ts
Normal 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 };
|
||||
@@ -1,80 +1,105 @@
|
||||
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;
|
||||
|
||||
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;
|
||||
@@ -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;
|
||||
|
||||
71
src/services/CreateItineraryService.ts
Normal file
71
src/services/CreateItineraryService.ts
Normal 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;
|
||||
Reference in New Issue
Block a user