Estou fazendo um aplicativo que foi a ideia de um primo meu, de uma loja por exemplo, determinar as rotas de entrega, e um entregador pegar essas rotas e objetos, e seguir o caminho determinado.
- Backend:
- Express(NodeJs): Para fazer a captura das requisições;
- Typescript: Para facilitar o desenvolvimento utilizando tipagem no Javascript;
- Jason Web Token: Para fazer a autenticação dos logins;
- PostgeSQL: Para fazer a persistência dos dados;
- TypeORM: Para fazer a conexão com o banco de dados;
- BcryptJS: Para a criptografia das senhas;
- Mobile:
- React Native: Para o desenvolvimento de mobiles utilizando Javascript;
- Typescript;
- Axios: Para a integração com o Backend através de requisições HTTP;
- React-native-maps: Para a integração com mapas no React Native;
- React-Navigation: Para a navegação de uma página para outra com React native;
Para poder rodar a aplicação, é necessário:
-
Ter instalado o Node, de preferência na versão LTS;
-
(Opcional) ter instalado o Yarn;
-
Ir nas pastas mobile e server e rodar o comando
yarn
ounpm install
para instalar as dependências em cada pasta; -
Para o backend:
-
Ter funcionando um banco de dados PostgreSQL e ajustar as configurações dos bancos de testes e de desenvolvimento no arquivo ormconfig.json e no arquivo de conexção com o banco de dados;
-
Se certificar que o postgres está com as configurações de criação de uuid, para isso rode direto no banco de dados o seguinte comando:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-
O comando
yarn test
ounpm run test
dentro da pasta server deve iniciar os teste de integração para ver se as funcionalidades da aplicação corretas; -
O comando
yarn typeorm migration:run
ounpm run typeorm migration:run
deve fazer a atualização das tabelas no banco de dados;
-
-
Para o mobile:
- Altere a url da api de acordo com o IP da máquina que está rodando o backend;
- Na Google Cloud Platform, ter configurado as seguintes APIs do Google Maps:
- Directions API;
- Maps JavaScript API;
- Maps SDK for Android;
- Maps SDK for IOS;
- Places API;
- Atualizado a chave de autorização do google no arquivo
./android/app/src/AndroidManifest.xml
:<meta-data android:name="com.google.android.geo.API_KEY" android:value="ATUALIZE_O_CODIGO_AQUI"/>
- Crie um arquivo
./src/services/Api.key.ts
e adicione a mesma chave de autorização:
export const ApiKey = 'ATUALIZE_O_CODIGO_AQUI';
-
O comando
yarn start
ounpm run start
dentro da pasta server e dentro da pasta mobile deve iniciar os programas da API Json e do aplicativo respectivamente;
Vai cadastrar uma loja, e um motorista;
- Request (application/json)
-
Body
{ "email":"emailloja@loja.com", "name":"Nome da Loja", "password":"asdfghjkl", "user":"Driver2", "userPassword":"driverpass" }
-
- Response 201 (application/json)
-
Body
{ "store": { "id": "ea59f8e0-8ca0-4c78-8ee7-9c5bb6028a3a", "name": "Nome da Loja", "email": "emailloja@loja.com", "created_at": "2020-08-11T19:51:38.990Z", "updated_at": "2020-08-11T19:51:38.990Z" }, "driver": { "id": "9dae61d5-c9f2-4ed3-86f8-2e0da43b9e0d", "name": "Driver2", "created_at": "2020-08-11T19:51:39.016Z", "updated_at": "2020-08-11T19:51:39.016Z" } }
-
- Request (application/json)
-
Body
{ "name":"LojaJeste", // Para loja, pode ser nome, ou e-mail, para motorista, deve ser apenas o nome "password":"senha do cliente" }
-
- Response 200 (application/json)
-
Body
{ "store": { "id": "ea59f8e0-8ca0-4c78-8ee7-9c5bb6028a3a", "name": "LojaJeste", "email": "lojajest@test.com", "created_at": "2020-08-11T19:51:38.990Z", "updated_at": "2020-08-11T19:51:38.990Z" }, "token": "..." // Forma de identificação do usuário é através de um jason web token }
-
Também pode ser:
- Request (application/json)
-
Body
{ "name":"Driver2", // Para loja, pode ser nome, ou e-mail, para motorista, deve ser apenas o nome "password":"senha do motorista" }
-
- Response 200 (application/json)
-
Body
{ "driver": { "id": "ea59f8e0-8ca0-4c78-8ee7-9c5bb6028a3a", "name": "LojaJeste", "created_at": "2020-08-11T19:51:38.990Z", "updated_at": "2020-08-11T19:51:38.990Z" }, "token": "..." // Forma de identificação do usuário é através de um jason web token }
-
- Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT criado após ser realizado o login
-
Body
{ "name": "Novo Motorista", "password":"Senha do novo Motorista" }
-
- Response 201 (application/json)
-
Body
{ "driver": { "id": "ea59f8e0-8ca0-4c78-8ee7-9c5bb6028a3a", "name": "LojaJeste", "created_at": "2020-08-11T19:51:38.990Z", "updated_at": "2020-08-11T19:51:38.990Z" } }
-
-
Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT criado após ser realizado o login
-
-
Response 200 (application/json)
-
Body
{ "drivers": [ { "id": "9dae61d5-c9f2-4ed3-86f8-2e0da43b9e0d", "name": "Driver2", "created_at": "2020-08-11T19:51:39.016Z", "updated_at": "2020-08-11T19:51:39.016Z" }, { "id": "bbdcc160-d8dc-4abc-9c46-e82508c0840d", "name": "Driver", "created_at": "2020-08-11T19:56:58.156Z", "updated_at": "2020-08-11T19:56:58.156Z" } ] }
-
-
Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT criado após ser realizado o login
-
Body
{ "key": "ChaveDaEntrega", // A chave é uma forma escrita de identificar cada entrega, assim é mais fácil de a loja e o motorista identificarem a entrega. "packages": [ { "product": "center", // É importante ter registrado o center, que deve ser o local de origem da viagem, caso não seja cadastrado, vai depender do frontend identificar a origem, ele vai utilizar como origem o local do dispositivo "latitude": -25.6438383, "longitude": -49.2942842 }, { "product": "Entrega 1", "latitude": -25.645397, "longitude": -49.302779 }, { "product": "Entrega 2", "latitude": -25.645890, "longitude": -49.308090 }, { "product": "Entrega 3", "latitude": -25.649149, "longitude": -49.306899 } ] }
-
-
Response 201 (application/json)
-
Body
{ "deliver": { "id": 1, "key": "ChaveDaEntrega", "amount": 4, "created_at": "2020-07-19T01:10:53.281Z", "updated_at": "2020-07-19T01:10:53.281Z" }, "packages": [ { "id": 25, "product": "center", "latitude": -25.6438383, "longitude": -49.2942842 }, { "id": 26, "product": "Entrega 1", "latitude": -25.645397, "longitude": -49.302779 }, { "id": 27, "product": "Entrega 2", "latitude": -25.64589, "longitude": -49.30809 }, { "id": 28, "product": "Entrega 3", "latitude": -25.649149, "longitude": -49.306899 } ] }
-
-
Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT criado após ser realizado o login
-
-
Response 200 (application/json)
-
Body
{ "delivers": [ { "id": 1, "key": "ChaveDaEntrega", "amount": 4, "created_at": "2020-07-19T01:10:53.281Z", "updated_at": "2020-07-19T01:10:53.281Z" } ] }
-
-
Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT de login feito através da loja
-
-
Response 200 (application/json)
-
Body
{ "deliver": { "id": 1, "key": "ChaveDaEntrega", "amount": 4, "created_at": "2020-07-19T01:10:53.281Z", "updated_at": "2020-07-19T01:10:53.281Z" }, "packages": [ { "id": 25, "product": "center", "latitude": -25.6438383, "longitude": -49.2942842 }, { "id": 26, "product": "Entrega 1", "latitude": -25.645397, "longitude": -49.302779 }, { "id": 27, "product": "Entrega 2", "latitude": -25.64589, "longitude": -49.30809 }, { "id": 28, "product": "Entrega 3", "latitude": -25.649149, "longitude": -49.306899 } ] }
-
-
Request (application/json)
-
Headers
Authorization: "Bearer JWT" // O JWT de login feito através do motorista
-
Parameters
- key: "ChaveDaEntrega" (string) - A chave de identificação da entrega
-
-
Response 200 (application/json)
-
Body
{ "deliver": { "id": 1, "key": "ChaveDaEntrega", "amount": 4, "created_at": "2020-07-19T01:10:53.281Z", "updated_at": "2020-07-19T01:10:53.281Z" }, "packages": [ { "id": 25, "product": "center", "latitude": -25.6438383, "longitude": -49.2942842 }, { "id": 26, "product": "Entrega 1", "latitude": -25.645397, "longitude": -49.302779 }, { "id": 27, "product": "Entrega 2", "latitude": -25.64589, "longitude": -49.30809 }, { "id": 28, "product": "Entrega 3", "latitude": -25.649149, "longitude": -49.306899 } ] }
-