MiniBank / Lab Dashboard / Genel Bakış
MiniBank ürün yolculuğu 3 gün / 11 case start → complete checkpoint modeli

MiniBank Lab Dashboard

Bu ekran MiniBank'in eğitim boyunca nasıl büyüdüğünü gösterir. Her case bir ürün adımıdır: önce ilgili Spring Boot kavramı öğrenilir, sonra MiniBank'e küçük ama gerçek bir özellik eklenir.

Bu ekran nasıl okunur?

Kartlardan case özetine geçebilir, branch bilgisinden katılımcının hangi checkpoint'i çekeceğini görebilir ve her adımda request/response, console log, test ve Actuator çıktılarıyla doğrulama yapabilirsin.

Kullanım
Case seç, ne eklendiğini oku, ilgili branch'e geç.
Branch modeli
Her complete branch sonraki case'in start noktasıdır.
Doğrulama
Request/response, console log, test ve Actuator çıktıları izlenir.
Mevcut görünüm
Final checkpoint: lab-11-complete

MiniBank adım adım neye dönüşüyor?

Her kart bir eğitim modülünün MiniBank'e bıraktığı ürün çıktısını gösterir. Kartı açarak o case'in amacı, branch geçişi, beklenen loglar ve test edilecek endpoint'lere gidebilirsin.

Case 00 - Base Project

Base checkpoint
Checkpoint
lab-00-base
Doğrulama
./mvnw test + /api/status

Başlangıç checkpoint'i

  • MiniBankApplication uygulamayı ayağa kaldırır.
  • / Lab Dashboard olarak servis edilir.
  • /api/status temel JSON status response döner.
  • JDK 17+, Maven Wrapper ve Spring Boot startup doğrulanmıştır.

Case 00 verify

  • Console'da Tomcat started on port 8080 görülür.
  • ./mvnw test ApplicationContext ve status endpoint'i doğrular.
  • curl http://localhost:8080/api/status MiniBank status response döner.

Case 01 - Core Service Layer & Bean Discovery

Core service
Başlangıç
lab-01-start
Tamamlanan
lab-01-complete

Service layer üretimi

  • AccountRepository, AccountService, AccountSummaryService hazır.
  • CustomerRepository, CustomerService, CustomerSummaryService hazır.
  • Servisler component scan ile bean olarak keşfedilir.
  • Dependency'ler constructor injection ile verilir.

Case 01 verify

  • Console'da AccountService bean is ready. görülür.
  • Console'da CustomerService bean is ready. görülür.
  • Summary service'ler dependency zincirini doğrular.
  • Field injection kullanılmaz.

Case 02 - Bean Scope & Prototype Provider

Scope verify
Başlangıç
lab-02-start
Tamamlanan
lab-02-complete

Case 02 sonucu

  • ReferenceNumberGenerator prototype scoped bean olarak hazır.
  • AccountOperationService ve CustomerOperationService singleton service.
  • Singleton service doğrudan prototype instance tutmaz.
  • Her operasyon referansı için ObjectProvider ile yeni generator istenir.

Önceki case'ten gelen temel

  • Account ve Customer core service layer korunur.
  • Constructor injection standardı devam eder.
  • ApplicationContext tüm servisleri bean olarak keşfeder.

Bu ekran artık eğitim ilerleyişini birikimli gösterir; Case 02, Case 00 ve Case 01 üzerine eklenmiştir.

Case 03 - Audit Logging with AOP

AOP audit
Başlangıç
lab-03-start
Tamamlanan
lab-03-complete

Case 03 sonucu

  • spring-boot-starter-aop projeye eklendi.
  • @Auditable annotation ve AuditAspect hazır.
  • @Around advice method giriş/çıkışını merkezi şekilde yakalar.
  • Account ve Customer operasyonları audit log üretir.

Console'da ne doğrulanır?

  • Audit loglarında action, operationType ve method görünür.
  • Input bilgisi loglanır.
  • Başarılı çağrıda status=SUCCESS ve durationMs görünür.

Case 03, AOP davranışını business service içine audit kodu dağıtmadan ekler.

Case 04 - CurrentUser Argument Resolver

