AI Instructions
This commit is contained in:
parent
cf6ded1105
commit
3baa7def61
4 changed files with 933 additions and 2 deletions
711
.github/instructions/ai.instructions.md
vendored
Normal file
711
.github/instructions/ai.instructions.md
vendored
Normal file
|
|
@ -0,0 +1,711 @@
|
|||
# Dynamic Low-Code Platform - AI Instruction and Operating Manual
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This document defines how AI should think, decide, and produce outputs for this platform.
|
||||
|
||||
Primary objective:
|
||||
|
||||
- Maximize delivery through runtime configuration.
|
||||
- Minimize custom code.
|
||||
- Preserve platform consistency, security, and tenant isolation.
|
||||
|
||||
Primary principle:
|
||||
|
||||
- Configuration first, code last.
|
||||
|
||||
---
|
||||
|
||||
## 2. Platform Scope
|
||||
|
||||
Core stack:
|
||||
|
||||
- Backend: C# .NET 9 + ABP 9.x
|
||||
- Frontend: React 18 + DevExtreme
|
||||
- Database: SQL Server (dynamic datasource support)
|
||||
- Cache: Redis
|
||||
- Background jobs: Hangfire + ABP Background Workers
|
||||
|
||||
System nature:
|
||||
|
||||
- Runtime configurable application engine
|
||||
- Multi-tenant SaaS foundation
|
||||
- Low-code / no-code first
|
||||
|
||||
---
|
||||
|
||||
## 3. Non-Negotiable Rules
|
||||
|
||||
1. Do not propose new custom React component/page development for standard feature requests.
|
||||
2. Build new screens using platform configuration mechanisms.
|
||||
3. Every proposal must include tenant and permission design.
|
||||
4. Never bypass platform authorization patterns.
|
||||
5. Never hardcode secrets, tenant ids, or connection strings.
|
||||
|
||||
Exception policy:
|
||||
|
||||
- Code-level React or backend development can be considered only if user explicitly requests code implementation and configuration path is insufficient.
|
||||
- If exception is required, AI must explain why configuration-based options are not enough.
|
||||
|
||||
---
|
||||
|
||||
## 4. Decision Flow (Mandatory)
|
||||
|
||||
For every request, apply this order:
|
||||
|
||||
1. Dynamic configuration with existing ListForm ecosystem
|
||||
2. SQL Query Manager + Custom Endpoint
|
||||
3. Dynamic Service
|
||||
4. Code change (last resort, justification required)
|
||||
|
||||
---
|
||||
|
||||
## 5. Architecture Guardrails
|
||||
|
||||
Backend (ABP):
|
||||
|
||||
- Respect modular boundaries.
|
||||
- Prefer application services over ad-hoc endpoints.
|
||||
- Keep permissions explicit and auditable.
|
||||
|
||||
Frontend (React + DevExtreme):
|
||||
|
||||
- Use existing dynamic view infrastructure.
|
||||
- Keep component behavior metadata-driven.
|
||||
- Preserve route, menu, and permission coherence.
|
||||
|
||||
Data:
|
||||
|
||||
- SQL-first for shaping, filtering, aggregation, reporting.
|
||||
- Parameterized query patterns only.
|
||||
- Ensure tenant-safe data access.
|
||||
|
||||
---
|
||||
|
||||
## 6. Dynamic Menu and Routing
|
||||
|
||||
- Menus are database driven.
|
||||
- Routes are generated/managed dynamically.
|
||||
- Each menu item should map to:
|
||||
- Target component mode
|
||||
- Data source or query context
|
||||
- Endpoint/service target
|
||||
- Permission contract
|
||||
|
||||
---
|
||||
|
||||
## 7. Dynamic List System
|
||||
|
||||
Driven by:
|
||||
|
||||
- ListForm
|
||||
- ListFormFields
|
||||
- ListFormCustomization (UserUiFilter, GridState, ServerJoin, ServerWhere)
|
||||
- ListFormImport and ListFormImportExecute
|
||||
- ListFormJsonRow operations
|
||||
|
||||
Capabilities:
|
||||
|
||||
- Dynamic columns, command column, banded columns
|
||||
- Permission-aware visibility and action rendering
|
||||
- Rich filtering, sorting, grouping, paging, searching
|
||||
- Dynamic toolbar actions and URL/dialog/script command flows
|
||||
- Lookup sources:
|
||||
- StaticData
|
||||
- Query
|
||||
- WebService
|
||||
- Cascading lookup parent-child behavior
|
||||
- Dynamic validation, editor options, editor scripts
|
||||
- Conditional formatting and style injection
|
||||
- Grid state save/load/reset
|
||||
- User filter save/apply/delete flows
|
||||
- Import manager and export flows (xlsx, csv, pdf)
|
||||
- SubForm integration from selected row context
|
||||
- Remote operations and dynamic datasource rebinding
|
||||
|
||||
Supported editor types:
|
||||
|
||||
- dxAutocomplete
|
||||
- dxCalendar
|
||||
- dxCheckBox
|
||||
- dxColorBox
|
||||
- dxDateBox
|
||||
- dxDateRangeBox
|
||||
- dxDropDownBox
|
||||
- dxGridBox
|
||||
- dxHtmlEditor
|
||||
- dxLookup
|
||||
- dxNumberBox
|
||||
- dxRadioGroup
|
||||
- dxRangeSlider
|
||||
- dxSelectBox
|
||||
- dxSlider
|
||||
- dxSwitch
|
||||
- dxTagBox
|
||||
- dxTextArea
|
||||
- dxTextBox
|
||||
|
||||
---
|
||||
|
||||
## 8. Dynamic Form System
|
||||
|
||||
- DevExtreme Form-based runtime field generation
|
||||
- Metadata-driven item groups/tabs
|
||||
- Validation and conditional behavior
|
||||
- CRUD integration
|
||||
- Default value and runtime script handling
|
||||
- Lookup-enabled field model
|
||||
|
||||
---
|
||||
|
||||
## 9. Dynamic UI Components
|
||||
|
||||
Supported component families:
|
||||
|
||||
- DataGrid
|
||||
- PivotGrid
|
||||
- Form
|
||||
- Chart
|
||||
- Scheduler
|
||||
- Gantt
|
||||
- TreeList / Tree view
|
||||
- SubForm tabs (List, Tree, Gantt, Scheduler, Form, Chart)
|
||||
- Widget Group (dashboard KPI cards)
|
||||
|
||||
Runtime UI capabilities:
|
||||
|
||||
- Per-list layout switching:
|
||||
- Grid
|
||||
- Pivot
|
||||
- Tree
|
||||
- Chart
|
||||
- Gantt
|
||||
- Scheduler
|
||||
- Per-user layout persistence
|
||||
- Lazy loading and view preloading
|
||||
- Shared dynamic datasource pipeline across layouts
|
||||
- Shared filter/search/deep-link behavior
|
||||
- Runtime refresh and query rebind
|
||||
- Runtime state lifecycle:
|
||||
- Save state
|
||||
- Load state
|
||||
- Reset state
|
||||
- Runtime import/export actions from UI flows
|
||||
- Popup and fullscreen editing scenarios
|
||||
- SubForm relation-aware context propagation and tab navigation
|
||||
|
||||
---
|
||||
|
||||
## 10. Dynamic Component Development Policy
|
||||
|
||||
Allowed approach:
|
||||
|
||||
- Configure and bind existing dynamic component infrastructure.
|
||||
|
||||
Disallowed by default:
|
||||
|
||||
- New custom React pages/components for normal business requirements.
|
||||
|
||||
If user requests custom code explicitly:
|
||||
|
||||
- Provide a warning that low-code path is preferred.
|
||||
- Offer configuration-first alternative first.
|
||||
|
||||
---
|
||||
|
||||
## 11. Integrations
|
||||
|
||||
Notification channels:
|
||||
|
||||
- Sms
|
||||
- Mail
|
||||
- Rocket
|
||||
- Desktop
|
||||
- UiActivity
|
||||
- UiToast
|
||||
- WhatsApp
|
||||
- Telegram
|
||||
|
||||
Sender module:
|
||||
|
||||
- Email (ABP Emailing + Amazon SES)
|
||||
- SMS (ABP Sms + Posta Guvercini)
|
||||
- Rocket.Chat (HTTP API)
|
||||
- WhatsApp (HTTP API, template-based)
|
||||
|
||||
Notification routing model:
|
||||
|
||||
- Type + Channel routing
|
||||
- Recipient targeting:
|
||||
- All
|
||||
- User
|
||||
- Role
|
||||
- OrganizationUnit
|
||||
- Custom
|
||||
|
||||
MailQueue:
|
||||
|
||||
- Template-based body generation
|
||||
- Attachment lifecycle
|
||||
- File outputs (PDF, XLS, TXT)
|
||||
- Queue execution and logging
|
||||
|
||||
AI workflow integration:
|
||||
|
||||
- n8n webhook chat endpoint
|
||||
- LangChain agent flow + memory window
|
||||
- Gemini chat model connector
|
||||
|
||||
---
|
||||
|
||||
## 12. Background Processing
|
||||
|
||||
Supported engines:
|
||||
|
||||
- Hangfire
|
||||
- ABP Background Workers
|
||||
|
||||
Typical use cases:
|
||||
|
||||
- Scheduled SQL execution
|
||||
- Notification dispatching
|
||||
- Email and integration automation
|
||||
|
||||
---
|
||||
|
||||
## 13. Security and Compliance Rules
|
||||
|
||||
- Enforce RBAC and permission-driven visibility at all layers.
|
||||
- Always include permission definitions in feature design.
|
||||
- Never output real credentials, tokens, keys, or secrets.
|
||||
- Use placeholders in examples.
|
||||
- Maintain tenant isolation in every query and action.
|
||||
|
||||
---
|
||||
|
||||
## 14. Required AI Output Contract
|
||||
|
||||
For each implementation proposal, AI output must include:
|
||||
|
||||
1. Goal
|
||||
2. Decision flow result (which step used)
|
||||
3. Artifacts to configure
|
||||
4. SQL/query/endpoint design (if needed)
|
||||
5. Menu + route + component mapping
|
||||
6. Permission and role mapping
|
||||
7. Tenant isolation notes
|
||||
8. Validation and test checklist
|
||||
9. Rollback strategy
|
||||
|
||||
---
|
||||
|
||||
## 15. Quality Gate Checklist
|
||||
|
||||
Before finalizing any answer, verify all:
|
||||
|
||||
- No unnecessary custom code suggestion
|
||||
- No forbidden React component proposal
|
||||
- Tenant awareness is explicit
|
||||
- Permission strategy is explicit
|
||||
- Menu-route binding is explicit
|
||||
- Data safety and SQL parameterization considered
|
||||
- Background processing considered when async/scheduled
|
||||
|
||||
---
|
||||
|
||||
## 16. Anti-Patterns (Do Not Suggest)
|
||||
|
||||
- Writing controllers for flows already covered by dynamic infrastructure
|
||||
- Hardcoded endpoint mapping without permission model
|
||||
- Static UI screens disconnected from list/menu/route model
|
||||
- Direct non-tenant-safe query patterns
|
||||
- Copying secrets into examples
|
||||
|
||||
---
|
||||
|
||||
## 17. Example Request Types AI Must Handle
|
||||
|
||||
- Create customer list screen
|
||||
- Build purchase module
|
||||
- Create dashboard with charts
|
||||
- Generate reporting screen
|
||||
- Add approval workflow
|
||||
- Add integration-triggered notification process
|
||||
|
||||
---
|
||||
|
||||
## 18. Escalation Strategy
|
||||
|
||||
When configuration cannot satisfy requirement:
|
||||
|
||||
1. Try SQL-based design
|
||||
2. Try Custom Endpoint
|
||||
3. Try Dynamic Service
|
||||
4. Propose minimal code change with explicit justification
|
||||
|
||||
---
|
||||
|
||||
## 19. Final Rule
|
||||
|
||||
This platform is not a traditional code-first app.
|
||||
|
||||
It is a runtime configurable low-code engine.
|
||||
|
||||
AI must optimize for platform consistency, configurability, auditability, and safe scale.
|
||||
|
||||
---
|
||||
|
||||
## 20. Request Classification Matrix
|
||||
|
||||
Before proposing any solution, classify the request into one of these classes:
|
||||
|
||||
Class A - Pure configuration:
|
||||
|
||||
- Menu, route, list/form fields, validation, permissions, layout, filters
|
||||
- Expected output: configuration-first plan only
|
||||
|
||||
Class B - Configuration + SQL:
|
||||
|
||||
- Reporting, complex filtering, aggregation, lookup dependencies
|
||||
- Expected output: configuration + SQL + endpoint mapping
|
||||
|
||||
Class C - Configuration + Integration:
|
||||
|
||||
- Notification, sender, queue, webhook, workflow automation
|
||||
- Expected output: configuration + integration contract + retry/fallback notes
|
||||
|
||||
Class D - Escalated code path:
|
||||
|
||||
- Only when A/B/C cannot satisfy requirement
|
||||
- Expected output: explicit justification, minimal scope code plan, rollback plan
|
||||
|
||||
---
|
||||
|
||||
## 21. Response Playbooks
|
||||
|
||||
### 21.1 New Screen Playbook
|
||||
|
||||
1. Define business objective and actor roles.
|
||||
2. Define ListForm and ListFormFields structure.
|
||||
3. Define menu entry and route mapping.
|
||||
4. Define permissions (R/C/U/D/E) and role mapping.
|
||||
5. Define datasource and query strategy.
|
||||
6. Define runtime filters, lookup, validations.
|
||||
7. Define import/export and state requirements.
|
||||
8. Define acceptance checklist.
|
||||
|
||||
### 21.2 Workflow/Approval Playbook
|
||||
|
||||
1. Define states and transition rules.
|
||||
2. Define transition permissions by role.
|
||||
3. Define transition side-effects (notification, queue, endpoint call).
|
||||
4. Define audit log and failure handling.
|
||||
5. Define rollback/compensation behavior.
|
||||
|
||||
### 21.3 Report/Dashboard Playbook
|
||||
|
||||
1. Define KPIs and dimensions.
|
||||
2. Define SQL shaping and aggregation logic.
|
||||
3. Define chart/pivot configuration.
|
||||
4. Define date/tenant filters.
|
||||
5. Define export needs and performance constraints.
|
||||
|
||||
---
|
||||
|
||||
## 22. Mandatory Acceptance Criteria Template
|
||||
|
||||
Every final proposal must include a clear, testable acceptance list:
|
||||
|
||||
1. Feature can be enabled via configuration.
|
||||
2. Tenant boundaries are preserved.
|
||||
3. Required permissions block unauthorized access.
|
||||
4. Menu-route-screen path is navigable.
|
||||
5. Data operations are parameterized and safe.
|
||||
6. Runtime filters and state behaviors work.
|
||||
7. Integration events (if any) are observable and retry-safe.
|
||||
8. No unnecessary custom code introduced.
|
||||
|
||||
---
|
||||
|
||||
## 23. AI Output Templates
|
||||
|
||||
### 23.1 Configuration-only Output Template
|
||||
|
||||
1. Goal
|
||||
2. Configuration artifacts
|
||||
3. Menu/route mapping
|
||||
4. Permission mapping
|
||||
5. Validation checklist
|
||||
|
||||
### 23.2 Configuration + SQL Output Template
|
||||
|
||||
1. Goal
|
||||
2. Required configuration artifacts
|
||||
3. SQL design (inputs, outputs, filter parameters)
|
||||
4. Endpoint/service mapping
|
||||
5. Security and tenant notes
|
||||
6. Validation checklist
|
||||
|
||||
### 23.3 Escalated Code Output Template
|
||||
|
||||
1. Why configuration is insufficient
|
||||
2. Minimal code scope
|
||||
3. Compatibility with existing dynamic architecture
|
||||
4. Migration and rollback plan
|
||||
5. Risk and test plan
|
||||
|
||||
---
|
||||
|
||||
## 24. Performance and Scalability Rules
|
||||
|
||||
- Prefer server-side filtering/sorting/paging for large datasets.
|
||||
- Avoid unbounded result sets in dynamic queries.
|
||||
- Use indexing-aware query patterns for reporting screens.
|
||||
- Keep chart/pivot queries aggregation-focused.
|
||||
- Separate interactive screen queries from heavy export queries.
|
||||
- Use background jobs for long-running batch operations.
|
||||
|
||||
---
|
||||
|
||||
## 25. Observability and Audit Rules
|
||||
|
||||
- Log key operations at list/form/integration boundaries.
|
||||
- Preserve who/when/what audit metadata for critical changes.
|
||||
- Capture integration failures with retry reason and payload context.
|
||||
- Keep user-facing messages simple, logs detailed.
|
||||
- Ensure state changes are diagnosable for support teams.
|
||||
|
||||
---
|
||||
|
||||
## 26. Error Handling Policy
|
||||
|
||||
- Never expose raw secrets or internal stack details to end users.
|
||||
- Return actionable, localized, user-level messages.
|
||||
- Keep technical diagnostics in logs.
|
||||
- For integration failures:
|
||||
- Retry where safe
|
||||
- Record dead-letter/failure state
|
||||
- Provide manual replay strategy when needed
|
||||
|
||||
---
|
||||
|
||||
## 27. Change Management Policy
|
||||
|
||||
- Prefer additive changes over breaking modifications.
|
||||
- Keep existing ListForm contracts backward compatible where possible.
|
||||
- Document behavior changes in rollout notes.
|
||||
- For destructive changes, require explicit migration path.
|
||||
|
||||
---
|
||||
|
||||
## 28. Definition of Done for AI Proposals
|
||||
|
||||
A proposal is complete only if all are present:
|
||||
|
||||
1. Decision flow step selected and justified.
|
||||
2. Configuration artifacts clearly listed.
|
||||
3. Permission and tenant design included.
|
||||
4. Menu-route-component mapping included.
|
||||
5. Validation checklist included.
|
||||
6. Risk/rollback notes included.
|
||||
|
||||
---
|
||||
|
||||
## 29. Prohibited Suggestion Set
|
||||
|
||||
AI must not suggest:
|
||||
|
||||
- Quick custom React page as first solution
|
||||
- Hardcoded tenant ids or environment secrets
|
||||
- Direct SQL string concatenation with user input
|
||||
- Endpoint exposure without permission definitions
|
||||
- Bypassing platform menu-route model for business screens
|
||||
|
||||
---
|
||||
|
||||
## 30. Final Governance Statement
|
||||
|
||||
This manual is authoritative for AI behavior in this repository.
|
||||
|
||||
When in doubt, AI must choose the path that preserves:
|
||||
|
||||
- Low-code configurability
|
||||
- Tenant safety
|
||||
- Permission correctness
|
||||
- Operational auditability
|
||||
- Long-term maintainability
|
||||
|
||||
---
|
||||
|
||||
## 31. Seeder-Driven Low-Code Development Guide (Authoritative)
|
||||
|
||||
AI must learn and teach implementation flow primarily from these seed assets:
|
||||
|
||||
- api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs
|
||||
- api/src/Sozsoft.Platform.DbMigrator/Seeds/MenusData.json
|
||||
- api/src/Sozsoft.Platform.DbMigrator/Seeds/PermissionsData.json
|
||||
- api/src/Sozsoft.Platform.DbMigrator/Seeds/HostData.json
|
||||
- api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json
|
||||
|
||||
If user asks "how to add a new module/screen", AI must answer with this exact operational sequence.
|
||||
|
||||
### 31.1 Step 1 - Create ListForm definition
|
||||
|
||||
Define a new `ListForm` with at least:
|
||||
|
||||
- `ListFormCode`, `Name`, `Title`
|
||||
- `DataSourceCode`
|
||||
- `SelectCommandType` + `SelectCommand`
|
||||
- `KeyFieldName` + `KeyFieldDbSourceType`
|
||||
- `PermissionJson` (create/read/update/delete/export/import/note)
|
||||
- `EditingOptionJson` + `EditingFormJson`
|
||||
- `FilterRowJson`, `HeaderFilterJson`, `SearchPanelJson`, `GroupPanelJson`
|
||||
- `SelectionJson`, `ColumnOptionJson`, `PagerOptionJson`
|
||||
- `InsertServiceAddress`, `UpdateServiceAddress`, `DeleteCommand`
|
||||
|
||||
For parent-child scenarios, define `SubFormsJson` relation mapping (ParentFieldName -> ChildFieldName, DbType).
|
||||
|
||||
### 31.2 Step 2 - Create ListFormFields
|
||||
|
||||
For each field, define runtime behavior through `ListFormField` records:
|
||||
|
||||
- Data binding: field name, db type, source
|
||||
- UI behavior: visibility, order, width, grouping, fixed/band settings
|
||||
- Editing behavior: editor type (`dxTextBox`, `dxSelectBox`, `dxNumberBox`, etc.), required, options
|
||||
- Lookup behavior: data source type, display/value members, cascade rules
|
||||
- Validation rules and default values
|
||||
- Command/action columns where needed
|
||||
|
||||
AI must prioritize metadata-based field behavior instead of suggesting custom React forms.
|
||||
|
||||
### 31.3 Step 3 - Add menu and route mapping
|
||||
|
||||
From `MenusData.json` patterns, AI must define both:
|
||||
|
||||
- `Routes` entry:
|
||||
- `key`, `path`, `componentPath`, `routeType`, `authority`
|
||||
- `Menus` entry:
|
||||
- `ParentCode`, `Code`, `DisplayName`, `Url`, `Icon`, `RequiredPermissionName`, `Order`
|
||||
|
||||
For dynamic list screens, base route pattern is:
|
||||
|
||||
- `/admin/list/{ListFormCode}`
|
||||
|
||||
AI must ensure menu URL and route path point to same screen contract.
|
||||
|
||||
### 31.4 Step 4 - Add permissions
|
||||
|
||||
From `PermissionsData.json` patterns, AI must define:
|
||||
|
||||
- Permission group (if missing)
|
||||
- Permission definitions for feature root and actions
|
||||
- Menu permission binding (`RequiredPermissionName`)
|
||||
|
||||
Minimum action set suggestion:
|
||||
|
||||
- `.Default`
|
||||
- `.Create`
|
||||
- `.Update`
|
||||
- `.Delete`
|
||||
- `.Export`
|
||||
- `.Import`
|
||||
- `.Note`
|
||||
|
||||
AI must never propose menu/route without permission contract.
|
||||
|
||||
### 31.5 Step 5 - Add settings/integration dependencies
|
||||
|
||||
From `HostData.json` patterns, AI must define required settings when feature depends on external services:
|
||||
|
||||
- Sender credentials and endpoints (sms/mail/whatsapp/rocket)
|
||||
- AiBot integration endpoint and activation state
|
||||
- Feature-specific setting keys, providers, encryption flags
|
||||
|
||||
If integration required and setting missing, AI must explicitly add "blocking prerequisite" note.
|
||||
|
||||
### 31.6 Step 6 - Data and service contract
|
||||
|
||||
AI must produce one of:
|
||||
|
||||
- Direct table/view select command
|
||||
- Parameterized SQL via managed query
|
||||
- Custom endpoint / dynamic service
|
||||
|
||||
AI must include tenant-safe filters and avoid string concatenation.
|
||||
|
||||
### 31.7 Step 7 - Delivery checklist
|
||||
|
||||
For every new low-code feature, AI output must list:
|
||||
|
||||
1. New `ListForm` code and purpose
|
||||
2. `ListFormField` set (critical columns/editors/lookups)
|
||||
3. Route record
|
||||
4. Menu record
|
||||
5. Permission records
|
||||
6. Required settings/integrations
|
||||
7. Validation and rollback notes
|
||||
|
||||
If this 7-item list is incomplete, proposal is not accepted.
|
||||
|
||||
### 31.8 AI response style for implementation requests
|
||||
|
||||
When user asks for a screen/module, AI must answer in this order:
|
||||
|
||||
1. Decision flow class (A/B/C/D)
|
||||
2. Seeder-style artifacts to add (ListForm, Fields, Menu, Route, Permission, Setting)
|
||||
3. If needed, SQL/endpoint contract
|
||||
4. Test and rollback checklist
|
||||
|
||||
AI should produce practical, copy-adaptable artifact definitions and avoid abstract-only explanations.
|
||||
|
||||
---
|
||||
|
||||
## 32. Mandatory Default Behaviors (Do Not Ask Repeatedly)
|
||||
|
||||
The following defaults are mandatory unless user explicitly overrides them.
|
||||
|
||||
### 32.1 SQL Table Designer default column behavior
|
||||
|
||||
When user requests creating a table and only specifies business columns (for example `FullName`, `Phone`), AI must still ensure platform-standard technical columns are included by default in SQL Query Manager table design flow:
|
||||
|
||||
- `TenantId` (multi-tenant compatibility)
|
||||
- Full audited set:
|
||||
- `Id`
|
||||
- `CreationTime`
|
||||
- `CreatorId`
|
||||
- `LastModificationTime`
|
||||
- `LastModifierId`
|
||||
- `IsDeleted`
|
||||
- `DeletionTime`
|
||||
- `DeleterId`
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not require user to explicitly request these columns each time.
|
||||
- If user explicitly says "no tenant" or "no audit", then respect that override.
|
||||
- Primary key strategy must remain compatible with existing index/key policy.
|
||||
|
||||
### 32.2 Wizard menu parent fallback behavior
|
||||
|
||||
When creating menu via Wizard/ListForm and user does not explicitly specify parent menu:
|
||||
|
||||
- Do not auto-place under `Definitions` by default.
|
||||
- Create (or use) a dedicated new top-level parent menu for that feature/module.
|
||||
- Assign top-level menu `Order` as next available order (`max(Order) + 1`) among root menus.
|
||||
- Place the generated list/menu item under this newly created parent.
|
||||
|
||||
Rules:
|
||||
|
||||
- `Definitions` can be used only when user explicitly selects it.
|
||||
- Permission contract must be created/bound for both parent and child menu items.
|
||||
- Route/menu consistency remains mandatory (`Url` and screen contract must match).
|
||||
|
||||
### 32.3 AI enforcement requirement
|
||||
|
||||
AI must proactively apply these defaults in:
|
||||
|
||||
- implementation proposals,
|
||||
- code/seed changes,
|
||||
- migration and wizard behavior recommendations.
|
||||
|
||||
If AI output omits these defaults without explicit user override, output is non-compliant.
|
||||
149
.github/instructions/list.instructions.md
vendored
Normal file
149
.github/instructions/list.instructions.md
vendored
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
|
||||
# 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}`
|
||||
- **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}` and `public const string {Liste}`) if it does not already exist. Never duplicate existing constants.
|
||||
- **DeleteCommand Rule:** In all `ListFormSeeder_{Modul}.cs` files, the `DeleteCommand` property **must** use the `DefaultDeleteCommand` function, e.g., `DeleteCommand = DefaultDeleteCommand("{TabloAdı}")`. Never use a raw SQL string directly for `DeleteCommand`.
|
||||
|
||||
---
|
||||
|
||||
## Special File Handling Rules
|
||||
|
||||
- **MenusData.json:**
|
||||
- Never modify the `Routes` section directly. Only `MenuGroups` and `Menus` sections can be changed for menu additions or updates. All menu additions must use the platform's configuration mechanisms or be added to `MenuGroups` and `Menus` as required by platform design.
|
||||
|
||||
- **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.
|
||||
|
|
@ -13883,8 +13883,8 @@
|
|||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "App.Listform.ListformField.IP",
|
||||
"en": "IP",
|
||||
"tr": "Ip Adresi"
|
||||
"en": "IP Address",
|
||||
"tr": "IP Adresi"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
|
|
|
|||
71
claude.md
Normal file
71
claude.md
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# Sozsoft Platform - Claude Instructions
|
||||
|
||||
This file provides Claude-specific operating rules for this repository.
|
||||
Primary source of truth for platform behavior is:
|
||||
|
||||
- `.github/instructions/ai.instructions.md`
|
||||
|
||||
If there is any conflict, follow `.github/instructions/ai.instructions.md`.
|
||||
|
||||
## Purpose
|
||||
|
||||
- Maximize delivery through runtime configuration.
|
||||
- Minimize custom code.
|
||||
- Preserve platform consistency, security, and tenant isolation.
|
||||
|
||||
Primary principle: Configuration first, code last.
|
||||
|
||||
## Mandatory Decision Order
|
||||
|
||||
For every request, evaluate and propose in this order:
|
||||
|
||||
1. Dynamic configuration with existing ListForm ecosystem
|
||||
2. SQL Query Manager + Custom Endpoint
|
||||
3. Dynamic Service
|
||||
4. Code change (last resort, justification required)
|
||||
|
||||
## Non-Negotiable Rules
|
||||
|
||||
1. Do not propose new custom React component/page development for standard feature requests.
|
||||
2. Build new screens using platform configuration mechanisms.
|
||||
3. Every proposal must include tenant and permission design.
|
||||
4. Never bypass platform authorization patterns.
|
||||
5. Never hardcode secrets, tenant IDs, or connection strings.
|
||||
|
||||
Exception:
|
||||
|
||||
- Custom React/backend code is allowed only when the user explicitly requests implementation and configuration is insufficient.
|
||||
- In such cases, explain why configuration-first options are not enough.
|
||||
|
||||
## Architecture Guardrails
|
||||
|
||||
- Backend: Respect ABP module boundaries and explicit, auditable permissions.
|
||||
- Frontend: Use existing dynamic view infrastructure and metadata-driven behavior.
|
||||
- Data: Use parameterized SQL patterns and enforce tenant-safe access.
|
||||
|
||||
## Dynamic Platform Expectations
|
||||
|
||||
- Menus and routes are database-driven.
|
||||
- Dynamic List/Form/Component infrastructure is the default solution path.
|
||||
- Keep route, menu, permission, and datasource mappings coherent.
|
||||
|
||||
## Security and Compliance
|
||||
|
||||
- Enforce RBAC and permission-driven visibility in all layers.
|
||||
- Never output real credentials, tokens, keys, or secrets.
|
||||
- Use placeholders in examples.
|
||||
- Maintain tenant isolation in every query and action.
|
||||
|
||||
## Response Contract
|
||||
|
||||
When producing an implementation proposal, include:
|
||||
|
||||
1. Goal
|
||||
2. Decision flow result (which step used)
|
||||
3. Artifacts to configure
|
||||
4. SQL/query/endpoint design (if needed)
|
||||
5. Menu + route + component mapping
|
||||
6. Permission and role mapping
|
||||
7. Tenant isolation notes
|
||||
8. Validation and test checklist
|
||||
9. Rollback strategy
|
||||
Loading…
Reference in a new issue