Projeto fullstack com backend em .NET 8 e banco de dados PostgreSQL, que permite o cadastro, listagem, edição, exclusão e reordenação de tarefas de forma interativa.
A fullstack project with .NET 8 backend and PostgreSQL database, allowing users to create, list, edit, delete and reorder tasks interactively.
- 🖥️ Aplicação Web / Web App: https://tasklist-frontend-lovat.vercel.app/tasks
- 📚 API Documentation (Swagger): https://task-list-system.onrender.com/swagger/index.html
- 🔗 Repositório GitHub / GitHub Repository: https://github.com/carlosecosmesilva/task-list-system
-
📋 Listar tarefas com ordenação personalizada
List tasks with customDisplayOrder -
➕ Incluir nova tarefa com nome único
Add new task with unique name -
✏️ Editar tarefa (nome, custo e data limite)
Edit task (name, cost and due date) -
❌ Excluir tarefa com confirmação
Delete task with confirmation -
🔼🔽 Reordenar tarefas com botões ou drag-and-drop
Reorder tasks using buttons or drag-and-drop -
💰 Destaque visual para tarefas com custo ≥ R$ 1.000,00
Visual highlight for tasks with cost ≥ R$ 1,000.00
task-list-system/
├── client/tasklist-frontend/ # Frontend Angular / Angular frontend
│ ├── src/
│ │ ├── app/
│ │ │ ├── tasks/ # Módulo de tarefas / Tasks module
│ │ │ ├── shared/ # Componentes compartilhados / Shared components
│ │ │ └── core/ # Serviços core / Core services
│ │ └── environments/ # Configurações de ambiente / Environment configs
│ ├── angular.json
│ └── package.json
├── server/TaskListApp/
│ ├── TaskList.API/ # Web API (Controllers)
│ ├── TaskList.Application/ # Regras de negócio / Business logic
│ ├── TaskList.Domain/ # Entidades e interfaces / Entities & interfaces
│ ├── TaskList.Infrastructure/ # Acesso a dados / Data access (EF Core)
│ ├── Dockerfile # Container para deploy / Deploy container
│ └── docker-compose.yml # Container PostgreSQL local / Local PostgreSQL
├── .gitignore
└── README.md- Angular 18 - Framework frontend
- Angular Material - Componentes UI / UI Components
- TypeScript - Linguagem / Language
- SCSS - Estilização / Styling
- RxJS - Programação reativa / Reactive programming
- .NET 8 Web API
- Entity Framework Core 9.0 - ORM
- PostgreSQL 16 - Banco de dados / Database
- Npgsql - Provider PostgreSQL para .NET
- Docker - Containerização / Containerization
- Swagger/OpenAPI - Documentação da API / API documentation
- Frontend: Vercel - Deploy automático / Automated deployment
- Backend: Render - Container deployment
- Database: Render PostgreSQL - 500MB gratuito / 500MB free tier
- Clean Architecture (simplificada / simplified)
- Repository Pattern
- Dependency Injection
- CORS configurado para produção / CORS configured for production
- Id (int) - Chave primária / Primary key
- Nome (varchar) - Nome único / Unique name (required)
- Custo (decimal) - Valor monetário / Cost value (required)
- DataLimite (timestamp) - Data limite / Due date (required)
- OrdemExibicao (int) - Ordem única / Unique display order (required)
// environment.prod.ts
export const environment = {
production: true,
apiUrl: "https://task-list-system.onrender.com/api",
apiTimeout: 10000,
enableLogging: false,
appName: "Task List System",
version: "1.0.0",
};// environment.development.ts
export const environment = {
production: false,
apiUrl: "http://localhost:5000/api",
apiTimeout: 30000,
enableLogging: true,
appName: "Task List System - Dev",
version: "1.0.0",
};- .NET 8 SDK
- Node.js 18+
- Angular CLI
- Docker & Docker Compose
- PostgreSQL (opcional se usar Docker / optional if using Docker)
git clone https://github.com/carlosecosmesilva/task-list-system.git
cd task-list-systemcd server/TaskListApp
# Subir o banco PostgreSQL / Start PostgreSQL database
docker compose up -d
# Restaurar pacotes / Restore packages
dotnet restore
# Aplicar migrations / Apply migrations
dotnet ef database update -p TaskList.Infrastructure -s TaskList.API
# Executar a API / Run API
dotnet run --project TaskList.APIcd client/tasklist-frontend
# Instalar dependências / Install dependencies
npm install
# Executar em modo de desenvolvimento / Run in development mode
ng serve
# Acessar: http://localhost:4200API Backend:
https://localhost:5001http://localhost:5000- Swagger:
https://localhost:5001/swagger
Frontend:
http://localhost:4200
cd client/tasklist-frontend
# Instalar Vercel CLI / Install Vercel CLI
npm i -g vercel
# Deploy
vercel --prodConfigurações automáticas / Auto configurations:
- ✅ Build command:
npm run build - ✅ Output directory:
dist/tasklist-frontend - ✅ HTTPS automático / Auto HTTPS
- ✅ CDN global / Global CDN
Via GitHub Integration:
- Conectar repositório no Render
- Criar Web Service
- Configurações:
- Root Directory:
server/TaskListApp - Environment: Docker
- Plan: Free
- Root Directory:
Variáveis de ambiente / Environment variables:
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://0.0.0.0:10000
ConnectionStrings__DefaultConnection=postgresql://user:pass@host:port/db- Criar PostgreSQL no Render
- Copiar Internal Database URL
- Configurar no Web Service
| Método | Endpoint | Descrição / Description |
|---|---|---|
| GET | /api/task |
Listar todas / List all tasks |
| GET | /api/task/{id} |
Buscar por ID / Get by ID |
| POST | /api/task |
Criar nova / Create new task |
| PUT | /api/task/{id} |
Atualizar / Update task |
| DELETE | /api/task/{id} |
Excluir / Delete task |
📚 Documentação completa / Full documentation:
https://task-list-system.onrender.com/swagger/index.html
# Listar tarefas / List tasks
curl https://task-list-system.onrender.com/api/task
# Criar tarefa / Create task
curl -X POST https://task-list-system.onrender.com/api/task \
-H "Content-Type: application/json" \
-d '{"title":"Nova Tarefa","description":"Descrição","cost":100}'Acesse: https://tasklist-frontend-lh9avykr5-carlosecosmesilvas-projects.vercel.app/tasks
-
✅ Nome único - Não pode haver tarefas com mesmo nome
Unique name - No duplicate task names allowed -
✅ Campos obrigatórios - Nome, Custo, Data Limite
Required fields - Name, Cost, Due Date -
✅ Ordem única - Cada tarefa tem posição única na lista
Unique order - Each task has unique position in list -
✅ Edição segura - Nome editado não pode conflitar
Safe editing - Edited name cannot conflict
-
🔄 Reordenação automática ao mover tarefas
Auto-reordering when moving tasks -
💡 Destaque visual para custos altos (≥ R$ 1.000)
Visual highlight for high costs (≥ R$ 1,000) -
⚠️ Confirmação antes de excluir
Confirmation before deletion
- ✅ Frontend: Ativo no Vercel / Active on Vercel
- ✅ Backend: Ativo no Render / Active on Render
- ✅ Database: PostgreSQL operacional / PostgreSQL operational
- ✅ CORS: Configurado corretamente / Properly configured
- ✅ SSL: HTTPS automático / Auto HTTPS
- ⏰ Cold Start: Primeira requisição ~30 segundos / First request ~30 seconds
- 💤 Sleep Mode: Serviços dormem após 15-30min inatividade / Services sleep after 15-30min inactivity
- 💾 Database: 500MB PostgreSQL gratuito / 500MB free PostgreSQL
- 🔄 Deploy: Automático via Git / Auto deploy via Git
dotnet ef migrations add NomeDaMigration -p TaskList.Infrastructure -s TaskList.APIdotnet ef database update -p TaskList.Infrastructure -s TaskList.APIdotnet test- Configurar Clean Architecture
- Implementar entidades e DbContext
- Criar Controllers e endpoints
- Configurar Swagger
- Implementar validações
- Deploy no Render
- Configurar projeto Angular
- Criar componentes de lista
- Implementar formulários
- Estilizar interface com Material
- Deploy no Vercel
- Adicionar drag-and-drop para reordenar
- Autenticação de usuários / User authentication
- Testes unitários / Unit tests
- Testes de integração / Integration tests
- Cache e performance / Caching & performance
- Logs estruturados / Structured logging
- Notificações push / Push notifications
- Fork o projeto / Fork the project
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto é licenciado sob a MIT License.
This project is licensed under the MIT License.
Carlos Eduardo
- GitHub: @carlosecosmesilva
- Email: carlos.eduardo.cs@outlook.com
- Equipe do .NET pelo excelente framework
- Comunidade PostgreSQL pelo banco robusto
- Equipe Angular pelo framework frontend
- Vercel e Render pelos serviços gratuitos de hospedagem
🎉 Projeto totalmente funcional e em produção! / Fully functional project in production!