Projeto fullstack para gerenciamento/treinamento (frontend em React + backend em .NET). Este repositório contém o frontend (Vite + React), o backend (ASP.NET Core 9) e arquivos de infraestrutura para execução via Docker Compose.
- Frontend: React + Vite, código em
frontend/. - Backend: ASP.NET Core (API) em
backend/API/. - Infraestrutura: compose para MySQL, Redis, API e frontend em
infrastructure/docker-compose.yml.
O backend segue os princípios da Clean Architecture (inspirada em Domain-Driven Design - DDD), organizando o código em camadas independentes para promover manutenibilidade, testabilidade e separação de responsabilidades.
-
Domain Layer (
backend/API/Domain/):- Contém as regras de negócio centrais.
- Entidades (Entities), Value Objects, Repositórios (interfaces) e Serviços de Domínio.
- Independente de frameworks externos.
-
Application Layer (
backend/API/Application/):- Orquestra operações de negócio.
- Contém Serviços de Aplicação, DTOs, Interfaces e Mapeamentos (AutoMapper).
- Define contratos (interfaces) para repositórios e serviços.
-
Infrastructure Layer (
backend/API/Infrastructure/):- Implementa detalhes técnicos (persistência, serviços externos).
- Repositórios concretos, configurações de banco, integrações (Redis, etc.).
-
Presentation Layer (
backend/API/Controllers/):- Controllers ASP.NET Core que expõem APIs REST.
- Usa injeção de dependência para serviços da Application Layer.
-
Shared (
backend/API/Shared/):- Constantes, validadores e utilitários compartilhados.
-
Repository Pattern: Abstrai o acesso a dados. Interfaces em
Domain/Repositories/(ex.:IUserRepository) e implementações emInfrastructure/Persistence/. Permite troca de provedores de dados sem afetar a lógica de negócio. -
Unit of Work Pattern: Gerencia transações e salva mudanças em lote. Implementado em
UnitOfWork.cs, coordena múltiplas operações de repositório. -
Notification Pattern: Centraliza mensagens de erro, aviso e sucesso.
INotificationContexteNotificationContextemApplication/Logger/. Evita lançar exceções para validações, permitindo acumular notificações e retornar ao cliente. -
Dependency Injection (DI): Usado extensivamente via ASP.NET Core DI. Controllers e serviços injetam interfaces, facilitando testes e desacoplamento.
-
CQRS (Command Query Responsibility Segregation): Embora não totalmente implementado, há separação implícita em serviços (ex.: métodos de query vs. command).
-
Value Object: Em
Domain/ValueObject/, objetos imutáveis representando conceitos como endereços ou configurações. -
Mapper Pattern: AutoMapper para conversão entre Entities e DTOs.
frontend/— aplicação cliente (Vite, TypeScript, Tailwind).backend/API/— projeto ASP.NET Core (controllers, serviços, domain, migrations).infrastructure/— docker-compose e orquestração.backend/API/Migrations/— migrations do Entity Framework.
- .NET 9 SDK (para rodar o backend localmente)
- Node.js 18+ / npm (para o frontend)
- Docker & Docker Compose (para rodar via containers)
- MySQL (se optar por rodar local sem Docker)
Observação: os comandos abaixo assumem que você está na raiz do repositório.
- Backend (API)
Vá para a pasta do projeto backend e execute:
cd backend/API
dotnet restore
dotnet build
dotnet runPor padrão (conforme Properties/launchSettings.json) a API é exposta em:
- HTTP: http://localhost:5237
- HTTPS: https://localhost:7181 (quando configurado/ativo)
- Frontend (desenvolvimento)
cd frontend
npm install
npm run devO Vite geralmente expõe a aplicação em http://localhost:5173 (porta padrão do Vite). Ajuste a URL da API no arquivo .env local ou utilizando a variável VITE_API_URL conforme seu fluxo.
Existe um docker-compose.yml em infrastructure/ que descreve serviços: frontend (Nginx), api, mysql, redis e redis-insight.
Para subir os containers:
cd infrastructure
docker compose up --buildPontos importantes do compose (valores e portas mostrados no arquivo):
- Frontend (Nginx): mapeado em
80:80. - API: exposta como
8080:8080(variávelPORT=8080passada ao container). - MySQL:
3306:3306. - Redis:
6379:6379. - Redis Insight:
8001:8001.
Se os contextos do build (paths relativos) não baterem com sua estrutura, ajuste os caminhos context: no compose para apontar para ./frontend e ./backend/API conforme necessário.
DATABASE_URL/DB_USER/DB_PASSWORD/DB_HOST— conexão com o MySQL.PORT— porta usada pela API no container (ex.:8080).JWT_SECRET— segredo para geração/validação de tokens JWT.GOOGLE_API_KEY— chave para integrações Google (OAuth etc.).VITE_API_URL— URL base da API usada pelo frontend em tempo de build/execução.
Defina essas variáveis no ambiente (ou em um arquivo .env) antes de subir os containers, ou preencha via docker-compose.yml/secrets quando for o caso.
O projeto contém testes unitários/integrados no backend (backend/API.Test/ e pastas Unit/ e Integrations/). Para rodar os testes do backend:
cd backend
dotnet testFront-end: não há testes configurados no package.json do frontend além de lint (ESLint). Rode:
cd frontend
npm run lint- Backend
cd backend/API
dotnet publish -c Release -o ./publish- Frontend
cd frontend
npm run buildO Dockerfile do frontend já empacota o build no Nginx (/usr/share/nginx/html). O Dockerfile do backend publica a aplicação e roda o API.dll.
As migrations do EF estão em backend/API/Migrations/. Para aplicar (local):
cd backend/API
dotnet tool restore
dotnet ef database updateObservação: configure a ConnectionStrings:DefaultConnection em appsettings.json ou como variável de ambiente (DATABASE_URL) antes de aplicar as migrations.
O projeto contém arquivos de idioma em backend/API/locales/ (por exemplo pt-BR e en-US). O frontend também usa i18n via react-i18next.