Bu proje, kullanıcıların görev (todo) oluşturup yönetebileceği görev yönetim sistemidir.
Backend tarafı ASP.NET Core Web API, frontend tarafı React ve veritabanı olarak SQL Server kullanılmıştır.
Uygulama Docker ile container ortamında çalışacak şekilde yapılandırılmıştır.
| Katman | Teknoloji | Gerekçe |
|---|---|---|
| Backend | ASP.NET Core 8 Web API | Mevcut stack (.NET Core) |
| ORM | Entity Framework Core 8 | Code-first migration, LINQ desteği |
| Veritabanı | MSSQL (Docker) | SQL Server deneyimiyle uyumlu |
| Frontend | React | Hızlı geliştirme, component bazlı yapı |
| Test | xUnit + EF InMemory | Gerçek DB gerektirmeden servis testi |
| DevOps | Docker & Docker Compose | Birçok uygulama tek çatı altından ayağa kaldırıldı |
Test başarılı. Local Development ve Docker üzerinden sorunsuz çalışmaktadir.
Proje iki farklı şekilde çalıştırılabilir:
A. Backend'i çalıştır
- SQL Server (LocalDB veya MSSQL)
1. Migration (ilk kurulumda)
cd TaskManagerAPI
dotnet ef database update2. Uygulamayı başlat
f5 or dotnet runSwagger: https://localhost:44317/swagger
B. Frontend'i çalıştır
cd TaskManager.React
npm install
npm run dev
Frontend: http://localhost:5173
Backend: http://localhost:3001/swagger/index.html
Frontend: http://localhost:3000/
Bu yöntem tüm sistemi container içinde ayağa kaldırır.
Gereksinimler
- Docker Desktop
docker-compose.yml 'in olduğu kök (root) dizinde locate ol.
- Projeyi başlat
docker-compose up --build
git clone https://github.com/erenmulkoglu/TaskManagerAPI.git
cd TaskManagerAPI
docker-compose up --builddocker-compose up -d| Method | URL | Açıklama |
|---|---|---|
| GET | /api/tasks | Tüm görevleri listele |
| GET | /api/tasks/{id} | Tek görev getir |
| POST | /api/tasks | Yeni görev oluştur |
| PUT | /api/tasks/{id} | Görevi güncelle |
| DELETE | /api/tasks/{id} | Görevi sil |
Konfigürasyon Connection String (Docker)
cd TaskManager.Tests
dotnet test7 unit test — TaskService tüm CRUD operasyonları için EF InMemory ile test edildi.
- Backend: ASP.NET Core Web API (.NET 8). Güçlü tip güvenliği, yüksek performans sunması ve kurumsal projelerdeki yaygın kullanımı sebebiyle tercih ettim.
- Veritabanı: MS SQL Server ve Entity Framework Core. Code-First yaklaşımı ile veritabanı şemasını kod üzerinden yönetmek ve migration'ları otomatize etmek için kullandım.
- Frontend: React ve Vite. Sürdürülebilir, bileşen tabanlı bir kullanıcı arayüzü inşa etmek için React'i; hızlı derleme süreleri ve modern geliştirici deneyimi sunması sebebiyle de Vite'i seçtim.
- DevOps: Docker ve Docker Compose. Projeyi inceleyecek kişilerin "benim bilgisayarımda çalışmıyor" gibi sorunlar yaşamadan, tek tuşla tüm sistemi bağımlılıklarıyla beraber ayağa kaldırabilmesi için konteyner mimarisi kurguladım.
Projede istenen temel CRUD işlemlerinin yanı sıra, kodun kalitesini ve sürdürülebilirliğini artırmak için aşağıdaki yapıları uyguladım:
- Katmanlı Mimari (Separation of Concerns): API controller'ları olabildiğince sade bırakılmış, tüm iş mantığı (business logic)
TaskServicekatmanına soyutlanmış ve Dependency Injection ile sisteme entegre edilmiştir. - Asenkron Programlama: Veritabanı işlemlerinde thread bloklanmalarını (bottleneck) önlemek için uçtan uca
async/awaitmimarisi kullanılmıştır. - Loglama Middleware: Her gelen HTTP isteğinin metodunu, yolunu ve işlem süresini milisaniye cinsinden hesaplayıp konsola yazdıran özel bir loglama aracı (middleware) yazılmıştır.
- Global Exception Handler: Uygulama genelinde oluşabilecek beklenmedik hataları (500 Internal Server Error) merkezi bir noktada yakalayıp istemciye standart bir JSON formatında dönen hata yakalayıcı eklenmiştir.
- Birim Testleri (Unit Tests): İş mantığının kalbi olan servis katmanı için xUnit ve InMemory Database kullanılarak uçtan uca testler yazılmıştır.
- Servis katmanı: Controller'lar sadece HTTP'yi yönetir; iş mantığı
TaskService'te. - Dependency Injection:
ITaskServiceinterface'i üzerinden inject edilir — test edilebilirlik ve loose coupling için. - DbContext lifetime:
Scoped— her HTTP isteğinde yeni instance, captive dependency sorununu önler. - Middleware sırası: GlobalExceptionHandler → RequestLogging → Controller. Exception handler en dışta olmalı ki tüm hataları yakalasın.
- DTO kullanımı: Domain modeli API'ye doğrudan açılmadı; model değişiklikleri API kontratını etkilemez.
TaskManagerAPI/
TaskManagerAPI/ # ASP.NET Core Web API
Controllers/ # HTTP endpoint'leri
Services/ # İş mantığı (ITaskService + TaskService)
Data/ # EF Core DbContext
Models/ # Entity ve DTO'lar
Middleware/ # RequestLogging + GlobalExceptionHandler
TaskManager.Tests/ # xUnit testleri (7 test)
TaskManager.React/ # React + Vite frontend
docker-compose.yml # MSSQL + API + Frontend container yapılandırması.