> ## 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.

# Studio Eklentisi (Görsel Sihirbaz)

> tools/ altındaki Studio projesinden VS Code / Cursor için .vsix eklenti üretip kurma ve sihirbazla proje oluşturma

[`dotnet new`](/getting-started/template-usage) komut satırına ek olarak, bu repo **VS Code / Cursor içinde çalışan görsel bir sihirbaz** da sunar: **Diyanet Studio**. Activity Bar'dan açılır, template'i klonlar, sorularla yapılandırır ve çözümü üretir.

Eklentinin kaynağı repoda `tools/DiyanetCleanArchitecture.Studio.Vsix` altındadır (TypeScript + React, VS Code extension). `.slnx`'e dâhil değildir; bağımsız bir geliştirici aracıdır.

<Note>
  Sihirbaz ham `dotnet new` çağırmaz; template'in `tools/` dizinindeki **`diyanet-cli new`** komutunu sürer. Bu komut provider seçimini, **modül/servis budamayı**, **Initial migration** üretimini ve **build**'i tek adımda yapar.
</Note>

## Nasıl çalışır

```
Activity Bar (logo) ─► "Yeni Solution Oluştur" ─► Webview (React sihirbazı)
                                                       │ postMessage
                                                       ▼
                                        Extension host (Node)
                                        • dotnet SDK kontrolü (min .NET 10)
                                        • git clone --depth 1   (template)
                                        • dotnet new install     (template'i kaydet)
                                        • diyanet-cli new <ad>   (provider + modül/servis
                                          pruning + Initial migration + build)
                                        • .env / .env.stage / .env.prod yaz
```

## Gereksinimler

| Araç                                | Sürüm / not                                      |
| ----------------------------------- | ------------------------------------------------ |
| **VS Code** `^1.85` veya **Cursor** | Eklentiyi çalıştırmak için                       |
| **Node.js** 22+ ve npm              | Eklentiyi **build/paketlemek** için              |
| **.NET SDK 10+**                    | Çalışma anında — `diyanet-cli new` çözümü üretir |
| **git**                             | Çalışma anında — template'i klonlar              |

## 1. Eklentiyi oluştur (.vsix paketle)

<Steps>
  <Step title="Eklenti dizinine geç">
    ```bash theme={null}
    cd tools/DiyanetCleanArchitecture.Studio.Vsix
    ```
  </Step>

  <Step title="Bağımlılıkları kur ve derle">
    ```bash theme={null}
    npm install
    npm run build      # esbuild (host) + vite (webview) → out/
    ```

    <Warning>
      Kurumsal ağ **dışında** `npm install` SSL hatası (`UNABLE_TO_GET_ISSUER_CERT_LOCALLY`) verirse, projedeki `.npmrc` kurumsal CA'ya işaret ediyordur. Kurulum süresince geçici devre dışı bırakın:
      `mv .npmrc .npmrc.bak && npm install && mv .npmrc.bak .npmrc`
    </Warning>
  </Step>

  <Step title="Paketle">
    ```bash theme={null}
    npx --yes @vscode/vsce package --no-dependencies
    ```

    Çıktı: çalışma dizininde **`diyanet-studio-<sürüm>.vsix`**. Sürüm `package.json` → `version`'dan gelir. (`--no-dependencies`: React zaten webview bundle'ına gömülüdür, `node_modules` paketlenmez.)
  </Step>
</Steps>

## 2. Kur

<Tabs>
  <Tab title="Arayüzden (en güvenilir)">
    1. Extensions panelini aç (`Ctrl+Shift+X`)
    2. Sağ üstteki **`...`** menüsü → **Install from VSIX…**
    3. Ürettiğin `diyanet-studio-<sürüm>.vsix` dosyasını seç
  </Tab>

  <Tab title="Komut satırından">
    ```bash theme={null}
    # VS Code
    code   --install-extension diyanet-studio-0.1.1.vsix --force
    # Cursor
    cursor --install-extension diyanet-studio-0.1.1.vsix --force
    ```
  </Tab>
</Tabs>

<Warning>
  **`'code' is not recognized` (Windows):** CLI PATH'te değilse `Ctrl+Shift+P → "Shell Command: Install 'code' command in PATH"` çalıştır, ya da arayüzden kur. Tam yolla da çağırabilirsin:
  `& "$env:LOCALAPPDATA\Programs\Microsoft VS Code\bin\code.cmd" --install-extension <dosya>.vsix`
</Warning>

<Note>
  **Aynı sürüme tekrar kurarsan editör eski kodu cache'ler** (örn. sihirbaz `Bilinmeyen işlem: loadModules` der). İki çözüm: `package.json`'da sürümü artır (0.1.0 → 0.1.1) ve yeniden paketle/kur, **veya** kurulumdan sonra `Ctrl+Shift+P → "Developer: Reload Window"` ile pencereyi tazele.
</Note>

## 3. Kullan

<Steps>
  <Step title="Sihirbazı aç">
    Activity Bar'daki **Diyanet Studio** ikonu → **"Yeni Solution Oluştur"**. Sihirbaz panel olarak açılır.
  </Step>

  <Step title="Template ve yapılandırma">
    Template git URL'ini ver. Sihirbaz `template.json` sembollerini okuyup şu adımları sunar:
    **proje adı → veritabanı (PostgreSQL/MSSQL) → modüller → altyapı servisleri → Keycloak client öneki (ProjectKeycloakId)**.
  </Step>

  <Step title="Oluştur">
    Çıktı klasörünü seç ve **Oluştur**. Sihirbaz `diyanet-cli new` ile çözümü üretir; canlı log akar. Bitince proje hazırdır.
  </Step>
</Steps>

<Note>
  Keycloak alanına girdiğin değer template'e `-P <ProjectKeycloakId>` olarak geçer ve yalnızca **client** öneklerini (`<id>-website`, `<id>-admin`) belirler. **Realm adları sabittir** (`diyanet-vatandas-…`, `diyanet-yonetim-…`) çünkü realm, projeler arası paylaşılan kimlik alanıdır (SSO). Ayrıntı: [Şablonu Kullanmak](/getting-started/template-usage).
</Note>

## Sorun giderme

<AccordionGroup>
  <Accordion title="Sihirbaz 'Bilinmeyen işlem: loadModules' veriyor">
    Editör eski extension sürümünü bellekte çalıştırıyordur (aynı sürüme `--force` kurulum). `package.json` sürümünü artırıp yeniden paketle/kur, ya da `Developer: Reload Window` yap.
  </Accordion>

  <Accordion title="'diyanet-cli proje dosyası bulunamadı'">
    Sihirbaz, klonlanan template'in `tools/` dizininde `*Studio.Cli/*.csproj` bekler. Verdiğin template URL'i bu projeyi içermelidir (bu repo içerir).
  </Accordion>

  <Accordion title="Üretim '.NET 10 SDK gerekli' diyor">
    `dotnet --list-sdks` ile kontrol et; 10.x yoksa [dotnet.microsoft.com/download/dotnet/10.0](https://dotnet.microsoft.com/download/dotnet/10.0) adresinden kur.
  </Accordion>

  <Accordion title="Çıktı çift klasör oluşturuyordu (C:\…\Foo\Foo)">
    Güncel sürümde düzeltildi: seçilen çıktı dizini zaten proje adıyla bitiyorsa tekrar eklenmez.
  </Accordion>
</AccordionGroup>
