Skip to content

Code2Work/fullstack-backend-project-8

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Todo REST API

Amaç

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.

Öğrenme Hedefleri

  • @RestController + REST verb'leri (@GetMapping / @PostMapping / @PutMapping / @DeleteMapping)
  • Constructor injection ile dependency injection (@Service → controller)
  • @RequestParam ile query parametresi (?completed=true)
  • @Valid + Bean Validation (@NotBlank, @Min)
  • @RestControllerAdvice + @ExceptionHandler ile global hata yönetimi
  • Doğru HTTP status: 200, 201 Created, 204 No Content, 404, 400

Endpoint'ler

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)

Başlamadan Önce

  • 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).

Adım Adım Görevler

  1. TodoService (TODO 1-6): bellekteki List<Todo> üzerinde CRUD (for-each döngüleriyle) + findByCompleted filtresi. findById yoksa TodoNotFoundException fırlat.
  2. TodoController (TODO 7-12): endpoint'leri servise bağla. getAll'da ?completed parametresi varsa filtrele. Doğru status code'lar (model'i doğrudan döner/alırsın — DTO H19'da).

💡 Constructor injection kullan (@Autowired field injection değil). Controller'da iş mantığı YAZMA — sadece servisi çağır. @RequestParam(required=false) Boolean completed → null ise hepsi, değilse filtre. ResponseEntity ile create → 201, delete → 204. try-catch'i dağıtma — @RestControllerAdvice merkezi yönetir.

Örnek İstekler (uygulama çalışırken)

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   # → 204

Testler ve Skor

Projede 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 surefire net.bytebuddy.experimental=true ayarı çözer; en stabil için JDK 17/21 kullan. Skor için tüm testleri çalıştır.

Bonus (Opsiyonel)

  • 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.

Çözüm

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors