/pejota

Projeto Go + gRPC + RabbitMQ + Keycloak ...

Primary LanguageGoMIT LicenseMIT

Pejota

Pejota é um projeto de estudo de GoLang, onde estou desenvolvendo um serviço gRPC para gerenciamento de trabalhos de uma pessoa como PJ.

Arquitetura

A arquitetura do projeto é baseada no Clean Architecture e Ports and Adapters.

Tecnologias

Requisitos

Estrutura

Até o momento, a estrutura do projeto está da seguinte forma:

.
├── LICENSE
├── README.md
├── _scripts
│   └── generate_protos.sh
├── bootstrap
│   ├── config.yaml
│   └── viper.go
├── cmd
│   └── main.go
├── docker-compose.yml
├── go.mod
├── go.sum
├── internal
│   └── user
│       ├── adapter
│       │   ├── grpc
│       │   │   ├── generated
│       │   │   │   ├── user.pb.go
│       │   │   │   └── user_grpc.pb.go
│       │   │   └── user_service_server.go
│       │   └── pgx
│       │       └── user_repository.go
│       ├── application
│       │   └── service.go
│       ├── container.go
│       ├── domain
│       │   ├── event.go
│       │   ├── usecase
│       │   │   ├── create_user.go
│       │   │   ├── delete_user.go
│       │   │   ├── get_user.go
│       │   │   ├── get_users.go
│       │   │   └── update_user.go
│       │   └── user.go
│       └── port
│           ├── create_user.go
│           ├── delete_user.go
│           ├── get_user.go
│           ├── get_users.go
│           ├── update_user.go
│           └── user.go
├── migrations
│   └── 20240714111257_create_user_table.sql
├── pkg
│   ├── hasher
│   │   └── hasher.go
│   └── postgres
│       └── db.go
└── proto
    └── user.proto

Requisitos Funcionais

Users

  • Cadastrar usuário
  • Listar usuários com paginação, ordenação e filtro
  • Buscar usuário
  • Atualizar usuário
  • Deletar usuário
  • Desativar login de usuário
  • Ativar login de usuário
  • Alterar senha

Customers

  • Cadastrar cliente
  • Listar clientes com paginação, ordenação e filtro
  • Buscar cliente
  • Atualizar cliente
  • Deletar cliente

Projects

  • Cadastrar projeto
  • Listar projetos com paginação, ordenação e filtro
  • Buscar projeto
  • Atualizar projeto
  • Deletar projeto
  • Atualizar status do projeto

Tasks

  • Cadastrar tarefa
  • Listar tarefas com paginação, ordenação e filtro
  • Buscar tarefa
  • Atualizar tarefa
  • Deletar tarefa
  • Atualizar status da tarefa

Registro de horas

  • Cadastrar registro de horas
  • Listar registros de horas com paginação, ordenação e filtro
  • Buscar registro de horas
  • Atualizar registro de horas
  • Deletar registro de horas
  • Atualizar status do registro de horas

Contratos

  • Cadastrar contrato
  • Listar contratos com paginação, ordenação e filtro
  • Buscar contrato
  • Atualizar contrato
  • Deletar contrato
  • Atualizar status do contrato

Relatórios

  • Gerar relatório de horas por período e por projeto e/ou cliente

Notificações

...

Autenticação

...

Autorização

...

Requisitos Não Funcionais

  • Autenticação e autorização com Keycloak
  • Log com Zap
  • Monitoramento com Prometheus e Elasticstack/Kibana
  • Tracing com Jaeger
  • Eventos com RabbitMQ
  • Envio de e-mails a definir
  • CI/CD com GitHub Actions
  • Cache a definir
  • gRPC com protocol buffers
  • Basear na arquitetura Clean Architecture e Ports and Adapters
  • Criar rota de healthcheck
  • Criar rota de informações da aplicação
  • Acrescentar SSL/TLS gRPC server

Executando o projeto

Para executar o projeto, siga os passos abaixo:

  1. Clone o repositório:
git clone https://github.com/marcelofabianov/pejota.git
  1. Suba o banco de dados e o RabbitMQ:
docker-compose up -d
  1. Execute o comando para aplicar as migrations:

Obs.: Instale a ferramenta Goose para executar as migrations consultando o Site

export DATABASE_URL="postgresql://username:password@localhost:5432/pejota_db"

Após configurar a variável de ambiente, execute o comando abaixo:

goose -dir migrations postgres "$DATABASE_URL" up
  1. Executar o projeto:
go run cmd/main.go
  1. Em caso de atualização do arquivo proto, execute o script para gerar os arquivos necessários:
./_scripts/generate_protos.sh

Autor