Spring Boot 3.4 tabanlı MarifetBul freelance platform backend servisi.
| Kategori | Teknoloji |
|---|---|
| Framework | Spring Boot 3.4.1, Java 17 |
| Veritabanı | PostgreSQL 16 + Flyway migrasyonları |
| Cache | Redis 7 (token blacklist, sorgu cache) |
| Arama | Elasticsearch 8.16 |
| Güvenlik | Spring Security 6, JWT (HS512) |
| Ödeme | Iyzico (Türkiye ödeme altyapısı) |
| E-posta | SendGrid + Thymeleaf şablonları |
| Push | Firebase Admin SDK |
| SMS | Netgsm |
| Depolama | Cloudinary, AWS S3 |
| WebSocket | STOMP over SockJS |
| Dayanıklılık | Resilience4j (circuit breaker, retry, bulkhead) |
| Monitoring | Sentry, Prometheus, Micrometer, OpenTelemetry |
| Dokümantasyon | SpringDoc OpenAPI (Swagger UI) |
| Test | JUnit 5, Testcontainers, H2 |
| Derleme | Maven 3.8+ |
- Java 17+
- Maven 3.8+
- Docker ve Docker Compose
docker compose up -dBu komut şu servisleri başlatır:
- PostgreSQL 16 — port
5432 - Redis 7 — port
6379 - Elasticsearch 8.16 — port
9200
cp .env.example .env.env dosyasını düzenleyin. Minimum gerekli değişkenler:
# Veritabanı
DB_URL=jdbc:postgresql://localhost:5432/marifetbul_dev
DB_USERNAME=postgres
DB_PASSWORD=postgres
# JWT — Production için güçlü bir secret kullanın
JWT_SECRET=dev_jwt_secret_key_change_in_production_minimum_512_bits_required
JWT_EXPIRATION=86400000
JWT_REFRESH_EXPIRATION=604800000
# CORS — Frontend adresi
CORS_ALLOWED_ORIGINS=http://localhost:3000
# Profil
SPRING_PROFILES_ACTIVE=devmvn spring-boot:run -Dspring-boot.run.profiles=devAPI http://localhost:8080 adresinde başlar.
# Sağlık kontrolü
curl http://localhost:8080/actuator/health
# Swagger UI
open http://localhost:8080/swagger-ui.htmlsrc/main/java/com/marifetbul/api/
├── MarifetBulApplication.java # Ana sınıf
│
├── config/ # Yapılandırma
│ ├── SecurityConfig.java # Spring Security + JWT
│ ├── CorsConfig.java # CORS ayarları
│ ├── WebSocketConfig.java # STOMP WebSocket
│ ├── CacheConfiguration.java # Redis cache
│ ├── RedisConfig.java # Redis bağlantısı
│ ├── Resilience4jConfig.java # Circuit breaker
│ ├── AsyncConfig.java # Asenkron işlemler
│ └── GlobalExceptionHandler.java # Merkezi hata yönetimi
│
├── security/ # Güvenlik katmanı
│ ├── JwtTokenProvider.java # JWT üretim ve doğrulama
│ ├── JwtAuthenticationFilter.java# İstek filtresi
│ ├── UserPrincipal.java # Kimlik doğrulama modeli
│ └── CustomUserDetailsService.java
│
├── common/ # Ortak bileşenler
│ ├── entity/BaseEntity.java # Temel entity (id, createdAt, updatedAt)
│ ├── dto/ApiResponse.java # Standart API yanıtı
│ ├── exception/ # Özel istisnalar
│ └── validation/ # @NoXss gibi doğrulayıcılar
│
├── domain/ # İş mantığı (DDD)
│ ├── auth/ # Kimlik doğrulama
│ │ └── service/ # AuthService, TwoFactorAuthService
│ ├── user/ # Kullanıcı yönetimi
│ │ ├── entity/User.java
│ │ ├── repository/
│ │ ├── service/
│ │ └── controller/
│ ├── job/ # İş ilanları
│ ├── packages/ # Hizmet paketleri
│ ├── proposal/ # Teklifler
│ ├── order/ # Siparişler (milestone, teslimat)
│ ├── payment/ # Ödeme, cüzdan, iade, komisyon
│ ├── message/ # Mesajlaşma
│ ├── notification/ # Bildirimler (multi-channel)
│ ├── review/ # Değerlendirmeler
│ ├── dispute/ # Anlaşmazlıklar
│ ├── blog/ # Blog sistemi
│ ├── moderation/ # İçerik moderasyonu
│ ├── favorites/ # Favoriler
│ ├── portfolio/ # Portföy
│ ├── category/ # Kategoriler
│ ├── analytics/ # Analitik
│ ├── dashboard/ # Dashboard servisleri
│ ├── support/ # Destek bilet sistemi
│ ├── scheduler/ # Zamanlanmış görevler
│ └── settings/ # Ayarlar
│
├── infrastructure/ # Altyapı katmanı
│ ├── payment/
│ │ ├── iyzico/ # Iyzico ödeme entegrasyonu
│ │ └── webhook/ # Webhook güvenlik filtresi
│ ├── email/ # SendGrid e-posta servisi
│ ├── push/ # Firebase push bildirimler
│ ├── sms/ # Netgsm SMS servisi
│ ├── search/ # Elasticsearch arama
│ ├── websocket/ # STOMP WebSocket sunucusu
│ ├── storage/ # Dosya depolama (Cloudinary, S3)
│ ├── cloudinary/ # Görsel optimizasyonu
│ ├── geocoding/ # Google Maps
│ ├── cache/ # Cache invalidation
│ ├── audit/ # Denetim günlükleri
│ ├── security/ # Rate limiting, XSS koruması
│ ├── monitoring/ # Sentry, Prometheus
│ ├── health/ # Sağlık kontrolleri
│ └── testdata/ # Seed data (geliştirme)
│
├── presentation/rest/v1/ # REST controller'lar
│ ├── admin/ # Admin endpoint'leri
│ ├── analytics/
│ └── geocoding/
│
└── dto/ # Veri transfer nesneleri
Flyway ile yönetilen 20+ migrasyon dosyası:
| Versiyon | Açıklama |
|---|---|
| V1.0 | Temel şema (kullanıcılar, kimlik doğrulama) |
| V2.x | Pazaryeri (iş ilanları, paketler, teklifler) |
| V3.x | Siparişler ve anlaşmazlıklar |
| V4.x | Ödeme sistemi (ödeme, cüzdan, iade) |
| V5.0 | Değerlendirmeler |
| V7.x | Mesajlaşma ve bildirimler |
| V8.x | Destek, blog, moderasyon |
| V9.x | Analitik ve denetim günlükleri |
Migrasyonlar uygulama başlatıldığında otomatik çalışır.
POST /api/v1/auth/register # Kayıt
POST /api/v1/auth/login # Giriş
POST /api/v1/auth/refresh # Token yenileme
POST /api/v1/auth/logout # Çıkış
POST /api/v1/auth/phone/send-code # Telefon doğrulama
POST /api/v1/auth/phone/verify # Kod doğrulama
GET /api/v1/users/:id # Profil görüntüle
PUT /api/v1/users/:id # Profil güncelle
GET /api/v1/users/:id/reviews # Kullanıcı yorumları
GET /api/v1/jobs # İlanları listele
POST /api/v1/jobs # İlan oluştur
GET /api/v1/packages # Paketleri listele
POST /api/v1/packages # Paket oluştur
GET /api/v1/categories # Kategoriler
POST /api/v1/proposals # Teklif ver
PUT /api/v1/proposals/:id/accept # Kabul et
PUT /api/v1/proposals/:id/reject # Reddet
POST /api/v1/orders/package # Paket siparişi
POST /api/v1/orders/job # İş siparişi
PUT /api/v1/orders/:id/deliver # Teslimat yap
PUT /api/v1/orders/:id/approve # Onayla
PUT /api/v1/orders/:id/revision # Revizyon iste
POST /api/v1/payments # Ödeme başlat
GET /api/v1/wallet # Cüzdan bilgisi
GET /api/v1/wallet/escrow-details # Escrow detayları
POST /api/v1/payouts/request # Çekim talebi
GET /api/v1/conversations # Konuşmaları listele
POST /api/v1/messages # Mesaj gönder
WS /ws # WebSocket bağlantısı (STOMP)
GET /api/v1/blog # Yazıları listele
POST /api/v1/blog # Yazı oluştur
GET /api/v1/blog/:id # Yazı detayı
GET /api/v1/blog/slug/:slug # Slug ile getir
GET /api/v1/admin/system/health # Sistem sağlığı
GET /api/v1/admin/analytics # Analitik
GET /api/v1/admin/quality # Kalite metrikleri
POST /api/v1/refunds/bulk-approve # Toplu iade onayı
Tam API dokümantasyonu: http://localhost:8080/swagger-ui.html
Tüm değişkenler .env.example dosyasında açıklanmıştır.
| Değişken | Açıklama | Zorunlu |
|---|---|---|
DB_URL |
PostgreSQL JDBC URL | Evet |
DB_USERNAME / DB_PASSWORD |
Veritabanı kimlik bilgileri | Evet |
JWT_SECRET |
JWT imzalama anahtarı (min. 512 bit) | Evet |
CORS_ALLOWED_ORIGINS |
İzin verilen frontend adresleri | Evet |
REDIS_HOST / REDIS_PORT |
Redis bağlantısı | Evet |
SENDGRID_API_KEY |
SendGrid e-posta API anahtarı | E-posta için |
IYZICO_API_KEY / IYZICO_SECRET_KEY |
Iyzico ödeme kimlik bilgileri | Ödeme için |
ELASTICSEARCH_URIS |
Elasticsearch bağlantısı | Arama için |
SENTRY_DSN |
Sentry hata izleme | Monitoring için |
GOOGLE_MAPS_API_KEY |
Google Maps Geocoding | Konum için |
| Profil | Kullanım |
|---|---|
dev |
Yerel geliştirme (mock servisler, verbose log) |
test |
Test ortamı (H2 in-memory) |
prod |
Üretim (SSL, optimize bağlantı havuzu) |
storage |
Depolama sağlayıcısı yapılandırması |
# Profil ile çalıştırma
mvn spring-boot:run -Dspring-boot.run.profiles=dev# Altyapı servislerini başlat
docker compose up -d
# Sadece backend'i Dockerfile ile çalıştır
docker build -t marifetbul-api .
docker run -p 8080:8080 --env-file .env marifetbul-apidocker build -f Dockerfile.prod -t marifetbul-api:latest .
docker compose -f docker-compose.prod.yml up -dkubectl apply -f k8s/Kubernetes yapılandırması:
- Namespace:
marifetbul-prod - HPA: CPU bazlı otomatik ölçeklendirme
- Ingress: TLS/HTTPS terminasyonu
- PersistentVolume: 80Gi veritabanı depolama
- Health Probes: Liveness ve readiness kontrolleri
STOMP protokolü ile gerçek zamanlı mesajlaşma:
| Yapılandırma | Değer |
|---|---|
| Endpoint | /ws |
| Protokol | STOMP over SockJS |
| Heartbeat | 10 saniye |
| Max Mesaj | 512 KB |
| Auth | JWT doğrulama (bağlantı anında) |
Topic'ler:
/topic/{category} # Broadcast
/queue/{userId} # Kullanıcıya özel
/user/{userId}/queue/notifications # Bildirimler
/user/{userId}/queue/messages # Mesajlar
/user/{userId}/queue/orders # Sipariş güncellemeleri
- Kimlik Doğrulama: JWT (HS512), httpOnly cookie
- Yetkilendirme: Spring Security, method-level
@PreAuthorize - CORS: Whitelist bazlı origin kontrolü
- Rate Limiting: Bucket4j ile endpoint bazlı limitleme
- XSS Koruması:
@NoXssözel doğrulayıcı - CSRF: State-changing isteklerde token doğrulama
- Webhook Güvenliği: HMAC-SHA256 imza doğrulama
- Hassas Veri: Log'larda otomatik maskeleme
- Dosya Doğrulama: MIME tipi ve boyut kontrolü
| Araç | Endpoint / Yapılandırma |
|---|---|
| Actuator | /actuator/health, /actuator/metrics |
| Prometheus | /actuator/prometheus |
| Sentry | SENTRY_DSN environment variable |
| Swing Log | logs/marifetbul-backend.log (max 10MB, 30 rotasyon) |
Sağlık kontrolleri: PostgreSQL, Redis, Elasticsearch, bellek kullanımı.
# Tüm testleri çalıştır
mvn test
# Belirli bir test sınıfını çalıştır
mvn test -Dtest=OrderFacadeServiceTest
# Coverage raporu
mvn test jacoco:report
# Rapor: target/site/jacoco/index.htmlTest altyapısı:
- JUnit 5 + Mockito
- Testcontainers (PostgreSQL)
- H2 in-memory (birim testleri)
- JaCoCo hedefi: %40 satır, %35 branch
- Projeyi fork'layın
- Feature branch oluşturun
- Değişikliklerinizi commit edin
- Pull Request açın
- Java 17 özellikleri kullanılabilir
- Yeni entity'ler için Flyway migrasyonu zorunludur
- Servis sınıfları
@Transactionalannotation'ı ile işaretlenmeli @NoXssvalidator'ı kullanıcı girdilerinde kullanılmalı- Hata mesajları Türkçe olmalı