Skip to content

Code2Work/fullstack-backend-project-7

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Çalışan REST API

Amaç

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.

Öğrenme Hedefleri

  • @RestController + @RequestMapping ile 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 + @ExceptionHandler ile global hata yönetimi
  • Doğru HTTP status: 200, 201 Created, 204 No Content, 404, 400

Endpoint'ler

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)

Başlamadan Önce

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

Adım Adım Görevler

  1. EmployeeService (TODO 1-6): bellekteki List<Employee> üzerinde CRUD (for-each döngüleriyle) + departman bordro toplamı. findById yoksa EmployeeNotFoundException fırlat.
  2. 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.)
  3. DepartmentController (TODO 13): bordro raporu.
  4. GlobalExceptionHandler (TODO 14-15): 404 (not found) ve 400 (validation) hata cevapları.

💡 Constructor injection kullan (@Autowired field injection değil) — test ve immutability için. Controller'da iş mantığı YAZMA, sadece servisi çağır. ResponseEntity ile doğru status: create → 201, delete → 204. try-catch'i her metoda dağıtma — @RestControllerAdvice ile merkezi yönet.

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

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/payroll

Testler ve Skor

Projede 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 surefire net.bytebuddy.experimental=true ayarı 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.

Bonus (Opsiyonel)

  • GET /employees?role=Developer — role göre filtre (query param, döngüyle).
  • @Min/@Max ile maaş aralığı validasyonu.
  • GET /departments/{id}/employees — departmandaki çalışan listesi.

Çö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