https://github.com/lucasvmarangoni/financial-file-manager
Sistema robusto para o armazenamento e controle de documentos financeiros. Ele oferece aos clientes e administradores de instituições financeiras a capacidade de fazer upload, gerenciar e recuperar documentos financeiros de forma eficiente.
https://github.com/lucasvmarangoni/financial-file-manager
aes bcrypt cockroachdb ddd docker golang google-cloud-storage graphql graphql-api grpc jwt microservice prometheus rabbitmq rest-api sha-256 zerolog
Last synced: 3 months ago
JSON representation
Sistema robusto para o armazenamento e controle de documentos financeiros. Ele oferece aos clientes e administradores de instituições financeiras a capacidade de fazer upload, gerenciar e recuperar documentos financeiros de forma eficiente.
- Host: GitHub
- URL: https://github.com/lucasvmarangoni/financial-file-manager
- Owner: Lucasvmarangoni
- Created: 2023-11-06T06:56:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-07T13:17:33.000Z (3 months ago)
- Last Synced: 2025-02-07T14:24:08.886Z (3 months ago)
- Topics: aes, bcrypt, cockroachdb, ddd, docker, golang, google-cloud-storage, graphql, graphql-api, grpc, jwt, microservice, prometheus, rabbitmq, rest-api, sha-256, zerolog
- Language: Go
- Homepage:
- Size: 899 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Financial file manager
## Sistema de Armazenamento e Controle de Documentos Financeiros## PROJETO INTERROMPIDO
**Nota:** O desenvolvimento do projeto foi interrompido, pois estou me dedicando a outro projeto, desenvolvido com código fechado.
Nesse momento, não tenho intenção aplicar alterações no código desse projeto, contudo posso fazer atualizações nos * Registros de engenharia de software.*, apontando correções a erros que tive na engenharia do projeto.
**Nota:** O projeto teve uma pausa no desenvolvimento, que durou de 29 Mar 2024 até 02 Jul 2024.**Acompanhe: Project Board**
## PROJETO
**Projeto de portfólio, tem como objetivos aprendizado, prática e demonstração das minhas habilidades como desenvolvedor. Portanto, as escolhas no projeto são, principalmente, com esses objetivos.**
Este projeto tem como objetivo desenvolver um sistema robusto para o armazenamento e controle de documentos financeiros. Ele oferece aos clientes e administradores de instituições financeiras a capacidade de fazer upload, gerenciar e recuperar documentos financeiros de forma eficiente.
### Principais recursos
- **Documentos**: Os documentos são inicialmente armazenados localmente no servidor e, posteriormente transferidos para um serviço de armazenamento em nuvem. Sendo requisito manter versões do documento para visualizar seu histórico.
- **Consultas**: Cada documento é acompanhado de metadados, incluindo nome, data, tipo de documento e informações relacionadas a transações financeiras.
- **Segurança**: O sistema mantém nível de segurança e controle de acesso rigoroso, além de observabilidade e registro de atividades para fins de auditoria.
- **Resiliência**: O sistema deve ser projetado para minimizar o impacto de falhas e garantir que as operações possam ser retomadas o mais rápido possível após uma falha.
⇝ * Documentação de requisitos.*
⇝ * Registros de engenharia de software.*
⇝ * Bug Log.* Registro de bugs/problemas e suas soluções.
### Bibliotecas
Bibliotecas e pacotes que criei em razão desse projeto.
⇝ * Logella.*
## EXECUÇÃO
Para iniciar o projeto nasta executar o comando:
bash bash scripts/start.sh
Antes disso é necessário realizar as configurações do ambiente.
### Configurações
#### Permissões
De permissão para o container escrever na pasta logs. Isso é necessário para que o sistema possa salvar os arquivos de logs na pasta logs, localizada na raiz do projeto.
Inicialmente pode ser necessário dar permissão de read and writer (5) para others. Isso apenas para poder verificar quem é o usuário do container no host. Antes de executar o programa execute:
chmod -R 775 logs
Em seguida pode iniciar o programa. Ele vai criar os arquivos de log na pasta logs.
Para identificar o usuário do container no host basta verificar qual usuário escreveu os arquivos de log:
ls -lt logs
A saida será algo assim:
$ ls -lt logs
total 0
-rw-r--r-- 1 65532 65532 0 Jul 9 21:28 modsec_audit.log
-rw-r--r-- 1 65532 65532 0 Jul 9 21:28 modsec_debug.logIdentificado o usuário e grupo, basta dar a permissão. Eu escolhi dar permissão de owner e mantive o grupo do meu usuário.
sudo chown 65532: logs
Pronto. As permissões necessárias estão prontas.
#### Variáveis e Secrets
Configure o arquivo .env. As variáveis necessárias estão no arquivo example.env, aqui nesse repositório.
Configure as secrets, elas estão no diretório "secrets", aqui nesse repositório.
## TECNOLOGIAS
**Linguagem**: Go (Golang)
**Arquitetura**: Microservices e Domain-Driven Design (DDD)### Persistência de dados
- **Banco de dados**: CockroachDB
- **Driver de banco de dados**: Pgx
- **Armazenamento**: Google Cloud Storage
- **Cache**: Memcached
- **Transporte**:
- **Filas**: RabbitMQ
- **Comunicação de Serviço**: gRPC### HTTP
- **API**: Rest, GraphQL e gRPC
- **Roteador**: go-chi
- **Framework GraphQL**: 99designs/gqlgen### Observabilidade
- **Logs**: Zerolog
- **Métricas**: Prometheus
- **Busca e Análise**: Elasticsearch### Segurança
- **Autenticação e Autorização**: JSON Web Token (JWT)
- **Criptografia (password)**: Bcrypt
- **Criptografia (Dados sensíveis)**: AES e SHA-256### Infraestrutura
- **Contêineres**: Docker
- **CI/CD**: Github Actions