H14'te yazdığın çalışan modelini Spring Boot REST API'ye taşıyacaksın. Katmanlı mimari (Controller → Service), dependency injection, validation ve global hata yönetimini uygulayacaksın. Veri şimdilik bellekte tutulur (veritabanı H18'de gelecek). Süre: ~5-7 saat.
@RestController+@RequestMappingile REST endpoint'leri- HTTP verb'leri:
@GetMapping,@PostMapping,@PutMapping,@DeleteMapping - Constructor injection ile dependency injection (
@Service→ controller) - Katman disiplini: iş mantığı serviste, controller ince
@Valid+ Bean Validation (@NotBlank,@PositiveOrZero)@RestControllerAdvice+@ExceptionHandlerile global hata yönetimi- Doğru HTTP status: 200, 201 Created, 204 No Content, 404, 400
GET /employees → tüm çalışanlar (200)
GET /employees/{id} → tek çalışan (200) / yoksa 404
POST /employees → oluştur (201)
PUT /employees/{id} → güncelle (200) / yoksa 404
DELETE /employees/{id} → sil (204)
GET /departments/{id}/payroll → departman bordro toplamı (200)
- Java 17 veya 21 (LTS) + Maven 3.9+ kurulu olmalı.
- IDE: IntelliJ IDEA (Spring desteği güçlü; Maven'i otomatik tanır) veya VS Code + Spring Boot Extension Pack.
- Hazır verilenler:
model/Employee(validation anotasyonlu),exception/EmployeeNotFoundException,EmployeeApiApplication. Bunlara dokunma. - Çöz:
service/EmployeeService(TODO 1-6),controller/EmployeeController(TODO 7-12),controller/DepartmentController(TODO 13),controller/GlobalExceptionHandler(TODO 14-15).
- EmployeeService (TODO 1-6): bellekteki
List<Employee>üzerinde CRUD (for-each döngüleriyle) + departman bordro toplamı.findByIdyoksaEmployeeNotFoundExceptionfırlat. - EmployeeController (TODO 7-12): endpoint'leri servise bağla, doğru status code'lar. (Model'i doğrudan döner/alırsın — DTO H19'da gelecek.)
- DepartmentController (TODO 13): bordro raporu.
- GlobalExceptionHandler (TODO 14-15): 404 (not found) ve 400 (validation) hata cevapları.
💡 Constructor injection kullan (
@Autowiredfield injection değil) — test ve immutability için. Controller'da iş mantığı YAZMA, sadece servisi çağır.ResponseEntityile doğru status: create →201, delete →204. try-catch'i her metoda dağıtma —@RestControllerAdviceile merkezi yönet.
Uygulamayı başlat: mvn spring-boot:run (port 8080). Sonra:
# Çalışan oluştur
curl -X POST localhost:8080/employees -H "Content-Type: application/json" \
-d '{"name":"Ada","role":"Developer","baseSalary":5000,"departmentId":1}'
# → 201 Created, body: {"id":1,"name":"Ada",...}
# Tümünü listele
curl localhost:8080/employees
# Geçersiz (boş isim) → 400
curl -X POST localhost:8080/employees -H "Content-Type: application/json" \
-d '{"name":"","role":"Dev","baseSalary":5000,"departmentId":1}'
# Departman bordrosu
curl localhost:8080/departments/1/payrollProjede 17 test var (EmployeeServiceTest birim + EmployeeControllerTest 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 çıktının sonunda:
[Kaizu] ✅ Skorun (100/100) kaydedildi. Panelde tik birazdan görünür.
Tüm testler geçince (17/17) panelde yeşil tik gelir.
Not (JDK): Proje Java 21 hedefler. Çok yeni bir JDK'da (25+) Mockito sorun çıkarırsa
pom.xml'deki surefirenet.bytebuddy.experimental=trueayarı bunu çözer; en stabil deneyim için JDK 17 veya 21 kullan.Skor için tüm testleri çalıştır (
mvn test). IDE'de tek bir testi koşturmak panele işlemez.
GET /employees?role=Developer— role göre filtre (query param, döngüyle).@Min/@Maxile maaş aralığı validasyonu.GET /departments/{id}/employees— departmandaki çalışan listesi.
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.