2026-08-10 09:08:08 +00:00
# Sozsoft Platform
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
**Çalı şma zamanı nda yapı landı rı labilen, çok kiracı lı (multi-tenant) low-code uygulama motoru.**
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Sozsoft Platform, klasik bir "kod yaz– derle– yayı nla" uygulaması değildir. Ekranlar, menüler,
route'lar, yetkiler, veri kaynakları , iş akı şları ve hatta API endpoint'leri **veritabanı ndaki
konfigürasyon kayı tları ndan** üretilir. Yeni bir modül veya ekran eklemek çoğu durumda tek satı r
React/C# kodu yazmadan, yalnı zca konfigürasyon ile mümkündür.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
> **Temel ilke:** Configuration first, code last.
> Bu ilkenin operasyonel karşı lı ğı ve yapay zeka ajanları için bağlayı cı kurallar
> [`.github/instructions/ai.instructions.md`](.github/instructions/ai.instructions.md) dosyası ndadı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
## İçindekiler
2026-08-10 09:08:08 +00:00
1. [Platform Ne Yapar? ](#1-platform-ne-yapar )
2. [Mimari Genel Bakı ş ](#2-mimari-genel-bakı ş )
3. [Teknoloji Yı ğı nı ](#3-teknoloji-yı ğı nı )
4. [Depo Yapı sı ](#4-depo-yapı sı )
5. [Hı zlı Başlangı ç ](#5-hı zlı -başlangı ç )
6. [Yapı landı rma (Configuration) ](#6-yapı landı rma-configuration )
7. [Low-Code Motoru: ListForm Ekosistemi ](#7-low-code-motoru-listform-ekosistemi )
8. [Developer Kit ](#8-developer-kit )
9. [Dinamik Menü, Route ve Yetki Modeli ](#9-dinamik-menü-route-ve-yetki-modeli )
10. [Modül Kataloğu ](#10-modül-kataloğu )
11. [Kimlik, Oturum ve Güvenlik ](#11-kimlik-oturum-ve-güvenlik )
12. [Çok Kiracı lı lı k (Multi-Tenancy) ](#12-çok-kiracı lı lı k-multi-tenancy )
13. [Bildirim ve Entegrasyonlar ](#13-bildirim-ve-entegrasyonlar )
14. [Arka Plan İşleri ](#14-arka-plan-işleri )
15. [Raporlama ](#15-raporlama )
16. [Dosya Yönetimi ve CDN ](#16-dosya-yönetimi-ve-cdn )
17. [Gerçek Zamanlı Özellikler ](#17-gerçek-zamanlı -özellikler )
18. [Frontend Mimarisi ](#18-frontend-mimarisi )
19. [API ve Swagger ](#19-api-ve-swagger )
20. [Dağı tı m (Deployment) ](#20-dağı tı m-deployment )
21. [Geliştirme Standartları ve Sı k Kullanı lan Komutlar ](#21-geliştirme-standartları -ve-sı k-kullanı lan-komutlar )
22. [Sorun Giderme ](#22-sorun-giderme )
23. [Bilinen Sı nı rlar ve Notlar ](#23-bilinen-sı nı rlar-ve-notlar )
---
## 1. Platform Ne Yapar?
| Yetenek | Açı klama |
| --- | --- |
| **Dinamik liste/form ekranları ** | `ListForm` + `ListFormField` kayı tları yla tanı mlanan; grid, pivot, ağaç, grafik, gantt, scheduler, kart ve todo görünümlerini destekleyen ekranlar. |
| **Dinamik menü ve route** | Menüler ve route'lar veritabanı ndan okunur; frontend bunları çalı şma zamanı nda React Router'a bağlar. |
| **Yetki tabanlı görünürlük** | Menü, ekran, sütun ve buton seviyesinde ABP permission kontrolü. |
| **SQL Query Manager** | Tarayı cı içinden SQL nesne gezgini, sorgu editörü, sonuç grid'i ve tablo tasarı mcı sı . |
| **Custom / CRUD Endpoint** | Kod yazmadan, SQL veya tablo tanı mı ndan REST endpoint üretimi. |
| **Dynamic Service** | Roslyn ile çalı şma zamanı nda derlenen ve controller olarak kaydedilen C# ApplicationService'ler. |
| **Custom Component** | Babel ile tarayı cı da derlenen, veritabanı nda saklanan React bileşenleri ve bunları n route'ları . |
| **İş akı şı / onay** | ListForm üzerinde görsel workflow tasarı mcı sı , koşullu dallanma ve çok kişili onay adı mları . |
| **Çok kiracı lı lı k** | Tenant başı na ayrı bağlantı dizesi (ayrı veritabanı ) desteği, şube (branch) ve organizasyon birimi kı rı lı mı . |
| **Bildirim ve entegrasyon** | SMS, e-posta, WhatsApp, Rocket.Chat, masaüstü ve UI kanalları na kural tabanlı bildirim. |
| **Raporlama** | DevExpress Report Designer/Viewer + ListForm'dan otomatik üretilen dinamik raporlar. |
| **Arka plan işleri** | Hangfire + ABP Background Worker; zamanlanmı ş SQL, mail kuyruğu, yedekleme, oturum temizliği. |
| **Gerçek zamanlı ** | SignalR tabanlı messenger ve video oda (WebRTC/TURN) altyapı sı . |
| **Intranet & Forum** | Duyuru, anket, sosyal duvar, etkinlik; kategori/konu/gönderi tabanlı forum. |
| **Public web sitesi** | Ana sayfa, hakkı mı zda, hizmetler, ürün, ödeme, blog, demo ve iletişim içerikleri (tasarı mcı ekranları yla düzenlenebilir). |
| **PWA** | Service worker ile offline kabuk, kontrollü sürüm güncellemesi ve changelog bildirimi. |
---
## 2. Mimari Genel Bakı ş
```
┌──────────────────────────────────────────────────────────────────────┐
│ UI — React 18 + Vite + TypeScript + DevExtreme + Tailwind (PWA) │
│ ├─ DynamicRouter (route kayı tları ndan React Router üretimi) │
│ ├─ ListForm runtime (Grid / Pivot / Tree / Chart / Gantt / ...) │
│ ├─ Form runtime (DevExtreme Form, metadata ile alan üretimi)│
│ ├─ Developer Kit UI (SQL, endpoint, component, dynamic service) │
│ └─ easy-peasy store + React Query + SignalR │
└───────────────┬──────────────────────────────────────────────────────┘
│ HTTPS / OAuth2 (OpenIddict) / SignalR
┌───────────────▼──────────────────────────────────────────────────────┐
│ API — ASP.NET Core (.NET 10) + ABP Framework 10 │
│ ├─ HttpApi.Host : Swagger, OpenIddict, Hangfire, SignalR Hub, │
│ │ DevExpress Reporting, Setup/Migration akı şı │
│ ├─ Application : ListForms, DeveloperKit, Identity, Tenants, │
│ │ Menu, Routes, DataSource, FileManagement, ... │
│ ├─ Domain : Entity'ler, dinamik veri erişimi, seed'ler │
│ └─ EF Core : Migration'lar, dinamik DbContext, tenant DB │
│ │
│ Modüller: Languages · Settings · Notifications · MailQueue · │
│ Sender · SqlQueryManager │
└───────────────┬──────────────────────────────────────────────────────┘
│
┌───────────────▼──────────────────────────────────────────────────────┐
│ Veri ve Altyapı │
│ SQL Server / PostgreSQL · Redis (cache + SignalR backplane) · │
│ Hangfire (job storage) · Dosya sistemi tabanlı BLOB/CDN · │
│ coturn (TURN) · nginx · Elasticsearch (opsiyonel) │
└──────────────────────────────────────────────────────────────────────┘
```
**Akı şı n özeti:** Kullanı cı giriş yapar → ABP `application-configuration` yanı tı na
`PlatformApplicationConfigurationContributor` menü, route ve yetkileri ekler → `DynamicRouter`
route kayı tları nı React bileşenlerine bağlar → `/admin/list/{ListFormCode}` gibi bir ekran
açı ldı ğı nda `ListFormsAppService` metadata'yı , `ListFormDataAppService` ise veriyi döner →
DevExtreme bileşenleri bu metadata'ya göre kendini kurar.
---
## 3. Teknoloji Yı ğı nı
### Backend
| Bileşen | Sürüm / Notlar |
| --- | --- |
| .NET | `net10.0` (SDK 10.0.300, `global.json` ile sabit) |
| ABP Framework | 10.0.0 (Identity, TenantManagement, PermissionManagement, AuditLogging, OpenIddict, BlobStoring, BackgroundWorkers) |
| Veritabanı | SQL Server 2022 veya PostgreSQL 17 (`PlatformConsts.DefaultDatabaseProvider`) |
| ORM | Entity Framework Core |
| Kimlik | OpenIddict (password + refresh token, `/connect/token` ) |
| Cache | Redis (opsiyonel; `Redis:IsEnabled` ) |
| Job | Hangfire (`default`, `platform` kuyrukları ) + ABP Background Workers |
| Raporlama | DevExpress Reporting (Web Document Viewer + Report Designer) |
| Log | Serilog |
| Dinamik derleme | Roslyn (`DynamicServiceCompiler`) |
| Şablon | Scriban (mail şablonları ), MailKit/MimeKit |
| Gerçek zamanlı | SignalR (Redis backplane destekli) |
### Frontend
| Bileşen | Sürüm / Notlar |
| --- | --- |
| React | 18.3 |
| Build | Vite 8 + TypeScript 5.9 |
| UI kütüphaneleri | DevExtreme 25.2 (React), Tailwind CSS 3.4, kendi `components/ui` tasarı m sistemi |
| Routing | react-router-dom 6 (dinamik route üretimi) |
| State | easy-peasy (global store) + @tanstack/react -query |
| Form | Formik + Yup, DevExtreme Form |
| Kod editörü | Monaco Editor |
| Runtime derleme | @babel/standalone (Custom Component) |
| Takvim/Gantt | FullCalendar, DevExtreme Scheduler/Gantt |
| Gerçek zamanlı | @microsoft/signalr |
| PWA | vite-plugin-pwa (Workbox) |
| Node | 24.13 / npm 11 (`volta` ile sabitlenmiş) |
---
## 4. Depo Yapı sı
```
sozsoft-platform/
├── api/ # .NET çözümü (Sozsoft.Platform.sln)
│ ├── src/
│ │ ├── Sozsoft.Platform.Domain.Shared/ # Sabitler, enum'lar, permission kodları (AppCodes)
│ │ ├── Sozsoft.Platform.Domain/ # Entity'ler, dinamik veri erişimi, repository'ler
│ │ ├── Sozsoft.Platform.Application.Contracts/ # DTO'lar, servis arayüzleri, permission tanı mları
│ │ ├── Sozsoft.Platform.Application/ # Uygulama servisleri (iş mantı ğı )
│ │ ├── Sozsoft.Platform.EntityFrameworkCore/ # DbContext, migration'lar, dinamik veri katmanı
│ │ ├── Sozsoft.Platform.HttpApi/ # Controller'lar (conventional)
│ │ ├── Sozsoft.Platform.HttpApi.Client/ # HTTP istemci proxy'leri
│ │ ├── Sozsoft.Platform.HttpApi.Host/ # Host: Swagger, auth, Hangfire, SignalR, raporlama
│ │ └── Sozsoft.Platform.DbMigrator/ # Migration + seed uygulaması
│ ├── modules/ # Bağı msı z ABP modülleri
│ │ ├── Sozsoft.Languages/ # Dil, dil anahtarı , çeviri metinleri
│ │ ├── Sozsoft.Settings/ # Ayar tanı mları ve ayar UI'ı
│ │ ├── Sozsoft.Notifications/ # Bildirim tipleri, kuralları , kullanı cı bildirimleri
│ │ ├── Sozsoft.MailQueue/ # Şablonlu mail kuyruğu ve ekleri
│ │ ├── Sozsoft.Sender/ # Mail (SES), SMS, WhatsApp, Rocket.Chat göndericileri
│ │ └── Sozsoft.SqlQueryManager/ # SQL nesne yönetimi ve sorgu çalı ştı rma
│ └── test/ # Test projeleri
├── ui/ # React uygulaması
│ └── src/
│ ├── routes/ # dynamicRouter, dynamicRouteLoader, route.constant
│ ├── views/ # list, form, admin, developerKit, public, intranet, forum, report, auth, setup
│ ├── components/ # ui (tasarı m sistemi), template (layout), importManager, visualDesigner, componentEditor
│ ├── services/ # API istemcileri (her modül için ayrı servis dosyası )
│ ├── store/ # easy-peasy modelleri (auth, theme, locale, abpConfig, admin)
│ ├── contexts/ # ComponentContext (runtime bileşenler), Dialog, Scroll
│ └── utils/ # editorScriptRuntime, workflow, hooks, hoc, biçimlendirme yardı mcı ları
├── configs/
│ ├── docker/ # Yerel geliştirme için veri katmanı compose dosyaları ve scriptler
│ ├── deployment/ # Dev/Prod compose dosyaları , nginx/redis/turn konfigürasyonu, deploy scriptleri
│ └── ai/ # AI entegrasyonu (n8n akı ş tanı mları )
├── .github/instructions/ # ai.instructions.md (bağlayı cı platform kuralları ), list.instructions.md
├── CLAUDE.md # Claude Code için operasyon kuralları
└── README.md
```
---
## 5. Hı zlı Başlangı ç
### 5.1. Önkoşullar
- .NET SDK **10.0.300+**
- Node.js **24.x** ve npm **11.x** (Volta önerilir)
- Docker Desktop (veritabanı ve Redis için)
- DevExpress lisansı (`api/DevExpress_License.txt`) ve DevExtreme npm erişimi
### 5.2. Veri katmanı nı ayağa kaldı rma
```powershell
# SQL Server + Redis
.\configs\docker\start_sql.bat
# veya PostgreSQL + Redis
.\configs\docker\start_postgres.bat
```
Compose dosyaları `configs/docker/docker-compose-data.yml` içindedir; `sql` ve `postgres`
profilleri ile hangi veritabanı nı n kalkacağı seçilir. Redis her iki profilde de çalı şı r.
### 5.3. Backend
```powershell
cd api
dotnet restore
dotnet run --project src/Sozsoft.Platform.HttpApi.Host
```
Uygulama `https://localhost:44344` adresinde açı lı r. Swagger UI kök adreste yayı nlanı r.
**Veritabanı ilk kurulum:** Veritabanı yoksa host, tam ABP yı ğı nı yerine minimal bir
"setup" uygulaması ile açı lı r (`DbStartup/SetupAppRunner`). Bu durumda:
- `GET /api/setup/application-status` — veritabanı nı n hazı r olup olmadı ğı nı döner (anonim).
- UI tarafı nda `/setup` route'u (`views/setup/DatabaseSetup.tsx`) migration'ı tetikleyen ekranı gösterir.
- Migration için `Setup:MigrationPassword` yapı landı rması veya `App.Setup.Migrate` yetkisi gerekir.
Alternatif olarak migration + seed'i doğrudan çalı ştı rabilirsiniz:
```powershell
dotnet run --project api/src/Sozsoft.Platform.DbMigrator
```
DbMigrator; şema migration'ları nı uygular ve ardı ndan menü, route, permission, dil,
host ayarları , ülke/şehir/ilçe verileri ile seed edilmiş ListForm ekranları nı yükler
(`api/src/Sozsoft.Platform.DbMigrator/Seeds/`).
### 5.4. Frontend
```powershell
cd ui
npm install
2026-08-12 12:20:00 +00:00
npm start # vite dev server (http://localhost:3000)
2026-08-10 09:08:08 +00:00
```
2026-08-12 12:20:00 +00:00
Visual Designer ve Custom Component altyapı sı nı n kullandı ğı bileşen kataloğu
`src/components/visualDesigner/generated/componentProps.json` dosyası nda tutulur ve repoya
dahildir. `src/components/ui` altı ndaki bileşen prop'ları değiştiğinde bu dosya elle
güncellenmelidir.
2026-08-10 09:08:08 +00:00
### 5.5. İlk giriş
Seed edilen host yöneticisi ile `/login` üzerinden giriş yapı lı r (kullanı cı bilgileri
`PlatformIdentityDataSeeder` ve `HostData.json` ile belirlenir; ortam bazlı değerler
`HostData.Dev.json` / `HostData.Production.json` dosyaları ndadı r). Giriş sonrası
`/admin/dashboard` açı lı r.
---
## 6. Yapı landı rma (Configuration)
### 6.1. Backend (`appsettings.json`)
| Anahtar | Açı klama |
| --- | --- |
| `App:SelfUrl` | API'nin kendi adresi (OpenIddict authority ile uyumlu olmalı ). |
| `App:ClientUrl` | React uygulaması nı n kök adresi (mail linkleri bu adresi kullanı r). |
| `App:CorsOrigins` | Virgülle ayrı lmı ş izinli origin listesi; wildcard subdomain destekli. |
| `App:RedirectAllowedUrls` | OAuth yönlendirme için izinli adresler. |
| `App:CdnUrl` / `App:CdnPath` | Dosya servisinin adresi ve BLOB kök dizini. |
| `App:AttachmentsPath` | Mail kuyruğu eklerinin yazı ldı ğı dizin. |
| `App:BackupPath` | Veritabanı yedek dizini (BackupWorker kullanı r). |
| `App:Version` | Uygulama sürümü (UI sürüm kontrolü ile eşleşir). |
| `ConnectionStrings:SqlServer` / `PostgreSql` | Host veritabanı bağlantı ları . |
| `Redis:IsEnabled` / `Redis:Configuration` | Dağı tı k cache ve SignalR backplane. |
| `AuthServer:Authority` / `SwaggerClientId` | OpenIddict authority ve Swagger istemcisi. |
| `OpenIddict:TokenLifetimes:*` | Access/refresh token ömrü (dakika). |
| `Setup:MigrationPassword` | Setup ekranı ndan migration tetiklemek için parola. |
| `StringEncryption:DefaultPassPhrase` | ABP string şifreleme anahtarı . |
| `Serilog:MinimumLevel` | Log seviyeleri. |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
> **Güvenlik:** Depodaki `appsettings.json` dosyaları geliştirme değerleri içerir.
> Üretimde bağlantı dizeleri, `MigrationPassword`, `DefaultPassPhrase` ve entegrasyon
> anahtarları **ortam değişkeni veya secret yöneticisi** ile verilmelidir; repoya yazı lmamalı dı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 6.2. Frontend (`ui/.env`, `.env.dev`, `.env.production`)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Değişken | Açı klama |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `VITE_API_URL` | API kök adresi. |
| `VITE_CDN_URL` | Dosya/CDN kök adresi. |
| `VITE_REACT_APP_VERSION` | `package.json` sürümünden beslenir. |
| `VITE_AI_URL` | AI asistanı nı n n8n webhook kökü. |
| `VITE_USE_POLLING` | Dosya izlemede polling (WSL/Docker senaryoları ). |
| `VITE_PWA_DEV` | Geliştirmede service worker'ı açar (varsayı lan kapalı ). |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 6.3. Uygulama içi ayarlar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Çalı şma zamanı ayarları veritabanı nda tutulur ve **Ayarlar** ekranı ndan (`/admin/settings`)
yönetilir. `Sozsoft.Settings` modülü ayar tanı mları nı , `SettingUiAppService` ise bu tanı mları n
UI gösterimini yönetir. Şifre politikası , oturum kuralları , gönderici kimlik bilgileri (SMS,
mail, WhatsApp, Rocket) ve AI bot yapı landı rması bu yolla değiştirilir — kod dağı tı mı gerekmez.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 7. Low-Code Motoru: ListForm Ekosistemi
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Platformun kalbi budur. Bir iş ekranı ; bir `ListForm` kaydı , ona bağlı `ListFormField`
kayı tları ve bir menü/route/permission üçlüsünden oluşur.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.1. Kavramlar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Varlı k | Rolü |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `DataSource` | Hedef veritabanı bağlantı sı (MSSQL / PostgreSQL). Ekranlar `DataSourceCode` ile bağlanı r. |
| `ListForm` | Ekranı n tüm davranı şı : veri kaynağı , sütun/filtre/sayfalama/düzenleme ayarları , yetkiler, alt formlar, iş akı şı , grafik ayarları . |
| `ListFormField` | Tek bir sütun/alanı n davranı şı : başlı k, tip, genişlik, editör, lookup, doğrulama, biçim, yetki. |
| `ListFormCustomization` | Kullanı cı bazlı kişiselleştirme: kayı tlı filtre, grid state, sunucu tarafı join/where. |
| `ListFormWorkflow` | Onay ve koşul düğümlerinden oluşan iş akı şı grafiği. |
| `ListFormImport` / `ImportLog` | Excel/CSV içe aktarma tanı mı ve satı r bazlı sonuç günlüğü. |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.2. `ListForm` anatomisi
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Ekran davranı şı büyük ölçüde JSON kolonları nda saklanı r. Öne çı kanlar:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Alan | İşlevi |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `SelectCommandType` + `SelectCommand` | Veri kaynağı türü: `Table` , `View` , `TableValuedFunction` , `Query` , `StoredProcedure` . |
| `KeyFieldName` / `KeyFieldDbSourceType` | Birincil anahtar alanı ve tipi. |
| `PermissionJson` | Ekranı n create/read/update/delete/export/import/note yetki eşlemesi. |
| `EditingOptionJson` / `EditingFormJson` | Düzenleme modu (row/cell/batch/form/popup) ve düzenleme formu düzeni. |
| `FilterRowJson` , `HeaderFilterJson` , `FilterPanelJson` , `SearchPanelJson` , `GroupPanelJson` | Filtreleme, arama ve gruplama davranı şı . |
| `ColumnOptionJson` , `PagerOptionJson` , `SelectionJson` , `StateStoringJson` | Sütun, sayfalama, seçim ve durum saklama ayarları . |
| `Insert/Update/DeleteCommand` (+ `Before` / `After` ) | CRUD komutları ve öncesi/sonrası çalı şacak SQL kancaları . |
| `Insert/Update/DeleteServiceAddress` | Varsayı lan olarak `list-form-data/*` ; özel endpoint'e yönlendirilebilir. |
| `SubFormsJson` | Ana-detay ilişkisi (ParentFieldName → ChildFieldName eşlemesi). |
| `WidgetsJson` | Ekranı n üstünde gösterilecek KPI kartları . |
| `WorkflowJson` | İş akı şı bağlaması . |
| `ExtraFilterJson` | Ekrana özel ek filtre araç çubuğu. |
| `PivotOptionJson` , `TreeOptionJson` , `GanttOptionJson` , `SchedulerOptionJson` , `TodoOptionJson` | Alternatif görünümlerin ayarları . |
| Grafik alanları (`SeriesJson`, `LegendJson` , `ArgumentAxisJson` , `ValueAxisJson` , `TooltipJson` , `ZoomAndPanJson` , …) | DevExtreme Chart yapı landı rması . |
| `CustomJsSourcesJson` / `CustomStyleSourcesJson` | Ekran yüklendiğinde çalı şacak JS/CSS. |
| `IsTenant` , `IsBranch` , `IsOrganizationUnit` | Otomatik tenant/şube/organizasyon birimi filtrelemesi. |
| `UserId` , `RoleId` , `CultureName` | Aynı ekranı n kullanı cı , rol veya dil bazlı varyantları . |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.3. Görünüm tipleri
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Aynı `ListForm` tanı mı , aynı veri hattı üzerinden birden fazla görünümle sunulabilir:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`Grid` · `Pivot` · `Tree` · `Chart` · `Gantt` · `Scheduler` · `CardView` · `TodoBoard` · `Widget Group`
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Kullanı cı görünümler arası nda geçiş yapabilir; grid durumu (sütun sı rası , genişlik, filtre,
gruplama) kullanı cı bazlı saklanı r ve sı fı rlanabilir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.4. Alan (field) davranı şı
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **Editör tipleri:** `dxTextBox` , `dxTextArea` , `dxNumberBox` , `dxDateBox` , `dxDateRangeBox` ,
`dxCalendar` , `dxCheckBox` , `dxSwitch` , `dxRadioGroup` , `dxSelectBox` , `dxTagBox` , `dxLookup` ,
`dxDropDownBox` , `dxGridBox` , `dxAutocomplete` , `dxColorBox` , `dxHtmlEditor` , `dxSlider` ,
`dxRangeSlider` — ayrı ca görsel yükleme/görüntüleme editörleri.
- **Lookup kaynakları :** `StaticData` , `Query` , `WebService` ; ebeveyn– çocuk (cascade) desteklidir.
- **Doğrulama:** `ValidationRuleJson` ile required/range/pattern/custom kuralları .
- **Editör script:** `EditorScript` alanı ile alan değişiminde çalı şan JS (örn. tarih farkı ndan
gün hesaplama, miktar × birim fiyat toplamı ). Çalı ştı rma `utils/editorScriptRuntime.ts` üzerinden yapı lı r.
- **Koşullu biçimlendirme:** `ColumnStylingJson` , `ColumnCssClass` /`ColumnCssValue`.
- **Alan bazlı yetki:** `PermissionJson` ile sütun düzeyinde okuma/yazma/dı şa aktarma kontrolü.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.5. İş akı şı ve onay
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`FormTabWorkflow` ve `views/admin/listForm/workflow/WorkflowDesigner.tsx` üzerinden görsel
tasarlanı r. Düğüm türleri koşul karşı laştı rması (`CompareColumn`/`CompareOperator`/`CompareValue`)
ve onay adı mları dı r; her adı m için `NextOnTrue` , `NextOnFalse` , `NextOnApprove` , `NextOnReject`
geçişleri tanı mlanı r. Onaycı birden fazla kişi olabilir. Formlar içinde iş akı şı na bağlı özel
butonlar gösterilebilir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.6. Yeni ekran ekleme akı şı (Wizard)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`/admin/listform/wizard` altı ndaki 11 adı mlı sihirbaz, aşağı daki yedi artefaktı tek akı şta üretir:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
1. **ListForm** kaydı (kod, ad, başlı k, veri kaynağı , select komutu, anahtar alan)
2. **ListFormField** kümesi (sütunlar, editörler, lookup'lar, doğrulamalar)
3. **Route** kaydı (`key`, `path` , `componentPath` , `routeType` , `authority` )
4. **Menu** kaydı (`ParentCode`, `Code` , `DisplayName` , `Url` , `Icon` , `RequiredPermissionName` , `Order` )
5. **Permission** kayı tları (`.Default`, `.Create` , `.Update` , `.Delete` , `.Export` , `.Import` , `.Note` )
6. Gerekiyorsa **ayar/entegrasyon** bağı mlı lı kları
7. **Doğrulama ve geri alma** notları
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Dinamik liste ekranları nı n route deseni `/admin/list/{ListFormCode}` biçimindedir; form
görünümleri `/admin/form/{listFormCode}/:id` , grafik `/admin/chart/{listFormCode}` , pivot
`/admin/pivot/{listFormCode}` yolları nı kullanı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Var olan bir ekranı düzenlemek için `/admin/listform/edit/{listFormCode}` — tüm JSON
yapı landı rması sekmeli bir editörde yönetilir (Veritabanı , Sütunlar, Filtreler, Düzenleme,
Yetkiler, Alt Form, Pivot, Tree, Gantt, Scheduler, Todo, Widget, Workflow, Durum, Grafik sekmeleri).
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 7.7. İçe/dı şa aktarma
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **Dı şa aktarma:** xlsx, csv, pdf (grid durumuna ve görünür sütunlara saygı duyar).
- **İçe aktarma:** `components/importManager` altı ndaki dosya yükleme → önizleme → ilerleme →
sonuç akı şı ; sonuçlar `ListFormImportLog` üzerinde satı r bazı nda raporlanı r. Şablon dosyası
ekran tanı mı ndan üretilir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 8. Developer Kit
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Teknik kullanı cı lar için `/admin/developerkit` altı nda toplanan araçlar:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Araç | Route | Ne işe yarar |
2026-06-09 12:54:05 +00:00
| --- | --- | --- |
2026-08-10 09:08:08 +00:00
| **SQL Query Manager** | `/admin/sql-manager` | Nesne gezgini, Monaco tabanlı SQL editörü, sonuç grid'i, nesne özellikleri ve **tablo tasarı mcı sı ** . |
| **Custom Endpoint** | `/admin/developerkit/endpoints` | SQL veya servis tanı mı ndan REST endpoint üretimi; GET/POST/PUT/DELETE için ayrı yetki kapı ları (`App.DeveloperKit.CustomEndpoints.*`) ve kullanı cı /rol/global erişim kuralları . |
| **CRUD Endpoint** | `/admin/developerkit/entities` | Tablo tanı mı ndan tam CRUD endpoint kümesi üretimi. |
| **Dynamic Service** | `/admin/developerkit/dynamic-services` | C# kodunu tarayı cı da yazı p Roslyn ile derleme (`TestCompile`), yayı nlama (`Publish`) ve çalı şan uygulamaya controller olarak kaydetme. Yetkiler: Create/Edit/Delete/Manage/TestCompile/Publish/ViewCode. |
| **Custom Component** | `/admin/developerkit/components` | React bileşenini veritabanı nda saklama; `@babel/standalone` ile tarayı cı da derleyip route'a bağlama. |
| **Visual Designer** | Component editörü içinde | Sürükle-bı rak kanvas ile bileşen üretimi ve kod üretimi (`visualDesigner/codeGenerator.ts`). |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
> **Tablo tasarı mı varsayı lanı :** Yeni tablo oluştururken tenant ve tam denetim (audit) kolonları
> varsayı lan olarak eklenir: `Id`, `TenantId`, `CreationTime`, `CreatorId`, `LastModificationTime`,
> `LastModifierId`, `IsDeleted`, `DeletionTime`, `DeleterId`. Kullanı cı açı kça istemedikçe bu
> kolonlar çı karı lmaz.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
**Dinamik servis yaşam döngüsü:** `DynamicServiceCompiler` kodu derler →
`DynamicAssemblyRegistrationService` assembly'yi tenant bağlamı yla kaydeder →
`ActionDescriptorChangeProvider` MVC'ye route tablosunun değiştiğini bildirir →
`DynamicControllerActivator` bağı mlı lı kları enjekte eder. Uygulama yeniden başlatı lmaz.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 9. Dinamik Menü, Route ve Yetki Modeli
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
```
Permission (ABP) ──┐
├──► Menu.RequiredPermissionName ──► menüde görünürlük
Route.Authority ──┘ └► PermissionGuard ile erişim
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **Route** (`Entities/Tenant/Administration/Route.cs`): `Key` , `Path` , `ComponentType` ,
`ComponentPath` , `RouteType` (`public` / `protected` ), `Authority[]` .
- **Menu** (`Menu.cs`): `Code` , `ParentCode` , `DisplayName` , `Url` , `Icon` , `Order` ,
`RequiredPermissionName` , `Target` , `IsDisabled` , ayrı ca `UserId` / `RoleId` / `CultureName`
ile kullanı cı , rol ve dil bazlı menü varyantları .
- **Menü yöneticisi** (`/admin/menuManager`): sürükle-bı rak ağaç ile menü düzenleme.
- Frontend'de `dynamicRoutesContext` route'ları çeker, `dynamicRouteLoader` bunları fiziksel
view'lara veya runtime derlenmiş Custom Component'lere eşler, `DynamicRouter` React Router
ağacı nı kurar; her korumalı route `ProtectedRoute` + `PermissionGuard` ile sarı lı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
**Yetki kodları ** `PlatformConsts.AppCodes` içinde merkezî olarak tanı mlı dı r ve
`PermissionsData.json` ile seed edilir. Ana gruplar: `App.Saas` , `App.Branches` , `App.Intranet.*` ,
`App.Definitions.*` , `App.Restrictions.*` , `App.Languages.*` , `App.Listforms.*` ,
`App.Notifications.*` , `App.BackgroundWorkers.*` , `App.Menus.*` , `App.DeveloperKit.*` ,
`App.Orders.*` , `App.BlogManagement.*` , `App.IdentityManagement.*` , `App.Reports.*` ,
`App.Administration` , `App.Setting` , `App.Setup.Migrate` .
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
> **Kural:** Yetki sözleşmesi olmayan menü/route önerilmez ve eklenmez.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 10. Modül Kataloğu
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 10.1. Backend modülleri (`api/modules`)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Modül | Kapsam |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| **Sozsoft.Languages** | Dil tanı mları , dil anahtarları , çeviri metinleri; tenant bazlı lokalizasyon (`TenantLocalizationMiddleware`). |
| **Sozsoft.Settings** | Ayar tanı mları , sağlayı cı lar, şifreleme bayrakları ve ayar ekranı metadata'sı . |
| **Sozsoft.Notifications** | Bildirim tipleri, kuralları ve kullanı cı bildirimleri; kanal bazlı yönlendirme. |
| **Sozsoft.MailQueue** | Şablon (Scriban) tabanlı gövde üretimi, ek dosya yaşam döngüsü, kuyruk çalı ştı rma ve günlükleme. |
| **Sozsoft.Sender** | Amazon SES (mail), Posta Güvercini (SMS), WhatsApp Cloud API, Rocket.Chat göndericileri. |
| **Sozsoft.SqlQueryManager** | SQL nesne yönetimi, sorgu çalı ştı rma, tablo/kolon metadata'sı . |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 10.2. Uygulama servisleri (`api/src/Sozsoft.Platform.Application`)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`AiBots` · `AuditLogs` · `BackgroundWorker` · `Blog` · `Branch` · `Dashboard` · `DataSource` ·
`DeveloperKit` · `FileManagement` · `Forum` · `GlobalSearch` · `Hr` · `Identity` · `Intranet` ·
`ListForms` (+ `Administration` ) · `Menu` · `Messenger` · `Note` · `OrgChart` ·
`OrganizationUnits` · `Public` · `Routes` · `Tenants` · `Videoroom`
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 10.3. Yönetim ekranları (UI)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Alan | Route | Açı klama |
2026-06-09 12:54:05 +00:00
| --- | --- | --- |
2026-08-10 09:08:08 +00:00
| Dashboard | `/admin/dashboard` | Widget tabanlı özet ekran. |
| Kullanı cı / Rol | `/admin/list/...` , `/admin/users/detail/:userId` | Kullanı cı , rol ve permission atamaları . |
| Organizasyon birimleri | `/admin/ous` | OU ağacı ve üyelik yönetimi. |
| Tenant yönetimi | ListForm ekranları | Tenant kayı tları , bağlantı dizeleri, siparişten otomatik tenant açma. |
| Ayarlar | `/admin/settings` | Sistem ve entegrasyon ayarları . |
| Menü yöneticisi | `/admin/menuManager` | Menü ağacı düzenleme. |
| Dosya yöneticisi | `/admin/files` | Klasör/dosya işlemleri. |
| Aktivite ve denetim kaydı | `/admin/activityLog` , `/admin/changeLog` | Kullanı cı hareketleri ve ABP audit log detayı . |
| Bildirimler | `/admin/profile/notification-settings` , bildirim ekranları | Kanal tercihleri ve bildirim oluşturma. |
| Forum | `/admin/forum` , `/admin/forumManagement` | Forum kullanı mı ve yönetimi. |
| Intranet | Intranet dashboard ve widget'ları | Duyuru, anket, sosyal duvar, etkinlik. |
| Video oda | `/admin/videoroom/*` | Oda listesi, detay, planlama, katı lı mcı ve ekran paylaşı mı . |
| Raporlar | `/admin/reports/:report/view|design/...` | DevExpress rapor görüntüleyici ve tasarı mcı . |
| AI asistanı | `/admin/ai` | n8n webhook üzerinden sohbet arayüzü. |
| Profil | `/admin/profile/*` | Genel bilgiler, şifre, bildirim ayarları . |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 10.4. Public site
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`/home` · `/about` · `/services` · `/products` · `/checkout` · `/payment` · `/success` ·
`/blog` · `/blog/:id` · `/demo` · `/contact` — içerikler veritabanı ndan yönetilir;
`/about/designer` ve `/services/designer` sayfa tasarı mcı ları dı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 11. Kimlik, Oturum ve Güvenlik
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 11.1. Kimlik doğrulama
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **OpenIddict** password + refresh token akı şı . Token uç noktası : `POST /connect/token`
(`grant_type=password`, `client_id=Platform_PublicApi` , `scope=offline_access Platform` ).
- Token ömürleri `OpenIddict:TokenLifetimes` ile yapı landı rı lı r (varsayı lan 60 dk access, 90 dk refresh).
- Swagger için ayrı istemci: `AuthServer:SwaggerClientId` .
- İki aşamalı doğrulama (2FA) ve hesap doğrulama (e-posta/telefon) desteklenir.
- Kayı t ve iletişim formları nda Cloudflare Turnstile tabanlı captcha (`CaptchaMiddleware`).
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 11.2. Oturum yönetimi
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- `PlatformSessionValidationMiddleware` her istekte oturumun hâlâ geçerli olduğunu doğrular.
- `PlatformSessionRevocationHandler` token iptalinde oturumu sonlandı rı r.
- `PlatformSessionCleanupWorker` süresi dolmuş oturumları temizler.
- Eş zamanlı kullanı cı limiti aşı ldı ğı nda giriş reddedilir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 11.3. Giriş engelleri
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`UserCannotSignInErrors` altı nda tanı mlı , kullanı cı ya lokalize mesajla dönen durumlar:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Kod | Anlamı |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `LoginNotAllowed_NotVerified` | Hesap doğrulanmamı ş. |
| `LoginNotAllowed_NotAllowedIp` | IP kı sı tlaması (`IpRestriction`). |
| `LoginNotAllowed_WorkHour` | Çalı şma saati kı sı tlaması (`WorkHour`). |
| `LoginNotAllowed_LoginEndDateDue` | Kullanı cı nı n giriş yetki süresi dolmuş. |
| `ShouldChangePasswordOnNextLogin` / `ShouldChangePasswordPeriodic` | Zorunlu şifre değişimi. |
| `LoginNotAllowed_TenantIsPassive` / `TenantNotFound` | Tenant pasif veya bulunamadı . |
| `LoginNotAllowed_BranchLimit` | Şube lisans limiti aşı ldı . |
| `LoginNotAllowed_ConcurrentUserLimit` | Eş zamanlı kullanı cı limiti aşı ldı . |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 11.4. Güvenlik kuralları
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- Tüm katmanlarda RBAC ve yetki tabanlı görünürlük zorunludur.
- Dinamik SQL'de **yalnı zca parametreli** desenler kullanı lı r; kullanı cı girdisi string birleştirme ile sorguya eklenmez.
- Her sorgu ve eylemde tenant izolasyonu korunur (`IsTenant`, `IsBranch` , `IsOrganizationUnit` bayrakları ve ABP tenant filtreleri).
- Gerçek kimlik bilgileri, token ve anahtarlar örneklerde/dokümanda yer almaz; yer tutucu kullanı lı r.
- Denetim: kritik işlemler ABP Audit Log'a yazı lı r; yüksek frekanslı `list-form-customization` çağrı ları denetim dı şı bı rakı lmı ştı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 12. Çok Kiracı lı lı k (Multi-Tenancy)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- `PlatformConsts.IsMultiTenant = true` .
- Tenant çözümleme host adı (subdomain) ve ABP tenant resolver'ları ile yapı lı r (`utils/subdomain.ts`).
- **Tenant başı na ayrı veritabanı :** `TenantConnectionString` kayı tları ile her tenant kendi
veritabanı na yönlendirilebilir; migration'lar `DatabaseMigrationEventHandlerBase` üzerinden
tenant oluşturulduğunda otomatik uygulanı r.
- **Şube (Branch):** Tenant altı ndaki fiziksel/örgütsel kı rı lı m; kullanı cı – şube eşlemesi
`BranchUsers` ile tutulur, lisans limiti girişte kontrol edilir.
- **Organizasyon birimi:** ABP `OrganizationUnit` ağacı ; ListForm'lar OU bazlı filtrelenebilir.
- Tenant bazlı lokalizasyon: `TenantLocalizationInitializer` + `TenantLocalizationMiddleware` .
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 13. Bildirim ve Entegrasyonlar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 13.1. Kanallar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`Sms` · `Mail` · `Rocket` · `Desktop` · `UiActivity` · `UiToast` · `WhatsApp` (`Telegram` altyapı da tanı mlı , UI'da kapalı )
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 13.2. Yönlendirme modeli
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Bildirim **tip + kanal** eşleşmesiyle yönlendirilir. Alı cı hedefleme seçenekleri:
`All` , `User` , `Role` , `OrganizationUnit` , `Custom` . Kullanı cı lar kendi bildirim tercihlerini
`/admin/profile/notification-settings` üzerinden kanal bazı nda yönetir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 13.3. Göndericiler (`Sozsoft.Sender`)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Kanal | Sağlayı cı |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| E-posta | ABP Emailing + Amazon SES (`AmazonSesEmailSender`), arka plan iş kuyruğu ile |
| SMS | Posta Güvercini HTTP API |
| WhatsApp | WhatsApp Cloud API (şablon tabanlı ) |
| Rocket.Chat | Rocket.Chat HTTP API |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Tüm sağlayı cı kimlik bilgileri ayar ekranı ndan yönetilir (`App.Settings.*` anahtarları );
koda gömülmez.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 13.4. Mail kuyruğu
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`Sozsoft.MailQueue` ; şablondan gövde üretir, PDF/XLS/TXT çı ktı ları ve ek dosyaları yönetir,
kuyruğu arka plan işçisiyle çalı ştı rı r ve sonuçları günlükler.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 13.5. AI entegrasyonu
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`AiBot` kayı tları tenant bazlı dı r; n8n webhook üzerinden LangChain ajanı + bellek penceresi ve
Gemini sohbet modeli bağlanı r (`configs/ai/Chat.json`). UI tarafı nda `/admin/ai` ve header'daki
asistan bileşeni bu uç noktayı kullanı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 14. Arka Plan İşleri
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
İki motor birlikte kullanı lı r: **Hangfire** (kalı cı iş deposu, `default` ve `platform` kuyrukları )
ve **ABP Background Workers** (yinelenen işler). Yönetim `/admin` altı ndaki Background Worker
ekranları ndan yapı lı r; yetkiler `App.BackgroundWorkers.RecurringJobs` ve `.Jobs` .
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Worker tipi | İşlevi |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `MailQueueWorker` | Mail kuyruğunu işler. |
| `SqlWorker` | Zamanlanmı ş SQL çalı ştı rı r. |
| `NotificationWorker` | Bildirim kuralları nı değerlendirir ve gönderir. |
| `SessionCleanupWorker` | Süresi dolmuş oturumları temizler. |
| `BackupWorker` | Veritabanı yedeği alı r ve eski yedekleri temizler. |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Hangfire panosu geliştirmede serbest, üretimde `AbpHangfireAuthorizationFilter` ile korumalı dı r
(`/hangfire`).
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 15. Raporlama
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **DevExpress Reporting**: Web Document Viewer (`/admin/reports/:report/view/...`) ve
Report Designer (`/admin/reports/:report/design/...`).
- **Rapor deposu**: `ReportTemplate` ve `ReportCategory` varlı kları ; `CustomReportStorageWebExtension`
ile veritabanı üzerinden okuma/yazma.
- **Dinamik raporlar** (`HttpApi.Host/PredefinedReports`): ListForm tanı mı ndan otomatik üretilen
grid, form ve ağaç raporları — grid durumunu (sütun sı rası , gruplama, filtre) rapora yansı tı r.
- Linux konteynerlerde font sorunları nı önlemek için `DevExpressFontConfiguration` devrededir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 16. Dosya Yönetimi ve CDN
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- ABP BlobStoring, dosya sistemi sağlayı cı sı yla `App:CdnPath` altı na yazar; dosyalar `App:CdnUrl`
üzerinden servis edilir.
- `FileManagementAppService` : listeleme, yükleme, indirme, kopyalama, taşı ma, yeniden adlandı rma, silme.
- UI: `/admin/files` (`views/admin/files/FileManager.tsx`) — breadcrumb, çoklu yükleme, önizleme.
- Avatar, aktivite görselleri, içe aktarma dosyaları ve veritabanı yedekleri ayrı konteynerlerde tutulur.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 17. Gerçek Zamanlı Özellikler
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **Messenger**: SignalR hub'ı `/messengerhub` . Konuşma ve mesaj varlı kları veritabanı nda;
Redis etkinse backplane olarak kullanı lı r. Query string ile gelen `access_token` ,
hub bağlantı sı için `Authorization` başlı ğı na çevrilir.
- **Video oda**: Oda oluşturma/başlatma/bitirme, katı lı mcı yönetimi, sohbet, doküman ve ekran
paylaşı mı panelleri; TURN sunucusu `configs/deployment/configs/turnserver.conf` ile yapı landı rı lı r.
- **Global arama**: `GlobalSearchAppService` üzerinden çapraz modül arama.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 18. Frontend Mimarisi
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 18.1. Route ve bileşen çözümü
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
```
Route kayı tları (DB)
├─ componentPath ──► fiziksel view (React.lazy)
└─ CustomComponent ──► @babel/standalone ile runtime derleme ──► ComponentContext
│
DynamicRouter ──► ProtectedRoute ──► PermissionGuard ──► PageContainer
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`ROUTES_ENUM` (`src/routes/route.constant.ts`) statik yol sözleşmelerini tutar; iş modülleri için
(`supplychain`, `maintenance` , `warehouse` , `projects` , `hr` , `crm` , `mrp` , `accounting` ) ayrı lmı ş
yol desenleri de buradadı r. Bu alanları n ekranları , fiziksel React sayfaları yerine ListForm
konfigürasyonu ile üretilir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 18.2. Durum yönetimi
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- **easy-peasy** global store: `auth` , `theme` , `locale` , `abpConfig` , `admin` , `client` , `base` .
Oturum ve tercih verileri `localStorage` yerine store üzerinden yönetilir (`stateSync.ts`).
- **React Query**: sunucu verisi önbellekleme.
- **Context'ler**: `ComponentContext` (runtime bileşen kaydı ), `DialogContext` , `ScrollContext` .
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 18.3. Tema ve lokalizasyon
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- Tailwind tabanlı tasarı m sistemi (`components/ui`) + DevExtreme temaları ; açı k/koyu mod ve
tema yapı landı rı cı (`ThemeConfigurator`).
- Dil metinleri veritabanı ndan gelir (`Sozsoft.Languages`); dil seçici header'dadı r.
Tenant bazlı çeviri geçersiz kı lma desteklenir.
- Layout seçenekleri: dikey menü, yatay menü, yı ğı lmı ş yan menü, mobil navigasyon.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 18.4. PWA ve sürüm yönetimi
2026-06-09 12:54:05 +00:00
2026-08-12 19:08:14 +00:00
- Kurulum iki kademelidir: **kabuk** (index.html + entry JS/CSS + eager vendor chunk'ları )
workbox precache manifest'inden gelir ve zorunludur; **bileşenler** (tüm lazy chunk'lar,
build'de üretilen `dist/warmup.json` ) güncelleme penceresinde aynı ilerleme çubuğunda arka
planda indirilir. İkinci kademe best-effort'tur (inemeyen dosya kurulumu düşürmez, süre
bütçesi aşı lı rsa kalanlar runtime cache'e kalı r); böylece deploy sonrası ilk gezinmede chunk
beklenmez ama yavaş bağlantı da kurulum timeout'a düşmez. DevExtreme temaları (~33 MB), font
ve görseller runtime cache'tedir.
- `registerType: 'prompt'` — yeni sürüm indirilir, indirme bitince otomatik devreye alı nı r
(`views/version/swRegistration.ts`, `sw.ts` , `AppUpdateDialog.tsx` ).
2026-08-10 09:08:08 +00:00
- `version.json` her zaman ağdan tazelenir (NetworkFirst); changelog `/admin/changeLog`
2026-08-12 19:08:14 +00:00
ekranı nda gösterilir, yeni deploy sonrası ilk girişte oraya yönlendirilir.
2026-08-10 09:08:08 +00:00
- `scripts/generate-version.js` build sı rası nda sürüm bilgisini üretir.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 19. API ve Swagger
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- Swagger UI, API kökünde yayı nlanı r; OAuth2 ile "Authorize" düğmesi üzerinden token alı nabilir.
- Endpoint'ler ABP **conventional controller** mekanizması yla uygulama servislerinden üretilir:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Namespace | Kök yol |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `Sozsoft.Platform.ListForms.Administration` | `/api/admin/...` |
| Diğer `Sozsoft.Platform.*` servisleri | `/api/app/...` |
| Modül servisleri (Languages, Settings, MailQueue, Notifications, SqlQueryManager) | Modül kendi kök yolunu kullanı r |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- DevExpress raporlama controller'ları (`CustomReportDesigner`, `CustomWebDocumentViewer` ,
`QueryBuilder` ) Swagger dokümanı ndan hariç tutulur.
- Yanı tlar Brotli/Gzip ile sı kı ştı rı lı r; `X-Correlation-Id` başlı ğı istemciye açı lı r.
- Hata kodları : `PlatformConsts.AppErrorCodes` (`Error:0001` yetkisiz, `App.NoResults` kayı t yok,
`Error:0003` parametre geçersiz, `Error:0005` iç hata).
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
**Token örneği** (yer tutucularla):
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
```http
POST /connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
grant_type=password
& username=< KULLANICI >
& password=< PAROLA >
& client_id=Platform_PublicApi
& scope=offline_access%20Platform
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 20. Dağı tı m (Deployment)
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
`configs/deployment` altı nda üç ortam için compose dosyaları ve numaralandı rı lmı ş scriptler bulunur.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Dosya | Amaç |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `docker-compose-data.yml` | Redis, SQL Server / PostgreSQL, yedek volume'ları |
| `docker-compose-app.yml` / `.dev.yml` / `.production.yml` | API, UI, migrator, nginx |
| `docker-compose-devops.yml` | Forgejo + runner (CI/CD) |
| `Dockerfile` , `api/*.Dockerfile` , `ui/Sozsoft.Platform.Ui.Dockerfile` | İmaj tanı mları |
| `configs/nginx.conf` , `redis.conf` , `turnserver.conf` , `elasticsearch.yml` | Servis yapı landı rmaları |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Script sı rası (`configs/deployment/scripts`):
```
1-devops.sh → DevOps makinesi (Forgejo, runner)
2-data-postgres.sh /
3-data-sql.sh → Veri katmanı
4-production-build.sh → İmaj build
5-production-deploy.sh → Yayı n
6-production-migrator-true.sh → Migration çalı ştı rma
7-setup_ssl.sh → Sertifika
8-dev-build.sh / 9-dev-deploy.sh / 10-dev-migrator-true.sh → Dev ortamı
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Ayrı ntı lı kurulum notları : [`configs/deployment/README.md` ](configs/deployment/README.md ),
[`Readme_Production.md` ](configs/deployment/Readme_Production.md ),
[`Readme_Devops.md` ](configs/deployment/Readme_Devops.md ).
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
> Bu dokümanlarda geçmişte örnek amaçlı bı rakı lmı ş kimlik bilgileri bulunabilir; üretimde
> tümü döndürülmeli ve secret yöneticisine taşı nmalı dı r.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 21. Geliştirme Standartları ve Sı k Kullanı lan Komutlar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 21.1. Çözüm kuralları
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
1. Her istek şu sı rayla değerlendirilir: ** (1)** ListForm konfigürasyonu → ** (2)** SQL Query
Manager + Custom Endpoint → ** (3)** Dynamic Service → ** (4)** kod değişikliği (son çare,
gerekçe zorunlu).
2. Standart iş ihtiyaçları için yeni özel React sayfası /bileşeni geliştirilmez.
3. Her öneri tenant ve yetki tasarı mı nı içerir.
4. Platform yetkilendirme desenleri atlanmaz.
5. Secret, tenant id veya bağlantı dizesi koda gömülmez.
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 21.2. Frontend
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
```powershell
cd ui
npm start # geliştirme sunucusu
npm run build # üretim derlemesi (metadata + version + vite build)
npm run lint # ESLint
npm run format # prettier --write + eslint --fix
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 21.3. Backend
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
```powershell
cd api
dotnet build
dotnet run --project src/Sozsoft.Platform.HttpApi.Host
dotnet format --include .\modules\Sozsoft.Notifications\ --folder
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
# Migration (EntityFrameworkCore projesi içinde)
dotnet ef migrations add < Ad >
dotnet ef database update
dotnet ef migrations remove
```
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Yeni ABP modülü eklemek için:
`abp new Sozsoft.<Modul> -t module --no-ui -m none --database-provider ef`
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
### 21.4. Seed dosyaları
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Yeni bir modülün nası l kurulacağı nı öğrenmek için başvurulacak dosyalar:
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- `api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs`
2026-08-12 12:20:00 +00:00
- `.../Migrations/ListFormSeeder_Administration.cs`
- `.../Migrations/MenusData.json`
- `.../Migrations/PermissionsData.json`
- `.../Migrations/HostData.json`
- `.../Migrations/LanguagesData.json`
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 22. Sorun Giderme
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
| Belirti | Olası neden ve çözüm |
2026-06-09 12:54:05 +00:00
| --- | --- |
2026-08-10 09:08:08 +00:00
| `/api/abp/application-configuration` 503 dönüyor | Veritabanı na erişilemiyor. Bağlantı dizesini ve veri konteynerini kontrol edin; `/api/setup/application-status` ile durumu görün. |
| UI `/setup` ekranı na düşüyor | Şema oluşmamı ş veya bekleyen migration var. Setup ekranı ndan migration'ı tetikleyin ya da DbMigrator'ı çalı ştı rı n. |
| Giriş "UserCannotSignIn..." hatası veriyor | [11.3 ](#113-giriş-engelleri ) tablosuna bakı n: IP, çalı şma saati, doğrulama, şube/eş zamanlı kullanı cı limiti. |
| Yeni sürüm tarayı cı da görünmüyor | Service worker `prompt` modundadı r; güncelleme bildirimini onaylayı n veya sekmeyi tamamen kapatı p açı n. |
| DevExtreme teması yüklenmiyor | `public/css` altı ndaki tema dosyaları runtime cache'tedir (StaleWhileRevalidate); hard refresh yeterlidir. |
| Hangfire başlangı çta hata veriyor | Bağlantı dizesi boşsa Hangfire kaydı atlanı r ama ABP modülleri yüklenir. Bağlantı dizesini doğrulayı n. |
| Dinamik servis yayı nlanmı yor | Önce `TestCompile` çalı ştı rı n; derleme hatası mesajı UI'da döner. `Publish` için ilgili yetki gerekir. |
| Raporlarda font/karakter bozukluğu (Linux) | `DevExpressFontConfiguration.InstallLinuxFonts` logları nı kontrol edin; konteynerde font paketi eksik olabilir. |
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
---
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
## 23. Bilinen Sı nı rlar ve Notlar
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
- `route.constant.ts` içindeki `supplychain` , `maintenance` , `warehouse` , `projects` , `crm` ,
`mrp` , `accounting` ve `hr` yol sabitleri **yol sözleşmesidir** ; bu alanları n ekranları fiziksel
React sayfaları olarak değil, ListForm konfigürasyonu ile üretilir. `hr` altı nda yalnı zca
organizasyon şeması (`OrgChart.tsx`) fiziksel bir view'dı r.
- `Telegram` bildirim kanalı altyapı da tanı mlı dı r ancak UI'da kapalı dı r.
- Depodaki `appsettings*.json` ve deployment dokümanları geliştirme değerleri/örnek kimlik
bilgileri içerir; üretim öncesi tümü değiştirilmelidir.
- `.github/instructions/ai.instructions.md` içinde stack ".NET 9 + ABP 9" olarak yazı lı dı r;
kod tabanı ** .NET 10 + ABP 10** üzerindedir. Kural bölümleri geçerliliğini korur.
- Rol– yetki eşleşmeleri veritabanı nda müşteri ortamı na göre değişir; buradaki yetki kodları
tanı mı n kendisidir, atama değil.
---
## Lisans ve Sahiplik
2026-06-09 12:54:05 +00:00
2026-08-10 09:08:08 +00:00
Bu depo Sozsoft'a aittir. DevExpress/DevExtreme bileşenleri ticari lisans gerektirir
(`api/DevExpress_License.txt`).