O Backend Nota Fiscal API é uma aplicação desenvolvida em Golang que fornece uma API para a criação e consulta de notas fiscais. Utilizando práticas de arquitetura limpa e os princípios do SOLID, o projeto busca garantir um código organizado, desacoplado e de fácil manutenção.
No projeto, foram adotadas as seguintes tecnologias e práticas:
Linguagem: Foi utilizado o Golang para desenvolver o backend.
Web Framework: Go-Chi é um microframework leve e rápido para criar aplicativos da web.
Hot Reload: Air foi utilizado para acelerar o desenvolvimento.
Injeção de Dependência: Wire foi utilizado para gerenciar as dependências do projeto.
Tipagem SQL para Go: SQLC foi utilizado para gerar tipagens das queries SQL para Go.
Migrations: Golang-migrate Usado para gerenciar migrações de banco de dados.
Banco de Dados: Foi utilizado o PostgreSQL como banco de dados relacional.
Task Runner: Taskfile Ferramenta de automação de tarefas baseada em Go que permite definir e executar tarefas
Arquitetura Limpa (Clean Architecture): Foram seguidos os princípios da Arquitetura Limpa para garantir um código organizado, desacoplado e de fácil manutenção.
SOLID: Foi utilizado os princípios do SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation e Dependency Inversion) para desenvolver um código mais coeso, flexível e fácil de manter.
Datasource: Responsável por realizar a integração com fontes externas de dados. No contexto do projeto, o datasource é responsável por gerenciar todas as operações de leitura e escrita de dados no banco de dados. Além disso, ele também atua como uma ponte entre a aplicação e o microserviço de validação de documentos
Swagger: A API foi documentada utilizando o Swagger, facilitando o entendimento e a utilização.
Docker: Foi utilizado para criar um ambiente de desenvolvimento consistente e portátil, permitindo que o projeto seja facilmente executado e distribuído em diferentes ambientes.
go mod download
task mod
air
task dev
go build -o bin/server-bin cmd/server/main.go
./bin/server-bin
task build
./bin/server-bin
migrate create --ext sql --dir "internal/infra/data/database/postgres/migration" --tz UTC nameOfMigration
task migration:generate -- nameOfMigration
migrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" up
task migration:up
migrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" down
task migration:rollback
sqlc generate
task migration:types
wire gen --output_file_prefix injector. internal/infra/service_registry/injector.go
task generate:wire
POST /api/v1/nota-fiscal
Content-Type: application/json
{
"chave": "12345678901234567890123456789012345678901234",
"cnpj": "12345678901234",
"data_emissao": "2022-08-01T10:00:00Z",
"data_recebimento": "2022-08-01T10:00:00Z"
}
GET /api/v1/nota-fiscal/{chave}
Content-Type: application/json
Acesse: http://localhost:{PORT}/docs
swag init -g cmd/server/main.go -ot go,yaml
task generate:docs
docker build -t mm-api-nfe:latest .
docker run -p 3333:3333 mm-api-nfe
docker compose -f .docker/compose/local.yml up
task compose:local
Por favor, crie um arquivo chamado .env
na raiz do projeto para configurar as variáveis de ambiente necessárias.
Testes: Não foi implementado nenhum teste de unidade, integração ou end-to-end. Criar testes adequados é crucial para garantir que o código funcione como esperado e seja confiável.
Centralização de Textos: A falta de um local central para armazenar todos os textos do projeto, faz com que os textos sejam repetidos em vários lugares, o que não é muito eficiente. Mesmo que seja apenas para o português, implementar uma internacionalização já seria de grande ajuda.