6.3 KiB
6.3 KiB
Sozsoft Platform Module Implementation Rules & Instructions
Purpose
This document summarizes the rules, standards, and step-by-step instructions for implementing any module (e.g., CRM, MRP, HR) with a sample list (e.g., Opportunity, Order) in the Sozsoft Platform. Replace all placeholders (e.g., {Modul}, {Liste}, {Entity}) with your actual module, list, or entity names. Use as a reference for future development and as a prompt guide for similar tasks.
General Principles
- Configuration First: Always prefer platform configuration (menus, permissions, forms, localization) over custom code.
- Modularization: Each module (e.g., {Modul}) must have its own seeder, permission group, and localization entries.
- Naming Conventions:
- Table names:
{Modul}_T_{Entity}(e.g.,Mrp_T_Order) - Menu/permission keys:
App.{Modul},App.{Modul}.{Liste}
- Table names:
- Tenant Isolation: All data, forms, and permissions must be tenant-aware.
- Localization: Every menu, list, and field must have a corresponding entry in
LanguagesData.json. - No Redundant Code: Avoid duplicating permission grants or seeding logic across modules.
- SeedConsts Rule: For every new module/entity, add a constant to
SeedConsts(e.g.,public static class {Modul}andpublic const string {Liste}) if it does not already exist. Never duplicate existing constants. - DeleteCommand Rule: In all
ListFormSeeder_{Modul}.csfiles, theDeleteCommandproperty must use theDefaultDeleteCommandfunction, e.g.,DeleteCommand = DefaultDeleteCommand("{TabloAdı}"). Never use a raw SQL string directly forDeleteCommand.
Special File Handling Rules
-
MenusData.json:
- Never modify the
Routessection directly. OnlyMenuGroupsandMenussections can be changed for menu additions or updates. All menu additions must use the platform's configuration mechanisms or be added toMenuGroupsandMenusas required by platform design.
- Never modify the
-
LanguagesData.json:
- When adding a new key, always check if the key already exists. Only add the key if it does not exist to prevent duplicates.
File-by-File Change Summary
1. MenusData.json
- {Modul} menu added as a top-level menu with
ShortName: {Modul}. - {Liste} added as a child menu under {Modul}.
2. PermissionsData.json
- {Modul} permissions grouped under
App.{Modul}. - {Liste} permissions nested under {Modul} group.
3. ListFormSeeder_Administration.cs
- Removed {Liste} seeding logic (moved to {Modul} seeder).
4. ListFormSeeder_{Modul}.cs
- Created new seeder file for {Modul}.
- Seeds {Liste} list-form, referencing
{Modul}_T_{Entity}.
5. SqlTables.sql
- Renamed {Liste} table to
{Modul}_T_{Entity}. - Updated all related constraints and references.
6. PlatformIdentityDataSeeder.cs
- Removed redundant {Modul} permission grant logic (now handled by PermissionsData.json).
7. LanguagesData.json
- Added localization entries for:
- {Modul} menu and {Liste} list
- {Liste} list fields (e.g.,
FullName,Phone)
Step-by-Step Instructions (Prompt Examples)
1. Add a New Module (e.g., {Modul})
Yeni bir modül ekle (ör: {Modul}):
- MenusData.json'a kök menü olarak ekle
- PermissionsData.json'da ayrı bir PermissionGroup oluştur
- ListFormSeeder_{Modul}.cs dosyası oluştur ve list-form seed'ini buraya taşı
- SqlTables.sql'de tabloyu {Modul}_T_{Entity} olarak adlandır
- LanguagesData.json'a menü, liste ve alan çevirilerini ekle
2. Add a New List Under a Module
Yeni bir liste ekle (ör: {Liste}):
- {Modul} ana menüsünün altına ekle
- ListFormSeeder_{Modul}.cs dosyasına seed kodunu ekle
- SqlTables.sql'de tabloyu {Modul}_T_{Entity} olarak oluştur
- PermissionsData.json'da ilgili izinleri {Modul} grubuna ekle
- LanguagesData.json'a liste ve alan çevirilerini ekle
3. Enforce Tenant Isolation and Full Audit
Tablo ve list-form için tenant izolasyonu ve full-audit alanlarını ekle:
- Tabloya TenantId, CreationTime, CreatorId, LastModificationTime, LastModifierId, IsDeleted, DeleterId, DeletionTime alanlarını ekle
- List-form seed'inde tenant-aware ayarları kontrol et
4. Add/Update Localization
Yeni menü, liste veya alan eklediğinde LanguagesData.json'a şu şekilde ekle:
- App.{Modul}
- App.{Modul}.{Liste}
- App.Listform.ListformField.{Alan}
5. SeedConsts and DeleteCommand Rules
- SeedConsts.cs dosyasına, yeni modül veya entity için (ör: public static class {Modul} ve altında public const string {Liste}) sabit ekle. Eğer zaten varsa tekrar ekleme.
- ListFormSeeder_{Modul}.cs dosyalarında DeleteCommand satırı **her zaman** DefaultDeleteCommand fonksiyonu ile olmalı:
DeleteCommand = DefaultDeleteCommand("{TabloAdı}")
- DeleteCommand'da doğrudan SQL stringi **kullanma**.
5. Remove Redundant or Incorrect Code
- Farklı modüllerde aynı izin veya seed kodu varsa, sadece ilgili modülde bırak
- PlatformIdentityDataSeeder.cs'de Permission grant kodunu kaldır, PermissionsData.json'dan yönet
Validation Checklist
- Menü ve izinler doğru hiyerarşide mi?
- List-form seed'leri doğru modül dosyasında mı?
- Tablo isimleri ve referansları standartlara uygun mu? (örn: {Modul}T{Entity})
- LanguagesData.json'da tüm yeni menü, liste ve alanlar var mı?
- Redundant kod veya izin grant'ı var mı?
- Seed ve migration sonrası UI'da çeviriler doğru görünüyor mu?
- SeedConsts.cs dosyasında ilgili sabitler var mı, tekrar eklenmemiş mi?
- ListFormSeeder dosyalarında DeleteCommand satırı DefaultDeleteCommand fonksiyonu ile mi atanmış?
Rollback Strategy
- Değişiklikleri modül bazında geri al (örn: sadece {Modul} ile ilgili dosyaları revert et)
- JSON dosyalarında eski anahtarları ve çevirileri sil
- Seeder ve migration dosyalarını eski haline getir
Quick Prompts for Future Use
- "Yeni bir modül ekle ve tüm standartlara göre yapılandır."
- "Yeni bir liste ekle, tenant izolasyonu ve çevirileriyle birlikte."
- "Mevcut bir modülde eksik olan çeviri veya izinleri tamamla."
- "Tüm {Modul} ile ilgili seed ve izinleri modüler yapıya uygun şekilde güncelle."
Not: Tüm işlemlerden sonra seed'leri çalıştırıp UI'da menü ve çevirileri kontrol etmeyi unutma.