Merge pull request #1 from Hzin/feature/buscar-transporte
Feature/buscar transporte
This commit is contained in:
20
.vscode/launch.json
vendored
Normal file
20
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "pwa-node",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Launch Program",
|
||||||
|
"skipFiles": [
|
||||||
|
"<node_internals>/**"
|
||||||
|
],
|
||||||
|
"program": "${workspaceFolder}\\src\\services\\GetCoordinatesByAddress.ts",
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/**/*.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -4,3 +4,5 @@
|
|||||||
`npm run typeorm migration:run`
|
`npm run typeorm migration:run`
|
||||||
|
|
||||||
`yarn dev:server`
|
`yarn dev:server`
|
||||||
|
|
||||||
|
`yarn typeorm migration:create -n CreateUser`
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
"@types/express": "^4.17.11",
|
"@types/express": "^4.17.11",
|
||||||
"@types/jsonwebtoken": "^8.5.1",
|
"@types/jsonwebtoken": "^8.5.1",
|
||||||
"@types/uuid": "^8.3.0",
|
"@types/uuid": "^8.3.0",
|
||||||
|
"axios": "^0.27.2",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ export class CreateUsers1617210132141 implements MigrationInterface {
|
|||||||
{
|
{
|
||||||
name: 'email',
|
name: 'email',
|
||||||
type: 'varchar',
|
type: 'varchar',
|
||||||
|
length: '255',
|
||||||
|
isUnique: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'phone_number',
|
||||||
|
type: 'varchar',
|
||||||
|
length: '14',
|
||||||
|
isUnique: true,
|
||||||
|
isNullable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'birth_date',
|
name: 'birth_date',
|
||||||
@@ -40,6 +49,13 @@ export class CreateUsers1617210132141 implements MigrationInterface {
|
|||||||
type: 'varchar',
|
type: 'varchar',
|
||||||
isNullable: true
|
isNullable: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'star_rating',
|
||||||
|
type: 'numeric',
|
||||||
|
precision: 3,
|
||||||
|
scale: 2,
|
||||||
|
isNullable: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'created_at',
|
name: 'created_at',
|
||||||
type: 'timestamp',
|
type: 'timestamp',
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
import {MigrationInterface, QueryRunner, Table} from "typeorm";
|
||||||
|
|
||||||
|
export class CreateUsersSearching1652672860580 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.createTable(
|
||||||
|
new Table({
|
||||||
|
name: 'users_searching',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
name: 'id_search',
|
||||||
|
type: 'integer',
|
||||||
|
isPrimary: true,
|
||||||
|
isGenerated: true,
|
||||||
|
generationStrategy: 'increment',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'user_id',
|
||||||
|
type: 'uuid'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'latitude_from',
|
||||||
|
type: 'numeric',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'longitude_from',
|
||||||
|
type: 'numeric',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'latitude_to',
|
||||||
|
type: 'numeric',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'longitude_to',
|
||||||
|
type: 'numeric',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'address_to',
|
||||||
|
type: 'varchar',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'created_at',
|
||||||
|
type: 'timestamp',
|
||||||
|
default: 'now()',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.dropTable('users_searching');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
37
src/models/TransportOffers.ts
Normal file
37
src/models/TransportOffers.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
Column,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
CreateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
JoinColumn
|
||||||
|
} from 'typeorm';
|
||||||
|
|
||||||
|
import User from './User';
|
||||||
|
|
||||||
|
@Entity('transport_offers')
|
||||||
|
class UserSearching {
|
||||||
|
@PrimaryGeneratedColumn('increment')
|
||||||
|
id_offer: string;
|
||||||
|
|
||||||
|
@ManyToOne(() => User, {eager: true})
|
||||||
|
@JoinColumn({ name: 'user_id', referencedColumnName: 'id_user' })
|
||||||
|
user: User;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
latitude_from: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
longitude_from: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
latitude_to: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
longitude_to: number;
|
||||||
|
|
||||||
|
@CreateDateColumn()
|
||||||
|
created_at: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UserSearching;
|
||||||
@@ -20,6 +20,9 @@ class User {
|
|||||||
@Column()
|
@Column()
|
||||||
email: string;
|
email: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
phone_number: string;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
birth_date: Date;
|
birth_date: Date;
|
||||||
|
|
||||||
@@ -32,6 +35,9 @@ class User {
|
|||||||
@Column()
|
@Column()
|
||||||
bio: string;
|
bio: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
star_rating: number;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@CreateDateColumn()
|
||||||
created_at: Date;
|
created_at: Date;
|
||||||
|
|
||||||
|
|||||||
40
src/models/UsersSearching.ts
Normal file
40
src/models/UsersSearching.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
Column,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
CreateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
JoinColumn
|
||||||
|
} from 'typeorm';
|
||||||
|
|
||||||
|
import User from './User';
|
||||||
|
|
||||||
|
@Entity('users_searching')
|
||||||
|
class UserSearching {
|
||||||
|
@PrimaryGeneratedColumn('increment')
|
||||||
|
id_search: string;
|
||||||
|
|
||||||
|
@ManyToOne(() => User, {eager: true})
|
||||||
|
@JoinColumn({ name: 'user_id', referencedColumnName: 'id_user' })
|
||||||
|
user: User;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
latitude_from: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
longitude_from: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
latitude_to: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
longitude_to: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
address_to: string;
|
||||||
|
|
||||||
|
@CreateDateColumn()
|
||||||
|
created_at: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UserSearching;
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
|
import searchRoutes from './search.routes';
|
||||||
|
|
||||||
import sessionsRouter from './sessions.routes';
|
import sessionsRouter from './sessions.routes';
|
||||||
|
import transportesRouter from './transportes.routes';
|
||||||
import usersRouter from './users.routes';
|
import usersRouter from './users.routes';
|
||||||
import carsRouter from './cars.routes';
|
import carsRouter from './cars.routes';
|
||||||
|
|
||||||
@@ -8,6 +10,8 @@ const routes = Router();
|
|||||||
|
|
||||||
routes.use('/users', usersRouter);
|
routes.use('/users', usersRouter);
|
||||||
routes.use('/sessions', sessionsRouter);
|
routes.use('/sessions', sessionsRouter);
|
||||||
|
routes.use('/search', searchRoutes);
|
||||||
|
routes.use('/transportes', transportesRouter);
|
||||||
routes.use('/cars', carsRouter);
|
routes.use('/cars', carsRouter);
|
||||||
|
|
||||||
export default routes;
|
export default routes;
|
||||||
|
|||||||
82
src/routes/search.routes.ts
Normal file
82
src/routes/search.routes.ts
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { getRepository } from 'typeorm';
|
||||||
|
import UserSearching from '../models/UsersSearching';
|
||||||
|
import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords';
|
||||||
|
import CreateUserSearchingService from '../services/CreateUserSearchingService';
|
||||||
|
import GetCoordinatesByAddress from '../services/GetCoordinatesByAddress';
|
||||||
|
|
||||||
|
const searchRoutes = Router();
|
||||||
|
|
||||||
|
interface userWithoutSensitiveInfo {
|
||||||
|
id_user: string;
|
||||||
|
name: string;
|
||||||
|
email: string;
|
||||||
|
avatar_image: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
searchRoutes.get('/list', async (request, response) => {
|
||||||
|
const usersSearchingRepository = getRepository(UserSearching);
|
||||||
|
|
||||||
|
const searches = await usersSearchingRepository.find();
|
||||||
|
|
||||||
|
// let usersWithoutSensitiveInfo: userWithoutSensitiveInfo[] = [];
|
||||||
|
|
||||||
|
// searches.map(user => {
|
||||||
|
// usersWithoutSensitiveInfo.push({
|
||||||
|
// id_user: user.id_user,
|
||||||
|
// name: user.name,
|
||||||
|
// email: user.email,
|
||||||
|
// avatar_image: user.avatar_image,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
return response.json({ data: searches });
|
||||||
|
});
|
||||||
|
|
||||||
|
searchRoutes.post('/', async (request, response) => {
|
||||||
|
const { id_user, latitude_from, longitude_from, address_to } = request.body;
|
||||||
|
|
||||||
|
const getCoordinates = new GetCoordinatesByAddress();
|
||||||
|
|
||||||
|
const coordinates = await getCoordinates.execute({ address_to });
|
||||||
|
|
||||||
|
const latitude_to = coordinates[0].lat;
|
||||||
|
const longitude_to = coordinates[0].lon;
|
||||||
|
|
||||||
|
const createUserSearching = new CreateUserSearchingService();
|
||||||
|
|
||||||
|
const search = await createUserSearching.execute({
|
||||||
|
id_user,
|
||||||
|
latitude_from,
|
||||||
|
longitude_from,
|
||||||
|
latitude_to,
|
||||||
|
longitude_to,
|
||||||
|
});
|
||||||
|
|
||||||
|
return response.json({ message: 'Busca de usuário criada.' });
|
||||||
|
});
|
||||||
|
|
||||||
|
export default searchRoutes;
|
||||||
|
|
||||||
|
//TODO: Arrumar tipo das colunas latitude e longitude que está numeric no banco mas vem como string
|
||||||
|
searchRoutes.post('/inraio', async (request, response) => {
|
||||||
|
const { latitude, longitude } = request.body;
|
||||||
|
const usersSearchingRepository = getRepository(UserSearching);
|
||||||
|
const searches = await usersSearchingRepository.find();
|
||||||
|
var searchesFiltered;
|
||||||
|
|
||||||
|
let lat1:number = +latitude;
|
||||||
|
let lng1:number = +longitude;
|
||||||
|
|
||||||
|
searchesFiltered = searches.filter(x => {
|
||||||
|
let lat2:number = +x.latitude_from;
|
||||||
|
let lng2:number = +x.longitude_from;
|
||||||
|
let distance = CalculateDistanceBetweenCoords({lat1, lng1, lat2, lng2});
|
||||||
|
return distance <= 2.75;
|
||||||
|
});
|
||||||
|
|
||||||
|
return response.json({
|
||||||
|
allRecords: searchesFiltered,
|
||||||
|
center: { latitude, longitude },
|
||||||
|
});
|
||||||
|
});
|
||||||
98
src/routes/transportes.routes.ts
Normal file
98
src/routes/transportes.routes.ts
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { getRepository } from 'typeorm';
|
||||||
|
import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords';
|
||||||
|
|
||||||
|
const transportesRouter = Router();
|
||||||
|
|
||||||
|
transportesRouter.post('/', async (request, response) => {
|
||||||
|
const { coordinatesFrom, coordinatesTo } = request.body;
|
||||||
|
console.log(coordinatesFrom, coordinatesTo);
|
||||||
|
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}],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
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 transportesRouter;
|
||||||
25
src/services/CalculateDistanceBetweenCoords.ts
Normal file
25
src/services/CalculateDistanceBetweenCoords.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
interface Request {
|
||||||
|
lat1: number,
|
||||||
|
lng1: number,
|
||||||
|
lat2: number,
|
||||||
|
lng2: number
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertToRad(lat: number, lng: number) {
|
||||||
|
let latRad = lat * (Math.PI / 180);
|
||||||
|
let lngRad = lng * (Math.PI / 180);
|
||||||
|
|
||||||
|
return { latRad, lngRad };
|
||||||
|
}
|
||||||
|
|
||||||
|
function CalculateDistanceBetweenCoords({ lat1, lng1, lat2, lng2 }: Request){
|
||||||
|
let { latRad, lngRad } = convertToRad(lat1, lng1);
|
||||||
|
let { latRad: lat2Rad, lngRad: lng2Rad } = convertToRad(lat2, lng2);
|
||||||
|
|
||||||
|
let d = Math.acos(Math.sin(latRad) * Math.sin(lat2Rad) + Math.cos(latRad) * Math.cos(lat2Rad) * Math.cos(lngRad - lng2Rad)) * 6371;
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default CalculateDistanceBetweenCoords;
|
||||||
38
src/services/CreateUserSearchingService.ts
Normal file
38
src/services/CreateUserSearchingService.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { getRepository } from 'typeorm';
|
||||||
|
|
||||||
|
import AppError from '../errors/AppError';
|
||||||
|
|
||||||
|
import User from '../models/User';
|
||||||
|
import UserSearching from '../models/UsersSearching';
|
||||||
|
|
||||||
|
interface Request {
|
||||||
|
id_user: string;
|
||||||
|
latitude_from: string;
|
||||||
|
longitude_from: string;
|
||||||
|
latitude_to: string;
|
||||||
|
longitude_to: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class CreateUserSearchingService {
|
||||||
|
public async execute({ id_user, latitude_from, longitude_from, latitude_to, longitude_to }: Request): Promise<UserSearching> {
|
||||||
|
const usersRepository = getRepository(User);
|
||||||
|
const usersSearchingRepository = getRepository(UserSearching);
|
||||||
|
|
||||||
|
const user = await usersRepository.findOne({
|
||||||
|
where: { id_user },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
throw new AppError('Usuário inválido!', 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
const search = usersSearchingRepository.create({
|
||||||
|
user, latitude_from, longitude_from, latitude_to, longitude_to
|
||||||
|
});
|
||||||
|
await usersSearchingRepository.save(search);
|
||||||
|
|
||||||
|
return search;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CreateUserSearchingService;
|
||||||
20
src/services/GetAddressByCoordinates.ts
Normal file
20
src/services/GetAddressByCoordinates.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import axios from 'axios';
|
||||||
|
import AppError from '../errors/AppError';
|
||||||
|
|
||||||
|
interface Request {
|
||||||
|
latitude: string;
|
||||||
|
longitude: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetAddressByCoordinates {
|
||||||
|
public async execute({ latitude, longitude }: Request): Promise<JSON> {
|
||||||
|
const response = await axios.get(`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${latitude}&lon=${longitude}`)
|
||||||
|
|
||||||
|
if (!response.data) {
|
||||||
|
throw new AppError('Não foi possível encontrar o endereço para a coordenada informada!', 200);
|
||||||
|
}
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GetAddressByCoordinates;
|
||||||
44
src/services/GetCoordinatesByAddress.ts
Normal file
44
src/services/GetCoordinatesByAddress.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import axios from 'axios';
|
||||||
|
import AppError from '../errors/AppError';
|
||||||
|
|
||||||
|
interface Request {
|
||||||
|
address_to: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetCoordinatesByAddress{
|
||||||
|
public async execute({ address_to }: Request): Promise<any> {
|
||||||
|
// let endereco = address_to.replace(/[^a-z0-9+ ]/gi,'')
|
||||||
|
let endereco = address_to.replace(/[^a-z0-9+áàâãéèêíïóôõöúçñ ]/gi,'')
|
||||||
|
console.log(endereco)
|
||||||
|
endereco = endereco.replace(/ /gi,'+')
|
||||||
|
endereco = endereco.replace(/\+\+/g, '+')
|
||||||
|
|
||||||
|
// console.log(endereco)
|
||||||
|
const response = await axios.get(`https://nominatim.openstreetmap.org/?addressdetails=1&q=${endereco}&format=json&limit=1`)
|
||||||
|
if (!response.data || !response.data.length) {
|
||||||
|
throw new AppError('Não foi possível encontrar coordenadas para o endereço informado!', 400);
|
||||||
|
}
|
||||||
|
console.log(response.data)
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// class GetCoordinatesByAddress{
|
||||||
|
// public async execute({ address_to }: Request): Promise<any> {
|
||||||
|
// // let endereco = address_to.replace(/[^a-z0-9+ ]/gi,'')
|
||||||
|
// let endereco = address_to.replace(/[^a-z0-9+áàâãéèêíïóôõöúçñ ]/gi,'')
|
||||||
|
// // console.log(endereco)
|
||||||
|
// endereco = endereco.replace(/ /gi,'+')
|
||||||
|
// endereco = endereco.replace(/\+\+/g, '+')
|
||||||
|
// // console.log(endereco)
|
||||||
|
// const querystring = require('querystring');
|
||||||
|
// const response = await axios.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${querystring.stringify(endereco)}key=`)
|
||||||
|
// console.log(response.data)
|
||||||
|
// if (!response.data || !response.data.length) {
|
||||||
|
// throw new AppError('Não foi possível encontrar coordenadas para o endereço informado!', 400);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return response.data;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
export default GetCoordinatesByAddress;
|
||||||
Reference in New Issue
Block a user