Skip to main content
Şablon bir monorepo’dur. Backend (Clean Architecture katmanları), iki frontend SPA ve tüm devops dosyaları tek repoda yaşar. Çözüm dosyası DiyanetCleanArchitecture.slnx (yeni XML tabanlı .slnx formatı).

Üst düzey dizinler

diyanet-clean-architecture/
├── src/                      # Tüm kaynak kod (backend + frontend)
├── test/                     # Birim ve fonksiyonel testler
├── docker/                   # Keycloak temaları, Grafana/Prometheus/RabbitMQ config, init SQL
├── scripts/                  # Keycloak yardımcıları + Hetzner deploy script'leri
├── docs/                     # Bu Mintlify dokümantasyonu
├── .template.config/         # dotnet new şablon tanımı (template.json)
├── docker-compose*.yml       # Ortam bazlı compose dosyaları
├── .env*.example             # Ortam değişkeni şablonları
└── DiyanetCleanArchitecture.slnx

src/ — kaynak kod

src/
├── DiyanetCleanArchitecture.API                      # ASP.NET Core 10 host (Controllers, Program.cs)
├── DiyanetCleanArchitecture.Application              # CQRS: Features, Handlers, Behaviors
├── DiyanetCleanArchitecture.Domain                   # Aggregate'ler, Entity'ler, Domain Event'ler
├── DiyanetCleanArchitecture.Domain.SharedKernel      # EntityBase, ValueObject, Enumeration, ...
├── DiyanetCleanArchitecture.Infrastructure.EFCore    # DbContext, Repository, Migrations
├── DiyanetCleanArchitecture.Infrastructure.Jobs.Hangfire
├── DiyanetCleanArchitecture.Infrastructure.Services.Email
├── DiyanetCleanArchitecture.Infrastructure.Services.Sms
├── DiyanetCleanArchitecture.Infrastructure.Services.Notification
├── DiyanetCleanArchitecture.Infrastructure.Services.OAuth
├── DiyanetCleanArchitecture.Infrastructure.Services.Authenticator
├── DiyanetCleanArchitecture.Presentation.Website     # React 19 + Vite SPA → / (vatandaş)
├── DiyanetCleanArchitecture.Presentation.Admin       # React 19 + Vite SPA → /admin (personel)
└── BuildingBlocks/                                    # 20 yeniden kullanılabilir altyapı paketi

Katmanların sorumlulukları

Domain

İş kuralları. Hiçbir dış katmanı bilmez. Aggregate, Entity, Value Object, Domain Event, Factory, Domain Service.

Application

Use-case orkestrasyonu. MediatR Command/Query + Handler, Pipeline Behavior, Validator, DTO.

Infrastructure

Application arayüzlerinin somut implementasyonu: EF Core, RabbitMQ, Redis, Email, SMS, OAuth, TOTP, Hangfire.

API + Presentation

İnce controller’lar (sadece MediatR’a iletir) + iki React SPA.
Bağımlılık yönü her zaman içe doğrudur: API → Application → Domain. Infrastructure, Application arayüzlerini implemente eder. Detay: Mimari › Bağımlılık Akışı.

BuildingBlocks/ — altyapı paketleri

Uygulamadan bağımsız, başka projelere de taşınabilen 20 paket. Öne çıkanlar:
Paketİçerik
BuildingBlocks.Caching (+.Redis)HybridCache (L1+L2), distributed lock, tag invalidation
BuildingBlocks.EventBus.MassTransit.RabbitMqMassTransit + RabbitMQ + EF Outbox event bus
BuildingBlocks.KeycloakÇift-realm Keycloak SSO + claims transformation
BuildingBlocks.JwtÇok-şemalı JWT (Backoffice + OTP Challenge)
BuildingBlocks.OAuthOAuth2 / PKCE soyutlaması (Google, Meta, Keycloak)
BuildingBlocks.OtpHMAC-SHA256 OTP üretim/doğrulama
BuildingBlocks.SpecificationGeneric Specification (Ardalis tabanlı)
BuildingBlocks.DeviceDetectorIP çözümleme, cihaz parmak izi, güven skoru
BuildingBlocks.ObservabilityOpenTelemetry metrik/trace + health→gauge köprüsü
BuildingBlocks.HealthChecksK8s uyumlu live/ready/external endpoint’leri
Tam liste ve API’ler: BuildingBlocks › Genel Bakış.

test/ — testler

test/
├── DiyanetCleanArchitecture.Domain.UnitTests
├── DiyanetCleanArchitecture.API.Authorization.UnitTests
├── DiyanetCleanArchitecture.Caching.Redis.UnitTests
├── DiyanetCleanArchitecture.Infrastructure.Services.Email.UnitTests
├── DiyanetCleanArchitecture.Infrastructure.Services.Sms.UnitTests
└── BuildingBlocks.EventBus.MassTransit.RabbitMq.FunctionalTests

docker/ — container yardımcıları

docker/
├── keycloak/         # Özel Keycloak imajı + Türkçe temalar (diyanet-website, diyanet-admin)
├── grafana/          # Datasource + dashboard provisioning (diyanet-health.json)
├── prometheus/       # prometheus.yml scrape config (/metrics)
├── rabbitmq/         # enabled_plugins (management + delayed_message_exchange)
├── init/             # Postgres init SQL (keycloak şeması, tenant'lar)
└── init-hetzner/     # Çok-proje veritabanı oluşturma

Compose ve ortam dosyaları

DosyaAmaç
docker-compose.ymlBase: API + Website + Admin
docker-compose.override.ymlDev — tüm altyapı + host port’ları (otomatik yüklenir)
docker-compose.stage.ymlStage — nginx-proxy + acme-companion + Let’s Encrypt
docker-compose.prod.ymlProd — aynı yapı, prod realm/sertifika
docker-compose.stage.local.ymlLocal’de stage simülasyonu (HTTP-only)
docker-compose.platform.yml / .shared-infra.yml / .app.ymlHetzner çok-proje dağıtımı
Detay: Operasyon › Genel Bakış.

Sonraki adım

Mimari Genel Bakış

Katmanlar ve bağımlılık yönü.

Çözüm Yapısı

.slnx içindeki projeler ve referans grafiği.