131 lines
9.2 KiB
Markdown
131 lines
9.2 KiB
Markdown
|
|
# Saas (`App.Saas`)
|
|||
|
|
|
|||
|
|
> Bu modülün ekranları wizard ile değil C# seeder (`ListFormSeeder_Saas`) ve `data/*.json` dosyalarıyla kurulur; bu yüzden dosya ve bölümler deploy tarafından değil elle yazılır (`lowcode.instructions.md` §0.13, "wizard dışı modülün bölümü elle yazılır"). Ekran sözleşmeleri alan alan `lowcode-reference.instructions.md` §12'de, çalışma şekli `README.md`'nin anılan bölümlerindedir; burada her dal için amaç, ekran listesi ve gerçeğin yaşadığı yer tutulur. Menü ağacı `data/App.Menus.Menu.json`, yetkiler `data/Abp.Identity.Permissions.json` (`Modules = Sas`, yalnızca host bağlamında görünür).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.Saas.Definitions -->
|
|||
|
|
## Tanımlamalar (`App.Saas.Definitions`)
|
|||
|
|
|
|||
|
|
### 1. Amaç ve kapsam
|
|||
|
|
|
|||
|
|
Bütün kiracıların ortak kullandığı host tanımları: AI botları, genel arama kaynakları, hitaplar, para birimleri, ülke grubu › ülke › şehir › ilçe zinciri, menü modülleri ve uygulama paketleri. Satırlar seed dosyasından gelir ve host yöneticisi tarafından düzenlenir; kiracı ekranları bu tanımları lookup olarak okur.
|
|||
|
|
|
|||
|
|
### 2. Menü ve ekranlar
|
|||
|
|
|
|||
|
|
| Sıra | Ekran | Kod | Seed verisi |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| 1 | AI Botları | `App.Definitions.AiBot` | `data/App.Definitions.AiBot.json` (README §13.8) |
|
|||
|
|
| 2 | Genel Arama | `App.Definitions.GlobalSearch` | `data/App.Definitions.GlobalSearch.json` |
|
|||
|
|
| 3 | Hitaplar | `App.Definitions.ContactTitle` | `data/App.Definitions.ContactTitle.json` |
|
|||
|
|
| 4 | Para Birimleri | `App.Definitions.Currency` | `data/App.Definitions.Currency.json` |
|
|||
|
|
| 5 | Ülke Grupları | `App.Definitions.CountryGroup` | `data/App.Definitions.CountryGroup.json` |
|
|||
|
|
| 6 | Ülkeler | `App.Definitions.Country` | `data/App.Definitions.Country.json` |
|
|||
|
|
| 7 | Şehirler | `App.Definitions.City` | `data/App.Definitions.City.json` |
|
|||
|
|
| 8 | İlçeler | `App.Definitions.District` | `data/App.Definitions.District.json` |
|
|||
|
|
| 9 | Modüller | `App.Menus.Module` | `data/App.Menus.Module.json` (README §9) |
|
|||
|
|
| 10 | Uygulama Paketleri | `App.Definitions.ApplicationSuite` | `data/App.Definitions.ApplicationSuite.json` |
|
|||
|
|
|
|||
|
|
### 3. Veri modeli ve kurallar
|
|||
|
|
|
|||
|
|
- Tablolar `Sas_H_*` (host; `TableNameResolver`, `TableNameEnum`). Ülke grubu › ülke › şehir › ilçe dosyaları `Order` alanıyla bağımlılık sırasında uygulanır (CLAUDE.md "Menü ağacı ve yetkiler").
|
|||
|
|
- Para birimi lookup'ının anahtarı `Name`'dir (`'TRY'` gibi); ekranlardaki `*CurrencyId` varsayılanı tablo `DEFAULT`'undan gelir (standing default 18).
|
|||
|
|
- Adres zinciri (Ülke › Şehir › İlçe › Mahalle) Kiracılar ve Kontaklar ekranlarında `CascadeParentFields` ile kullanılır (`lowcode-reference.instructions.md` §12).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.Public -->
|
|||
|
|
## Public Site Yönetimi (`App.Public`)
|
|||
|
|
|
|||
|
|
### 1. Amaç ve kapsam
|
|||
|
|
|
|||
|
|
Ziyaretçiye açık sitenin arkasındaki yönetim ekranları: ürün/ödeme/taksit tanımları ve satış siparişleri (sepet akışı), blog kategorileri ve yazıları, demo talepleri. Sitenin sayfaları Custom Component, menüsü `Pub` modülüdür (README §10.4); buradaki ekranlar onların verisini yönetir.
|
|||
|
|
|
|||
|
|
### 2. Menü ve ekranlar
|
|||
|
|
|
|||
|
|
| Sıra | Ekran | Kod | Not |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| 1 | Ürünler | `App.Orders.Products` | sepet/ödeme akışının ürün kataloğu |
|
|||
|
|
| 2 | Ödeme Yöntemleri | `App.Orders.PaymentMethods` | |
|
|||
|
|
| 3 | Taksit Seçenekleri | `App.Orders.InstallmentOptions` | |
|
|||
|
|
| 4 | Satış Siparişleri | `App.Orders.SalesOrders` | sipariş e-postası `PublicAppService` üretir; tarih/tutar `CultureFormat` ile aktif kültürde |
|
|||
|
|
| 5 | Blog Kategorileri | `App.BlogManagement.Category` | sitemap'e giren yayın kaynağı (`SeoAppService`) |
|
|||
|
|
| 6 | Blog Yazıları | `App.BlogManagement.Posts` | yayın tarihi `BlogPost.Publish(Clock.Now)` |
|
|||
|
|
| 7 | Demo Talepleri | `App.Demos` | public demo formunun kayıtları |
|
|||
|
|
|
|||
|
|
<!-- module-doc:section AbpTenantManagement.Tenants -->
|
|||
|
|
## Kiracılar (`AbpTenantManagement.Tenants`) ve Şubeler (`App.Branches`)
|
|||
|
|
|
|||
|
|
### 1. Amaç ve kapsam
|
|||
|
|
|
|||
|
|
Kiracı kaydı (ABP TenantManagement; kendi veritabanı ya da host veritabanı paylaşımı), kiracı yöneticisinin ilk seed'i ve şube tanımı. Çalışma şekli README §12 (Çok Kiracılılık); seed kapsamı CLAUDE.md "Seed kapsamı" (`SeedFileScope`). Şube ekranı kullanıcıya atanmış aktif şubelerin kaynağıdır (`Sas_T_BranchUsers`, `LookupQueryValues.UserBranchValues`; standing default 1).
|
|||
|
|
|
|||
|
|
| Ekran | Kod | Not |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| Kiracılar | `AbpTenantManagement.Tenants` | ABP yerleşik yetkileri (`ManageConnectionStrings`, `ManageFeatures`) |
|
|||
|
|
| Şubeler | `App.Branches` | `Sas_T_Branch`; host şubesi `PlatformConsts.Branches.BranchIdDefaultValue` |
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.SettingDefinitions -->
|
|||
|
|
## Ayar Tanımları (`App.SettingDefinitions`)
|
|||
|
|
|
|||
|
|
Uygulama ayarlarının tanım listesi (`data/App.SettingDefinitions.json`, `Sozsoft.Settings` modülü); değerler Ayarlar ekranından host/kiracı/kullanıcı düzeyinde yazılır. Ayar anahtarları ve anlamları README §6.3 ve `lowcode-reference.instructions.md`'de; SEO varsayılanları `App.SiteManagement.Seo.*` (CLAUDE.md "SEO").
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.Languages -->
|
|||
|
|
## Diller (`App.Languages`)
|
|||
|
|
|
|||
|
|
| Ekran | Kod | Seed verisi |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| Diller | `App.Languages.Language` | `data/App.Languages.Language.json` |
|
|||
|
|
| Dil Metinleri | `App.Languages.LanguageText` | `data/App.Languages.LanguageText.json` (EN + TR, `Id` = `Sas_H_LanguageText:{ResourceName}:{Key}:{CultureName}` v5 GUID) |
|
|||
|
|
|
|||
|
|
Kullanıcıya görünen her metin dil anahtarıyla gelir (standing default 4); UI çevirisi `useLocalization`/`translateStatic`, API çevirisi `IStringLocalizer<PlatformResource>`. Tarih/sayı biçimi aktif kültürü izler (`localeFormat.ts`, `CultureFormat`; README §18.3).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.DataSource -->
|
|||
|
|
## Veri Kaynakları (`App.DataSource`)
|
|||
|
|
|
|||
|
|
Ekranların bağlandığı bağlantı kayıtları (`DataSourceManager`); kiracı tablosunun satırları kiracı adıyla kayıtlı `DataSource` üzerinden gider (CLAUDE.md "Seed kapsamı"). Varsayılan veri kaynağını `HostDataSeeder` appsettings'teki bağlantı cümlesinden kurar. İki sağlayıcı (SQL Server / PostgreSQL) `DataSourceTypeEnum` ile ayrılır; SQL metinleri ANSI tırnaklı ya da sağlayıcıya göre dallanır (standing default 16).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.BackgroundWorkers -->
|
|||
|
|
## Arka Plan İşleri (`App.BackgroundWorkers`)
|
|||
|
|
|
|||
|
|
| Ekran | Kod | Not |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| Zamanlanmış İşler | `App.BackgroundWorkers.RecurringJobs` | `data/App.BackgroundWorkers.RecurringJobs.json`; `Scope` = Host / Tenant / Host ve Kiracılar (`WorkerScopeEnum`) |
|
|||
|
|
| İşler | `App.BackgroundWorkers.Jobs` | Hangfire kuyruğu |
|
|||
|
|
|
|||
|
|
Çalışma şekli README §14; `BeforeSp`/`AfterSp` yordam adları `SqlIdentifier.IsSafe` ile doğrulanıp sağlayıcıya göre `EXEC`/`CALL` ile çağrılır (`SpRepository`). Mail kuyruğu işi (`MailQueueWorker`) şablonunu `Options.MailTemplate` alanından `PlatformTemplateDynamicStore` ile okur (README §13.7, `lowcode-reference.instructions.md` §11).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.Menus -->
|
|||
|
|
## Menüler (`App.Menus`)
|
|||
|
|
|
|||
|
|
| Ekran | Kod | Seed verisi |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| Rotalar | `App.Menus.Routes` | `data/App.Menus.Routes.json` (yalnızca `Seo*` alanları çerçeve içinde düzenlenir) |
|
|||
|
|
| Menü | `App.Menus.Menu` | `data/App.Menus.Menu.json` |
|
|||
|
|
| Menü Yöneticisi | `App.Menus.Manager` | `/admin/menuManager` (çekirdek sayfa) |
|
|||
|
|
|
|||
|
|
Menü/route/yetki modeli README §9; yetki ağacı menü ağacını izler (standing default 2).
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.DeveloperKit -->
|
|||
|
|
## Developer Kit (`App.DeveloperKit`)
|
|||
|
|
|
|||
|
|
| Ekran | Kod | Not |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| Geliştirme Talepleri | `App.DevRequests` | MCP talep döngüsü (CLAUDE.md "Talep analizi"); `data/App.DevRequests/` klasör modu |
|
|||
|
|
| SQL Query Manager | `App.SqlQueryManager` | `/admin/sqlQueryManager`; tablo tasarımcısı iki sağlayıcının scriptini üretir (`PostgreSqlTableScript`) |
|
|||
|
|
| Dosyalar | `App.Files` | `/admin/files` (README §16) |
|
|||
|
|
| Custom Endpoint'ler | `App.DeveloperKit.CustomEndpoints` | `crud/{Entity}.json` (`CrudEndpointSeedApplier`) |
|
|||
|
|
| Dynamic Service'ler | `App.DeveloperKit.DynamicServices` | runtime derleme (`DynamicAssemblyRegistrationService`) |
|
|||
|
|
| Custom Component'ler | `App.DeveloperKit.CustomComponents` | `data/App.DeveloperKit.CustomComponents/{Id}.json` (README §8.2) |
|
|||
|
|
| ListForm'lar | `App.Listforms.Listform` | ekran tanımları; kayıt wizard seed dosyasına geri yazılır (`WizardSeedSynchronizer`) |
|
|||
|
|
| Intranet Widget'ları | `App.DeveloperKit.IntranetWidgets` | `data/App.DeveloperKit.IntranetWidgets.json` |
|
|||
|
|
| MCP Sunucuları | `App.DeveloperKit.McpServers` | `AllowedTools` (README §13.9) |
|
|||
|
|
| Wizard Manager | `App.Listforms.WizardManager` | `/admin/listform/wizardManager`; deploy yalnızca seed dosyası yazar, kurulum DB Migrate'tedir (`lowcode.instructions.md` §4.0) |
|
|||
|
|
|
|||
|
|
<!-- module-doc:section App.ForumManagement -->
|
|||
|
|
## Forum Yönetimi (`App.ForumManagement`)
|
|||
|
|
|
|||
|
|
| Ekran | Kod |
|
|||
|
|
| --- | --- |
|
|||
|
|
| Kategoriler | `App.ForumManagement.Categories` |
|
|||
|
|
| Konular | `App.ForumManagement.Topics` |
|
|||
|
|
| Gönderiler | `App.ForumManagement.Posts` |
|
|||
|
|
|
|||
|
|
Tablolar `Sas_T_Forum*` kiracı tablosudur (menü öneki ile tablo öneki örtüşmez; `lowcode-reference.instructions.md` "Tablo adlandırma"). Forum sayfaları kullanıcı tarafında `views/forum` altındadır.
|