diff --git a/src/models/Itinerary.ts b/src/models/Itinerary.ts new file mode 100644 index 0000000..9ae9b3a --- /dev/null +++ b/src/models/Itinerary.ts @@ -0,0 +1,47 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + CreateDateColumn, + UpdateDateColumn, + OneToMany, +} from 'typeorm'; +import Van from './Van'; + +@Entity('itineraries') +class User { + @PrimaryGeneratedColumn('increment') + id_itinerary: number; + + @Column() + van_plate: string; + + @Column() + price: number; + + @Column() + days_of_week: number; + + @Column() + specific_day: Date; + + @Column() + estimated_departure_time: Date; + + @Column() + estimated_arrival_time: Date; + + @Column() + available_seats: number; + + @Column() + itinerary_nickname: string; + + @CreateDateColumn() + created_at: Date; + + @UpdateDateColumn() + updated_at: Date; +} + +export default User; diff --git a/src/routes/index.ts b/src/routes/index.ts index 52d74f5..5ca1924 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -2,7 +2,7 @@ import { Router } from 'express'; import searchRoutes from './search.routes'; import sessionsRouter from './sessions.routes'; -import transportsRouter from './transports.routes'; +import itinerariesRouter from './itineraries.routes'; import usersRouter from './users.routes'; import carsRouter from './cars.routes'; import vansRouter from './vans.routes'; @@ -12,7 +12,7 @@ const routes = Router(); routes.use('/users', usersRouter); routes.use('/sessions', sessionsRouter); routes.use('/search', searchRoutes); -routes.use('/transports', transportsRouter); +routes.use('/transports', itinerariesRouter); routes.use('/cars', carsRouter); routes.use('/vans', vansRouter); diff --git a/src/routes/itineraries.routes.ts b/src/routes/itineraries.routes.ts new file mode 100644 index 0000000..e344802 --- /dev/null +++ b/src/routes/itineraries.routes.ts @@ -0,0 +1,102 @@ +import { Router } from 'express'; +import { getRepository } from 'typeorm'; +import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords'; + +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.post('/', 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 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}); + 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}); + if (distance2 <= 10) break; + } + + return (distance <= 10 && distance2 <= 10); + }); + + console.log(transportsFiltered) + return response.json(transportsFiltered); +}); + +export default itinerariesRouter;