# README
catalog-write-api
Sobre este projeto
Este projeto é um caso de teste.
Pré-requisitos
Passo 1: Clonar o repositório
Comece clonando este repositório para sua máquina local. Abra o terminal e execute o seguinte comando:
git clone https://github.com/Andreis3/catalog-write-api.git
Passo 2: Instalar dependências
Navegue até o diretório raiz do projeto e execute o seguinte comando para instalar as dependências do Go:
go mod download
Passo 3: Configurar variáveis de ambiente
O projeto pode exigir algumas variáveis de ambiente para funcionar corretamente. Verifique se existe um arquivo .env.example
no diretório raiz do projeto. Se existir, faça uma cópia desse arquivo e renomeie-o para .env
. Em seguida, atualize as variáveis de ambiente de acordo com as configurações do seu ambiente local.
Passo 4: Subir o ambiente
Para iniciar os serviços, execute o seguinte comando:
make docker-up | docker-compose up -d --build | docker compose up -d --build
Passo 4.1: Baixar o ambiente
Para iniciar os serviços, execute o seguinte comando:
make docker-down | docker-compose down | docker compose down
Passo 5: Executar o projeto
Para executar o projeto, execute o seguinte comando:
Obs: precisa ter golang instalado na máquina versão minima 1.22.1
make run-app
Passo 6: Testar o projeto
Objeto valido:
curl --location --request POST 'http://localhost:8080' \
--header 'Content-Type: application/json' \
--data-raw ''
Objeto invalido
{
curl --location --request POST 'http://localhost:8080' \
--header 'Content-Type: application/json' \
--data-raw ''
}
Passo 7: Executar os testes
Para executar os testes, execute o seguinte comando:
make unit-tests
OBS: A aplicação precisa estar rodando para executar os testes de integração
make integration-tests
Passo 8: Gerar nova tag de versão
Para gerar uma nova tag de versão, execute o seguinte comando e siga as instruções que aparecerão no terminal:
make tag
Layout
.
├── docs/
│ ├── dashboards
│ └── sql
├── cmd/
│ └── author
├── configs
├── internal/
│ ├── app/
│ │ ├── command
│ │ └── query
│ ├── domain/
│ │ ├── aggregate
│ │ ├── entity
│ │ ├── usecase
│ │ ├── errors
│ │ ├── cache
│ │ ├── observability
│ │ ├── repository
│ │ └── uow
│ ├── infra/
│ │ ├── adapters/
│ │ │ └── db/
│ │ │ ├── postgres
│ │ │ └── redis
│ │ ├── common/
│ │ │ ├── config
│ │ │ ├── logger
│ │ │ ├── observability
│ │ │ └── uuid
│ │ ├── factory/
│ │ │ ├── command
│ │ │ ├── handler
│ │ │ └── query
│ │ ├── mapper
│ │ ├── repository/
│ │ │ ├── postgres/
│ │ │ │ ├── author
│ │ │ │ └── book
│ │ │ └── redis/
│ │ │ └── cache
│ │ ├── routes
│ │ ├── server
│ │ ├── setup
│ │ └── uow
│ ├── presentation/
│ │ └── http/
│ │ ├── handlers/
│ │ │ ├── authorhandler/
│ │ │ │ ├── authorroutes
│ │ │ │ └── dto
│ │ │ ├── healthcheck/
│ │ │ │ ├── healthhandler
│ │ │ │ └── healthroutes
│ │ │ └── observability/
│ │ │ └── metricsroutes
│ │ ├── helpers
│ │ └── middlewares
│ └── util
└── tests/
├── mock
├── unit
└── integration
Importante
- O projeto implementa o padrão de projeto Unit of Work (UOW) para garantir que todas as operações de banco de dados sejam executadas com sucesso ou sejam desfeitas em caso de erro.