Skip to content

GustavoCuerva/StorageService

Repository files navigation

🗂️ Storage Service

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.


🚀 Tecnologias Utilizadas

  • .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)

🏗️ Arquitetura

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.

📂 Organização dos Arquivos no Storage (Bucket S3)

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

📑 Endpoints Disponíveis

✅ Upload de Log via Arquivo (form-data)

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
}

✅ Upload de Log via JSON

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
}

🚫 Regras de Validação

  • 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).


⚙️ Configuração do Storage (S3 ou MinIO)

Configure no .env:

S3_ENDPOINT=
S3_ACCESSKEY=
S3_SECRETKEY=
S3_USESSL=

▶️ Executando o Projeto

  1. Clone o repositório:
git clone https://github.com/GustavoCuerva/StorageService.git
  1. Entre na pasta do projeto:
cd StorageService
  1. Execute a aplicação:
dotnet run

A API estará disponível em:

https://localhost:5001/swagger

🛠️ Melhorias Futuras

  • Implementar autenticação e autorização.
  • Adicionar testes unitários e de integração.
  • Deploy em containers (Docker/Kubernetes).
  • Observabilidade (Logs, HealthChecks, Metrics).

🤝 Contribuição

Pull requests são bem-vindos! Para grandes mudanças, abra uma issue primeiro para discutir o que você gostaria de mudar.


🧑‍💻 Autor

Desenvolvido por Gustavo Cuerva 🚀


📜 Licença

Este projeto está sob licença MIT.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages