Skip to content

Aplicação desenvolvida em Golang que fornece uma API para a criação e consulta de notas fiscais.

License

Notifications You must be signed in to change notification settings

richhh7g/mm-api-nfe

Repository files navigation

Backend Nota Fiscal API

Descrição

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.

O que foi utilizado no projeto?

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.

Instalando dependências do projeto

Terminal
go mod download
Taskfile
task mod

Executando o projeto

Desenvolvimento

Terminal
air
Taskfile
task dev

Produção

Terminal
go build -o bin/server-bin cmd/server/main.go
./bin/server-bin
Taskfile
task build
./bin/server-bin

Migrações

Gerando migrações

Terminal
migrate create --ext sql --dir "internal/infra/data/database/postgres/migration" --tz UTC nameOfMigration
Taskfile
task migration:generate -- nameOfMigration

Executando migrações

Terminal
migrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" up
Taskfile
task migration:up

Revertendo migrações

Terminal
migrate --path="internal/infra/data/database/postgres/migration" --database "$DATABASE_URL" down
Taskfile
task migration:rollback

Gerando tipagens

Terminal
sqlc generate
Taskfile
task migration:types

Wire Injeção de Dependência

Terminal
wire gen --output_file_prefix injector. internal/infra/service_registry/injector.go
Taskfile
task generate:wire

Rotas

Criar Nota Fiscal

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"
}

Consultar Nota Fiscal

GET /api/v1/nota-fiscal/{chave}
Content-Type: application/json

Documentação completa com Swagger

Acesse: http://localhost:{PORT}/docs

Gerando a documentação

Terminal
swag init -g cmd/server/main.go -ot go,yaml
Taskfile
task generate:docs

Docker

Executando com o Docker

docker build -t mm-api-nfe:latest .
docker run -p 3333:3333 mm-api-nfe

Executando com o Docker Compose

Terminal
docker compose -f .docker/compose/local.yml up
Taskfile
task compose:local

Por favor, crie um arquivo chamado .env na raiz do projeto para configurar as variáveis de ambiente necessárias.

Pendências no Projeto

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.

About

Aplicação desenvolvida em Golang que fornece uma API para a criação e consulta de notas fiscais.

Resources

License

Stars

Watchers

Forks

Packages

No packages published