Basit bir görev (todo) yönetimi için Spring Boot REST API yazacaksın. Katmanlı mimari (Controller → Service), dependency injection, query parametresiyle filtreleme, validation ve global hata yönetimini uygulayacaksın. Veri bellekte tutulur (veritabanı H18'de gelecek). Süre: ~4-6 saat.
@RestController+ REST verb'leri (@GetMapping/@PostMapping/@PutMapping/@DeleteMapping)- Constructor injection ile dependency injection (
@Service→ controller) @RequestParamile query parametresi (?completed=true)@Valid+ Bean Validation (@NotBlank,@Min)@RestControllerAdvice+@ExceptionHandlerile global hata yönetimi- Doğru HTTP status: 200, 201 Created, 204 No Content, 404, 400
GET /todos → tüm görevler (200)
GET /todos?completed=true → tamamlananlar (filtreli, 200)
GET /todos/{id} → tek görev (200) / yoksa 404
POST /todos → oluştur (201)
PUT /todos/{id} → güncelle (200) / yoksa 404
DELETE /todos/{id} → sil (204)
- Java 17 veya 21 (LTS) + Maven 3.9+ kurulu olmalı.
- IDE: IntelliJ IDEA (Maven'i otomatik tanır) veya VS Code + Spring Boot Extension Pack.
- Hazır verilenler:
model/Todo(validation anotasyonlu),exception/TodoNotFoundException,controller/GlobalExceptionHandler,TodoApiApplication. Bunlara dokunma. - Çöz:
service/TodoService(TODO 1-6),controller/TodoController(TODO 7-12).
- TodoService (TODO 1-6): bellekteki
List<Todo>üzerinde CRUD (for-each döngüleriyle) +findByCompletedfiltresi.findByIdyoksaTodoNotFoundExceptionfırlat. - TodoController (TODO 7-12): endpoint'leri servise bağla.
getAll'da?completedparametresi varsa filtrele. Doğru status code'lar (model'i doğrudan döner/alırsın — DTO H19'da).
💡 Constructor injection kullan (
@Autowiredfield injection değil). Controller'da iş mantığı YAZMA — sadece servisi çağır.@RequestParam(required=false) Boolean completed→ null ise hepsi, değilse filtre.ResponseEntityile create →201, delete →204. try-catch'i dağıtma —@RestControllerAdvicemerkezi yönetir.
Başlat: mvn spring-boot:run (port 8080). Sonra:
# Görev oluştur
curl -X POST localhost:8080/todos -H "Content-Type: application/json" \
-d '{"title":"Spor yap","completed":false,"priority":2}'
# → 201 Created
# Tamamlananları listele
curl "localhost:8080/todos?completed=true"
# Geçersiz (boş başlık) → 400
curl -X POST localhost:8080/todos -H "Content-Type: application/json" \
-d '{"title":"","completed":false,"priority":2}'
# Sil
curl -X DELETE localhost:8080/todos/1 # → 204Projede 19 test var (TodoServiceTest birim + TodoControllerTest MockMvc). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir.
1. Öğrenci numaranı gir. student_id.txt dosyasına Kaizu öğrenci numaranı yaz. (Bir kez.)
2. Testleri çalıştır: mvn test (ya da IDE'de tüm testleri koştur).
3. Skor otomatik gider. Testler bitince:
[Kaizu] ✅ Skorun (100/100) kaydedildi. Panelde tik birazdan görünür.
Tüm testler geçince (19/19) panelde yeşil tik gelir.
Not (JDK): Proje Java 21 hedefler. Çok yeni bir JDK'da Mockito sorun çıkarırsa
pom.xml'deki surefirenet.bytebuddy.experimental=trueayarı çözer; en stabil için JDK 17/21 kullan. Skor için tüm testleri çalıştır.
GET /todos?priority=3— önceliğe göre filtre (query param, döngüyle).PATCH /todos/{id}/complete— bir görevi tamamlandı işaretle.- Başlığa göre arama:
GET /todos/search?q=spor.
Takılırsan proje sayfasındaki "Çözümü Göster" butonunu kullan (proje verildikten 3 gün sonra açılır). Önce en az 1 saat kendin uğraş — src/test/ testleri beklenen davranışı net gösterir.