Pejota é um projeto de estudo de GoLang, onde estou desenvolvendo um serviço gRPC para gerenciamento de trabalhos de uma pessoa como PJ.
A arquitetura do projeto é baseada no Clean Architecture e Ports and Adapters.
- Golang
- gRPC
- protocol buffers
- PostgreSQL
- Viper
- Dig
- Zap
- Goose
- Argo2 com Crypto
- RabbitMQ
- Keycloak
- Docker
- Prometheus
- Elasticsearch
- Kibana
- Jaeger
- GitHub Actions
- Redis (?)
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
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
...
- 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
Para executar o projeto, siga os passos abaixo:
- Clone o repositório:
git clone https://github.com/marcelofabianov/pejota.git
- Suba o banco de dados e o RabbitMQ:
docker-compose up -d
- 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
- Executar o projeto:
go run cmd/main.go
- Em caso de atualização do arquivo proto, execute o script para gerar os arquivos necessários:
./_scripts/generate_protos.sh