Este é um serviço de armazenamento de logs desenvolvido para gerenciar e armazenar arquivos JSON e outros formatos em um bucket S3 (MinIO, AWS S3 ou compatíveis). A API permite o envio de logs tanto por arquivo (form-data) quanto diretamente via JSON, organizando os arquivos de forma estruturada por empresa, origem, data e método.
- .NET 8
- ASP.NET Core Web API
- MediatR
- MinIO SDK (S3 Compatible)
- Clean Architecture (Application, Domain, Infrastructure, Presentation)
- DDD (Domain-Driven Design) aplicado
- FluentValidation
- Swagger (documentação)
O projeto está dividido nas seguintes camadas:
- Domain: Entidades de negócio, Value Objects, regras de domínio.
- Application: Casos de uso, DTOs, handlers de comandos e queries.
- Infrastructure: Implementação de serviços externos (S3, por exemplo).
- Presentation: Controllers, entrada da API.
A estrutura dos arquivos é definida da seguinte forma:
{client}/{ano}/{mês}/{dia}/{method}_{timestamp}.json
Exemplo:
123456/2025/05/22/GetLog_20250522_153012_123.json
POST /log/{company}/{origin}/file
Params na URL:
company→ Empresa autorizada (ex:empresa1,empresa2)origin→ Origem do log (ex:api,site,whiteLabel)
Form Data:
| Key | Value |
|---|---|
| method | string (nome método) |
| client | string (identificador do cliente) |
| file | Arquivo (JSON, TXT, etc) |
Response:
{
"isSuccess": true,
"message": "Log saved successfully",
"errors": null
}POST /log/{company}/{origin}
Body (JSON):
{
"method": "GetData",
"client": "123456",
"jsonLog": {
"anyKey": "anyValue",
"anotherKey": {
"subKey": "value"
}
}
}Response:
{
"isSuccess": true,
"message": "Log saved successfully",
"errors": null
}- Company: Aceita apenas valores válidos (
empresa1,empresa2...). - Origin: Aceita apenas (
api,site,whiteLabel...). - Se um valor inválido for enviado, a API responde com:
{
"isSuccess": false,
"message": "Company is not valid",
"errors": null
}Ou NotFound (HTTP 404).
Configure no .env:
S3_ENDPOINT=
S3_ACCESSKEY=
S3_SECRETKEY=
S3_USESSL=- Clone o repositório:
git clone https://github.com/GustavoCuerva/StorageService.git- Entre na pasta do projeto:
cd StorageService- Execute a aplicação:
dotnet runA API estará disponível em:
https://localhost:5001/swagger
- Implementar autenticação e autorização.
- Adicionar testes unitários e de integração.
- Deploy em containers (Docker/Kubernetes).
- Observabilidade (Logs, HealthChecks, Metrics).
Pull requests são bem-vindos! Para grandes mudanças, abra uma issue primeiro para discutir o que você gostaria de mudar.
Desenvolvido por Gustavo Cuerva 🚀
Este projeto está sob licença MIT.