MVC flow
Başlangıç
lab-04-start
Tamamlanan
lab-04-complete

Case 04 sonucu

  • CurrentUser ve RequestMetadata request context modeli hazır.
  • CurrentUserArgumentResolver header bilgisinden kullanıcı context'i üretir.
  • RequestMetadataArgumentResolver X-Correlation-Id bilgisini controller parametresine taşır.
  • WebMvcConfig resolver'ları Spring MVC akışına register eder.

HTTP ile ne doğrulanır?

  • GET /api/accounts/me/summary Account summary response döner.
  • GET /api/customers/me/summary Customer summary response döner.
  • Response içinde customerNo, role ve correlationId görülür.
  • Controller içinde manuel header okuma kodu tekrarlanmaz.

Case 04, Spring MVC request flow'unu somutlaştırır: controller method parametreleri custom argument resolver ile hazırlanır.

Case 05 - REST API, DTO & Validation

REST contract
Başlangıç
lab-05-start
Tamamlanan
lab-05-complete

Case 05 sonucu

  • AccountCreateRequest ve AccountResponse ile Account API contract netleşir.
  • CustomerCreateRequest ve CustomerResponse ile Customer API aynı standardı izler.
  • @Valid, @NotBlank, @Pattern ve @Size ile request validation çalışır.
  • Controller response'ları 201 Created, 200 OK, 400 Bad Request ve 404 Not Found davranışını gösterir.

Önceki case'lerden gelen temel

  • Core service layer ve operation service'ler korunur.
  • CurrentUser argument resolver endpoint'leri çalışmaya devam eder.
  • DTO mapping manuel mapper class'ları ile açık şekilde yapılır.
  • Field injection kullanılmadan constructor injection standardı sürer.

Case 05, MiniBank'i sadece çalışan bir Spring uygulaması olmaktan çıkarıp dış sistemlerle konuşabilecek net bir HTTP API contract'ına taşır.

Case 06 - Exception Handling & Error Contract

Error contract
Başlangıç
lab-06-start
Tamamlanan
lab-06-complete

Case 06 sonucu

  • BusinessException ortak business exception tabanı olarak hazır.
  • GlobalExceptionHandler tüm REST hataları için standard response üretir.
  • AccountNotFoundException ve DuplicateAccountException Account API tarafını netleştirir.
  • CustomerNotFoundException ve DuplicateCustomerException Customer API tarafında aynı standardı uygular.

HTTP ile ne doğrulanır?

  • Bulunamayan kaynakta 404 Not Found ve ACCOUNT_NOT_FOUND / CUSTOMER_NOT_FOUND code'u döner.
  • Tekrarlı kayıt denemesinde 409 Conflict ve anlamlı business error code döner.
  • Validation hatasında VALIDATION_ERROR ve fieldErrors listesi görülür.
  • Controller içinde manuel try/catch yazmadan error contract merkezi üretilir.

Case 06, REST API'nin sadece başarılı response'larını değil, hata response'larını da ürün contract'ının parçası haline getirir.

Case 07 - Configuration & Profiles

Config model
Başlangıç
lab-07-start
Tamamlanan
lab-07-complete

Case 07 sonucu

  • application.yml, application-dev.yml ve application-prod.yml hazır.
  • TransferProperties, FraudProperties ve CustomerProperties typed config olarak bağlanır.
  • TransferLimitService, FraudControlService ve CustomerLimitService config değerlerini constructor injection ile kullanır.
  • /api/config/limits endpoint'i aktif profile ve limit değerlerini gösterir.

Dev/prod davranışı

  • dev profile eğitim sırasında daha rahat limitler gösterir.
  • prod profile environment variable ile override edilmeye hazırdır.
  • Secret veya ortam bağımlı değerler kod içine yazılmaz.
  • Dağınık @Value yerine @ConfigurationProperties kullanılır.

Case 07, MiniBank davranışını kod değişmeden ortamdan ortama yönetilebilir hale getirir.

Case 08 - JWT Security & Role-Based Access

Security
Başlangıç
lab-08-start
Tamamlanan
lab-08-complete

