ChatApp é uma API REST + WebSocket de chat em tempo real construída com .NET 10 e Clean Architecture, demonstrando CQRS, Result Pattern, domain-driven design e integração com AWS S3.
- 🔐 Autenticação JWT — registro e login com tokens de curta duração
- 🏠 Salas de chat — crie salas públicas ou protegidas por senha (máximo 50 membros)
- 💬 Mensagens — envie, edite (até 1h) e delete (até 24h) mensagens de texto
- 📎 Upload de mídia — imagens, áudio e vídeo via AWS S3 (máximo 50 MB)
- ⚡ Tempo real — notificações instantâneas via SignalR WebSocket
- 🚦 Rate limiting — proteção contra abuso por IP e por usuário
| Tecnologia | Uso |
|---|---|
| .NET 10 / ASP.NET Core | Framework web |
| PostgreSQL | Banco de dados relacional |
| Entity Framework Core | ORM + migrações |
| MediatR | CQRS e pipeline behaviors |
| SignalR | WebSocket em tempo real |
| JWT Bearer | Autenticação |
| AWS S3 | Armazenamento de mídia |
| xUnit + NSubstitute + FluentAssertions | Testes unitários e de integração |
| Serilog | Logging estruturado com correlation ID |
ChatApp segue o padrão Clean Architecture com quatro camadas. As dependências sempre apontam para o centro: API → Application → Domain (Infrastructure implementa interfaces de Application).
graph LR
A["ChatApp.Api\nControllers · Middlewares · Hubs"] --> B["ChatApp.Application\nUse Cases · CQRS · Abstrações"]
B --> C["ChatApp.Domain\nEntidades · Value Objects · Erros"]
D["ChatApp.Infrastructure\nEF Core · SignalR · JWT · S3"] --> B
D --> C
Veja docs/architecture.md para detalhes sobre padrões e fluxo de dados.
Pré-requisitos: .NET 10 SDK · Docker Desktop
# 1. Clone o repositório
git clone https://github.com/eovinicius/ChatApp.git
cd ChatApp
# 2. Suba o banco de dados
docker-compose up -d --build chatapp-db
# 3. Configure as variáveis (veja docs/configuration.md)
dotnet user-secrets set "ConnectionStrings:Database" \
"Host=localhost;Port=5432;Database=chatapp;Username=postgres;Password=postgres" \
--project .\src\ChatApp.Api\
dotnet user-secrets set "JwtSettings:SecretKey" "dev-secret-key-min-32-characters" --project .\src\ChatApp.Api\
dotnet user-secrets set "JwtSettings:Issuer" "ChatApp" --project .\src\ChatApp.Api\
dotnet user-secrets set "JwtSettings:Audience" "ChatApp" --project .\src\ChatApp.Api\
# 4. Execute as migrações
dotnet ef database update --project .\src\ChatApp.Infrastructure\ --startup-project .\src\ChatApp.Api\
# 5. Rode a API
dotnet run --project .\src\ChatApp.Api\ChatApp.Api.csprojAcesse a interface Swagger em http://localhost:5110/swagger/index.html
| Documento | Descrição |
|---|---|
| Arquitetura | Camadas, padrões (Result, CQRS, IUserContext) e fluxo de dados |
| Referência da API | Endpoints REST, autenticação, rate limiting, SignalR |
| Banco de Dados | Modelo entidade-relacionamento e schema PostgreSQL |
| Configuração | Settings, variáveis de ambiente e gerenciamento de segredos |
| Desenvolvimento | Setup local, comandos, testes e convenções de código |
# Todos os testes
dotnet test
# Filtrar por classe
dotnet test --filter "FullyQualifiedName~CreateRoomTests"
# Apenas unit tests
dotnet test test/ChatApp.UnitTests/
# Apenas integration tests
dotnet test test/ChatApp.IntegrationTests/Distribuído sob a licença MIT. Veja LICENSE para detalhes.