Este projeto segue o padrão de arquitetura Clean Architecture, que promove a separação de preocupações e a independência das camadas de software. Isso resulta em um código mais limpo, testável e flexível.
Utilizamos o padrão de arquitetura CQRS (Command Query Responsibility Segregation) para separar as operações de leitura (queries) das operações de escrita (commands). Isso melhora a escalabilidade e a manutenção do sistema, permitindo tratamento diferenciado para cada tipo de operação.
Para executar este projeto, você pode usar o Docker Compose. Certifique-se de ter o Docker e o Docker Compose instalados em seu sistema.
- Clone o repositório para sua máquina:
git https://github.com/julioc98/delivery.git
cd delivery
- Inicie os contêineres Docker com o Docker Compose:
docker-compose up
Isso iniciará todos os serviços necessários, incluindo PostgreSQL, Redis, NATS, e outros, de acordo com o arquivo docker-compose.yml.
-
Aguarde até que todos os contêineres estejam em execução e que o projeto seja construído e implantado.
-
Após iniciar os contêineres do Docker, você precisa aplicar as migrações do banco de dados. Abra um novo terminal na pasta raiz do projeto e execute o seguinte comando:
make migrate-up
Isso aplicará todas as migrações do banco de dados e configurará o esquema necessário.
- Você pode usar a coleção do Postman que esta em
docs/delivery.postman_collection.json
importando para seu Postman ou ferramenta compativel.
Mas caso queira pode fazer todas as chmadas pelo proprio terminal usando curl
Salvar nova posição do entregador:
curl --location 'localhost:3001/drivers/1/locations' \
--header 'Content-Type: application/json' \
--data '{
"latitude": 154.9988 ,
"longitude": 89.1622
}'
Recuperar a ultima posição de um entregador:
curl --location 'localhost:3001/drivers/1/locations/current' \
--header 'Content-Type: application/json'
Recuperar o historico de posições de um entregador:
curl --location 'localhost:3001/drivers/1/locations' \
--header 'Content-Type: application/json'
Recuperar todos entregadores com a posição atual proxima a um raio de uma localização:
curl --location 'localhost:3001/drivers/locations/nearby?latitude=154.9987&longitude=89.1621&radius=100' \
--header 'Content-Type: application/json'
A linguagem de programação Go (Golang) é a base deste projeto. Ela é conhecida por sua eficiência, desempenho e suporte a concorrência, tornando-a ideal para aplicativos escaláveis e de alto desempenho.
Saiba mais sobre Golang em golang.org.
O Chi é um roteador HTTP minimalista e de alto desempenho para Go. Ele é usado neste projeto para criar endpoints da API REST e gerenciar solicitações HTTP de forma eficiente.
Saiba mais sobre o Chi em github.com/go-chi/chi.
O gRPC é um framework de código aberto que facilita a comunicação entre serviços usando protocol buffers (protobufs). Neste projeto, usamos gRPC para comunicação entre componentes.
Saiba mais sobre o gRPC em grpc.io.
Os protobufs são uma linguagem de descrição de interface e um formato de serialização de dados. Eles são usados em conjunto com o gRPC para definir as mensagens e serviços da nossa API.
Saiba mais sobre protobufs em developers.google.com/protocol-buffers.
O golang-migrate é uma ferramenta que facilita a migração de bancos de dados em Go. Neste projeto, usamos o golang-migrate para gerenciar nossas migrações de banco de dados.
Saiba mais sobre o golang-migrate em github.com/golang-migrate/migrate.
O Redis é um armazenamento de dados em memória de alto desempenho. Neste projeto, usamos o Redis como um sistema de cache para melhorar o desempenho das operações de leitura.
Saiba mais sobre o Redis em redis.io.
O NATS é um sistema de mensagens de código aberto altamente escalável e de alto desempenho. Neste projeto, usamos o NATS para comunicação assíncrona entre componentes da aplicação.
Saiba mais sobre o NATS em nats.io.
O PostgreSQL é um poderoso sistema de gerenciamento de banco de dados relacional, e o PostGIS é uma extensão que adiciona suporte a dados geoespaciais. Neste projeto, usamos o PostgreSQL com o PostGIS para armazenar e gerenciar nossos dados.
Saiba mais sobre o PostgreSQL em postgresql.org e sobre o PostGIS em postgis.net.