Case 08 sonucu

  • spring-boot-starter-security projeye eklendi.
  • SecurityFilterChain stateless API güvenliği için yapılandırıldı.
  • /api/auth/login demo kullanıcılar için bearer token üretir.
  • JwtAuthenticationFilter token doğrular ve SecurityContext hazırlar.
  • PasswordEncoder olarak BCryptPasswordEncoder kullanılır.

Role-based access

  • Token olmadan protected API endpoint'leri 401 Unauthorized döner.
  • USER token account ve customer endpoint'lerine erişebilir.
  • USER token admin customer endpoint'ine erişemez ve 403 Forbidden alır.
  • ADMIN token /api/admin/customers endpoint'ini çağırabilir.
  • CustomerAdminService method-level security ile @PreAuthorize kullanır.

Case 08, MiniBank API'yi public demo endpoint'lerden authenticated/authorized endpoint modeline taşır.

Case 09 - Data Access & Transaction Management

Data layer
Başlangıç
lab-09-start
Tamamlanan
lab-09-complete

Case 09 sonucu

  • spring-boot-starter-data-jpa ve H2 in-memory database eklendi.
  • JpaCustomerEntity, JpaAccountEntity ve JpaAccountHistoryEntity ilişkileri hazır.
  • Account history okuma akışı naive, @EntityGraph ve fetch join senaryolarını gösterir.
  • CustomerAccountReportService müşteri hesap raporunu optimize edilmiş query ile üretir.

Transaction davranışı

  • TransferAuditService audit kaydını REQUIRES_NEW transaction içinde saklar.
  • TransferSimulationService ana transaction rollback olsa bile audit kaydının kaldığını gösterir.
  • /api/data/accounts/history-optimized ve customer report endpoint'leri bearer token ile çağrılır.
  • Console'da JPA seed, query mode ve transfer audit propagation logları izlenir.

Case 09, MiniBank'i in-memory service modelinden gerçek persistence, query tasarımı ve transaction boundary farkındalığına taşır.

Case 10 - External API Call Basics

External boundary
Başlangıç
lab-10-start
Tamamlanan
lab-10-complete

Case 10 sonucu

  • spring-boot-starter-webflux ile WebClient tabanlı external API client eklendi.
  • FraudCheckClient, transfer öncesi fraud kontrolünü ayrı boundary olarak çağırır.
  • ExternalClientConfig, base URL, API key, connect timeout ve response timeout değerlerini config üzerinden alır.
  • 4xx/5xx provider hataları MiniBank standard error contract'ına map edilir.
  • Retry sadece retry edilebilir failure senaryolarında çalışır; business reject tekrar denenmez.

Transaction boundary davranışı

  • Fraud check, transfer transaction başlamadan önce yapılır.
  • External API beklerken database transaction ve lock açık tutulmaz.
  • TransferExecutionService transaction boundary'yi net bir servis method'unda tutar.
  • CustomerRiskClient, customer operation tarafında katılımcı görevinin karşılığını gösterir.

Case 10, MiniBank'in kendi process'inin dışına çıktığı ilk noktadır: timeout, retry, idempotency, error mapping ve transaction sınırı birlikte gözlemlenir.

Case 11 - Basic Observability Awareness

Final checkpoint
Başlangıç
lab-11-start
Final checkpoint
lab-11-complete

Doğrulama: Actuator + logs + tests

Case 11 sonucu

  • Actuator endpoint exposure health, info, metrics ve loggers için yapılandırıldı.
  • MiniBankExternalHealthIndicator external client config durumunu health response'a ekler.
  • CustomerHealthIndicator customer repository readiness bilgisini gösterir.
  • CorrelationIdFilter her request için X-Correlation-Id header'ını response'a taşır.
  • Log pattern içine correlationId eklenerek request takibi kolaylaştırılır.

Production farkındalığı

  • /actuator/health/liveness process'in canlılık durumunu gösterir.
  • /actuator/health/readiness uygulamanın trafik almaya hazır olup olmadığını gösterir.
  • /actuator/loggers/com.definex.minibank runtime log level yönetimini gösterir.
  • Correlation ID log, response header ve controller metadata arasında ortak iz bırakır.

Case 11 final checkpoint'tir; artık MiniBank sadece işlev üretmez, production'da anlaşılabilir sinyaller de üretir.