Skip to content

Latest commit

 

History

History
154 lines (114 loc) · 4.91 KB

File metadata and controls

154 lines (114 loc) · 4.91 KB

ecommerce-hex-auth — Auth Service (Modüler Hexagonal Architecture)

en

Modern e-ticaret platformu için mikroservis tabanlı bir başlangıç. Bu repo, Hexagonal (Ports & Adapters) prensipleriyle güçlü şekilde modülerleştirilmiş bir Authentication servisini içerir. Üretim koşullarına yakın pratiklerle (JWT güvenliği, oran sınırlama, göçler, OpenAPI) tasarlandı.

Ben bir yazılım mühendisiyim; farklı mimarileri biliyorum ve doğru probleme doğru mimariyi uygulamayı önemsiyorum. Bu proje, bunu kanıtlamak için okunabilirlik, test edilebilirlik ve genişletilebilirlik odaklı hazırlandı.

Neler Sunuyor?

  • Mimari: Modüler Hexagonal (Ports & Adapters), temiz katman ayrımı
  • Güvenlik: Spring Security, JWT (access/refresh), BCrypt
  • Dayanıklılık: Rate limiting (Bucket4j), global exception handling, input validation
  • Veri Katmanı: JPA/Hibernate, Flyway migration, PostgreSQL
  • Geliştirici Deneyimi: OpenAPI/Swagger UI, MapStruct, Lombok, anlaşılır paketleme

Teknoloji Yığını

  • Dil: Java 17
  • Çatı: Spring Boot 3.5.x
  • Veritabanı: PostgreSQL (Flyway ile migration)
  • Güvenlik: Spring Security, JJWT
  • Validasyon: spring-boot-starter-validation
  • Oran Sınırlama: Bucket4j
  • Dokümantasyon: springdoc-openapi-starter-webmvc-ui (Swagger UI)
  • Eşleştirme: MapStruct
  • Araçlar: Maven, Docker

Mimari Genel Bakış

flowchart LR
  Client[Client] --> REST[REST Adapter]
  REST --> App[Application Layer]
  App --> Ports[Ports]
  Ports --> Repo[Persistence Adapter]
  Ports --> Jwt[Security/JWT Adapter]
  Ports --> Mail[Email Adapter]
  App --> Events[Domain Events]
Loading

Kaynak düzeni (özet):

auth-service/
  src/main/java/com/floclone/auth/
    core/
      application/        # use case'ler
      domain/             # model, event, exception
      port/               # input/output port arayüzleri
    infrastructure/
      adapter/
        input/rest/       # REST controller'lar
        output/…          # persistence, security, email, event
      config/             # security, swagger, rate limiting, beans
  src/main/resources/db/migration/  # Flyway SQL migration'lar

Sağlanan Uç Noktalar (Auth)

  • POST /auth/register: Kullanıcı kaydı
  • POST /auth/login: Giriş (JWT üretimi)
  • POST /auth/forgot-password: Şifre sıfırlama isteği
  • POST /auth/reset-password: Şifre sıfırlama

Swagger UI: http://localhost:8081/swagger-ui/index.html

Çalıştırma (Yerel)

Önkoşullar:

  • Java 17, Maven 3.9+
  • PostgreSQL (veya Docker)

Veritabanını Docker ile başlat (opsiyonel):

docker run -d \
  --name flo-auth-db \
  -e POSTGRES_DB=flo_auth_db \
  -e POSTGRES_USER=flo_user \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 \
  postgres:16

Uygulamayı derle ve çalıştır:

mvn -q -DskipTests -f auth-service/pom.xml clean package
java -jar auth-service/target/auth-service-0.0.1-SNAPSHOT.jar

Varsayılan profil devtir. Gerekli ortam değişkenleri:

export DB_USERNAME=flo_user
export DB_PASSWORD=password
export JWT_SECRET="your-256-bit-secret-key-for-development-only"

Uygulama varsayılan olarak 8081 portunda açılır.

Docker ile Çalıştırma

İmajı üret:

docker build -t flo/auth-service:0.0.1 ./auth-service

Çalıştır:

docker run --rm -p 8081:8081 \
  -e DB_USERNAME=flo_user \
  -e DB_PASSWORD=password \
  -e JWT_SECRET="your-256-bit-secret-key-for-development-only" \
  flo/auth-service:0.0.1

Veritabanı ve Migrasyonlar

  • Flyway otomatik olarak src/main/resources/db/migration altındaki SQL dosyalarını uygular.
  • İlk tablolar: users, password_reset_tokens (V1, V2 migration dosyaları)

Güvenlik ve Dayanıklılık

  • JWT: Access/Refresh token desteği (JJWT). JwtAuthenticationFilter ile filtreleme.
  • Rate limiting: Bucket4j ile /auth/register ve /auth/login için istek sınırlama.
  • Validasyon: request DTO'larında jakarta.validation anotasyonları.
  • Hata yönetimi: GlobalExceptionHandler ile tutarlı cevaplar.

Test

mvn -q -f auth-service/pom.xml test

Entegrasyon testleri AuthControllerIT altında örneklenmiştir.

Neden Bu Mimari?

  • Bağımlılık yönü kontrolü: Domain ve uygulama katmanı, altyapıya bağımlı değildir.
  • Değişime açık: Framework, veritabanı, mesajlaşma veya UI değişimleri adapter seviyesinde izole edilir.
  • Test edilebilirlik: Port arayüzleri ile kolay mocking, use case odaklı testler.

Yol Haritası (Özet)

  • Kullanıcı profili, katalog, sipariş, ödeme servisleri (ayrı modüller)
  • Outbox pattern ve Kafka ile asenkron entegrasyon
  • Gelişmiş gözlemlenebilirlik (metrics, tracing)
  • API Gateway ve central auth (Keycloak/OPA entegrasyonu opsiyonel)