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 downloadtask modairtask devgo build -o bin/server-bin cmd/server/main.go
./bin/server-bintask build
./bin/server-binmigrate create --ext sql --dir "internal/infra/data/database/postgres/migration" --tz UTC nameOfMigrationtask migration:generate -- nameOfMigrationmigrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" uptask migration:upmigrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" downtask migration:rollbacksqlc generatetask migration:typeswire gen --output_file_prefix injector. internal/infra/service_registry/injector.gotask generate:wirePOST /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/jsonAcesse: http://localhost:{PORT}/docs
swag init -g cmd/server/main.go -ot go,yamltask generate:docsdocker build -t mm-api-nfe:latest .
docker run -p 3333:3333 mm-api-nfedocker compose -f .docker/compose/local.yml uptask compose:localPor 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.