> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diyanet.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Çözüm Yapısı

> DiyanetCleanArchitecture.slnx içindeki projeler, türleri ve referans matrisi

Çözüm dosyası **`DiyanetCleanArchitecture.slnx`** — yeni nesil XML tabanlı `.slnx` formatıdır (Visual Studio 2022 17.10+ ve VS 2026 destekler). Projeler türlerine göre gruplanır.

## Proje türleri

| Tür            | Uzantı          | Projeler                                                                |
| -------------- | --------------- | ----------------------------------------------------------------------- |
| Web SDK        | `.csproj` (Web) | `DiyanetCleanArchitecture.API`                                          |
| Class Library  | `.csproj`       | Application, Domain, SharedKernel, Infrastructure.\*, BuildingBlocks.\* |
| JS/TS SPA      | `.esproj`       | `Presentation.Admin`, `Presentation.Website`                            |
| Docker Compose | `.dcproj`       | `docker-compose.dcproj` (VS container desteği)                          |

<Note>
  `global.json`, `Directory.Build.props` ve `Directory.Packages.props` **yoktur**. NuGet paket sürümleri her `.csproj` içinde ayrı tanımlanır; merkezi paket yönetimi kullanılmaz.
</Note>

## Katman projeleri

```text theme={null}
src/
├── DiyanetCleanArchitecture.API                    # ASP.NET Core 10 host
├── DiyanetCleanArchitecture.Application            # CQRS + MediatR + behaviors
├── DiyanetCleanArchitecture.Domain                 # Aggregate'ler + domain event'ler
├── DiyanetCleanArchitecture.Domain.SharedKernel    # EntityBase, ValueObject, Enumeration
├── DiyanetCleanArchitecture.Infrastructure.EFCore  # DbContext, migrations, interceptor
├── 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 (.esproj)
├── DiyanetCleanArchitecture.Presentation.Admin     # React 19 + Vite (.esproj)
└── BuildingBlocks/                                  # 20 paket
```

## BuildingBlocks paketleri (20)

| Paket                                          | Amaç                                              |
| ---------------------------------------------- | ------------------------------------------------- |
| `BuildingBlocks.Caching`                       | HybridCache (L1+L2) soyutlaması, tag invalidation |
| `BuildingBlocks.Caching.Redis`                 | Redis distributed cache + distributed lock        |
| `BuildingBlocks.Contracts.Events`              | `IntegrationEvent`, handler kontratları           |
| `BuildingBlocks.DeviceDetector`                | IP çözümleme, cihaz tespiti, güven skoru          |
| `BuildingBlocks.EventBus`                      | Event bus soyutlaması + subscription registry     |
| `BuildingBlocks.EventBus.EventBusRabbitMQ`     | Eski RabbitMQ bus (MassTransit ile değiştirildi)  |
| `BuildingBlocks.EventBus.MassTransit.RabbitMq` | **Aktif** MassTransit + RabbitMQ event bus        |
| `BuildingBlocks.FileServer`                    | Auth-duyarlı statik dosya sunumu                  |
| `BuildingBlocks.Hangfire.MediatR.Extensions`   | Hangfire ↔ MediatR köprüsü                        |
| `BuildingBlocks.HealthChecks`                  | K8s uyumlu live/ready/external endpoint'leri      |
| `BuildingBlocks.Jwt`                           | Çok-şemalı JWT (Backoffice + OTP Challenge)       |
| `BuildingBlocks.Keycloak`                      | Çift-realm Keycloak SSO + claims transformation   |
| `BuildingBlocks.Logging.Serilog`               | Serilog + Seq + request enrichment                |
| `BuildingBlocks.Monitoring.Prometheus`         | OpenTelemetry Prometheus exporter                 |
| `BuildingBlocks.OAuth`                         | OAuth2 / PKCE soyutlaması                         |
| `BuildingBlocks.Observability`                 | OpenTelemetry metrik/trace + health→gauge         |
| `BuildingBlocks.Otp`                           | HMAC-SHA256 OTP üretim/doğrulama                  |
| `BuildingBlocks.Security.BotProtection`        | Google reCAPTCHA doğrulaması                      |
| `BuildingBlocks.Specification`                 | Generic Specification (Ardalis tabanlı)           |
| `BuildingBlocks.Time`                          | `IClock` soyutlaması (test edilebilir saat)       |

## Test projeleri

```text theme={null}
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
```

## Adlandırma kuralları (naming convention)

* **Katman:** `DiyanetCleanArchitecture.<Layer>` (Domain, Application, …).
* **Altyapı servisleri:** `DiyanetCleanArchitecture.Infrastructure.Services.<X>` (Email, Sms, OAuth, …).
* **BuildingBlocks:** `BuildingBlocks.<Concern>` ve `<Concern>.<Provider>` (örn. `Caching.Redis`, `EventBus.MassTransit.RabbitMq`).
* **DI uzantıları:** Her proje bir `DependencyInjection.cs` veya `Add<X>` extension metodu açar; `Program.cs` bu metodları çağırır.

## NuGet paket kategorileri

| Kategori          | Örnek paketler                                                                                     |
| ----------------- | -------------------------------------------------------------------------------------------------- |
| CQRS / Validation | MediatR 14.1.0, FluentValidation 12.1.1, AutoMapper 16.1.1                                         |
| Veri              | EF Core 10.0.7, Npgsql.EFCore 10.0.1, EFCore.NamingConventions 10.0.1, Ardalis.Specification 9.3.1 |
| Mesajlaşma        | MassTransit.RabbitMQ 8.5.9, MassTransit.EntityFrameworkCore 8.5.9                                  |
| Cache             | StackExchange.Redis 2.12.14, Microsoft.Extensions.Caching.Hybrid 9.6.0                             |
| Jobs              | Hangfire.AspNetCore 1.8.23, Hangfire.PostgreSql 1.21.1                                             |
| Log / Metrik      | Serilog.AspNetCore 10.0.0, OpenTelemetry.\* 1.15.x                                                 |
| API Docs          | NSwag.AspNetCore 14.7.1, Scalar.AspNetCore 2.14.6                                                  |
| Servisler         | MailKit 4.16.0, Scriban 7.1.0, OtpNet, Polly 8.6.6                                                 |

## Sırada ne var?

<CardGroup cols={2}>
  <Card title="Bağımlılık Akışı" icon="diagram-project" href="/architecture/dependency-flow">
    Projeler arası referans grafiği ve izin verilen yönler.
  </Card>

  <Card title="Tasarım Kararları" icon="scale-balanced" href="/architecture/design-decisions">
    Neden Outbox, çift-realm, HybridCache?
  </Card>
</CardGroup>
