Технічне завдання: Редактор ER-моделей K2 ERP
2. 3. Помилки генерації показуються користувачу. |- |comment |text |Коментар до версії. платформа знаходить невалідні FK. 2. користувач системи здатна згенерувати Python SQLAlchemy-моделі. |- |PUT |/api/er-models/{id}
|Оновити модель. Приклад:
fields:
search_fields:
project:
== 1. Мета розробки ==
project:
generator-csharp-ef
{| class="wikitable"
OrderStatus:
=== 25.2. Поля audit log ===
Редактор має підтримувати:
</pre>
!Тип
naming:
unique: false
- name: crm
4. Audit log. 2. |-
|created_by
|reference
|Автор. |High. |-
|DBA
|Перевіряє індекси, ключі, обмеження. table: orders
field_case: snake_case
- name: id
order: 20
!SEO-опис
Customer 1 ─────── N Order
schema.yml
timestamps: true
primary_key: true
- name: Customer
</pre>
!Обовʼязкове
!Поле
precision: 12
nullable: false
+----------------------+-----------------------------------------+---------------+
<pre>
!SEO-опис
5. !SEO-опис
У редакторі має бути розділ '''Generators''', де задається:
{| class="wikitable"
|-
|id
|uuid / bigint
|Первинний ключ. |-
|YAML-first
|користувач системи редагує YAML, діаграма перебудовується після валідації. |Так. unique: true
=== 18.3. Migration preview ===
+ Add index idx_customers_email
|-
|user
|користувач системи, який зробив зміну. |-
|Info
|Інформаційне повідомлення. field: id
<syntaxhighlight lang="yaml">
|-
|draft
|Чернетка. |-
|table
|string
|Так
|Назва таблиці в БД. платформа попереджає про FK без індексу. Валідація моделі. Для моделі створюється перша draft-версія. |-
|comment
|Коментар користувача. |-
|Версіонування
|Зміни ER-моделі мають зберігатися в історії. користувач системи здатна згенерувати SQL DDL.== 12. Обмеження ==
- name: sales
output: ./generated/prisma
!Адміністратор
- customer_id
6. !Чи блокує збереження
ORM / міграції / API / документація
migration plan
label: Draft
↓
django:
Для MVP достатньо:
- paid
! entities: Редактор не повинен бути привʼязаний до однієї мови програмування або одного ORM. |timestamp |- |time |Час. app_label: crm
!Метод + Add table customers
- YAML;
- JSON;
- SQL DDL;
- існуючої БД через introspection;
- CSV-опису таблиць;
- Mermaid ER diagram;
- PlantUML ER diagram. |-
|Розширюваність |Має бути можливість додавати нові генератори мов і ORM. description: Example ER model for K2 ERP
↓
!SEO-опис
color: blue indexes:
5. !Аналітик
27.1. MVP
|- |normal |Звичайний індекс. |PascalCase: OrderStatus. 2. |- |composite |Складений індекс по кількох полях. |- |table_case |Формат назв таблиць. Імпорт із Mermaid / PlantUML. |- |on_update |enum |Ні |restrict, cascade, set_null, no_action. |- |Видалення поля призведе до втрати даних |Ризик production-інциденту. {| class="wikitable"
list_view: ↓ 4. Автоматична оптимізація індексів. При видаленні сутності платформа попереджає про залежні звʼязки. користувач системи здатна задати default. Кожна зміна на діаграмі оновлює внутрішню модель. |-| status | enum | draft, review, approved, released, archived. !Основні дії
=== 18.1. Призначення ===
!Ризик
* графічне редагування ER-діаграми;
* повний SEO-опис сутностей, полів, звʼязків, enum-ів, індексів і constraints;
* збереження моделі у YAML;
* двостороння синхронізація Diagram ↔ YAML;
* валідація перед збереженням і генерацією;
* генерація ORM через окремі генератори;
* технічна підтримка версій, audit log і migration preview;
* розширюваність під різні мови програмування. |-
|created_at
|datetime
|Дата створення. |}
↓
{| class="wikitable"
length: 255
=== 30.1. Метадані сутності ===
scale: 2
|-
|id
|uuid
|ID версії. Генерація Python SQLAlchemy. |-
|one_to_many
|Один запис має багато дочірніх записів. |idx_. |-
|Markdown documentation
|Середній
|Документація структури БД. |-
|from_field
|string
|Так
|Поле FK. +-----------------------------+
- name: sales
== 24. Права доступу ==
<pre>
label: CRM
enabled: true
fields:
settings:
=== 10.1. Типи звʼязків ===
* General;
* Fields;
* Relations;
* Indexes;
* Constraints;
* ORM;
* UI metadata;
* Audit;
* YAML Preview. {| class="wikitable"
|-
|name
|string
|Так
|Технічна назва поля. ↓
PHP Laravel generator
!Endpoint
label: K2 ERP
|
Тип
На діаграмі потрібно показувати кардинальність:== 37. Ризики ==
== 11. Індекси ==
length: 50
Має містити ORM-специфічні конфігурація, але вони не повинні ламати універсальність YAML. |-
|required
|boolean
|Ні
|Чи звʼязок обовʼязковий. |-
|name
|string
|Назва enum. Python SQLAlchemy generator
2. Виправляє warnings. |-
|Клік по полю
|Відкриття властивостей поля. Enum застосовується для для полів із фіксованим набором значень. |-
|from_entity
|string
|Так
|Початкова сутність. |-
|Python SQLAlchemy
|Високий
|models.py, relationships, indexes. |-
|junction_entity
|string
|Ні
|Для many_to_many. |json / jsonb
|-
|enum
|Перелік значень. Генерація виконується з YAML-моделі. користувач системи здатна задати назву, SEO-опис і компонент. Базовий audit log. користувач системи здатна задати назву таблиці. enums:
Приклад YAML:<syntaxhighlight lang="yaml">
=== 19.1. Вимоги ===
{| class="wikitable"
Редактор має дозволяти задавати метадані для автоматичної генерації UI. |-
|label
|string
|Людинозрозуміла назва. Узгодити правила валідації. платформа знаходить дублікати полів. платформа знаходить дублікати назв сутностей. Перевірка FK. |-
|type
|enum
|Так
|Тип звʼязку. |-
|Drag від поля до іншої сутності
|Створення звʼязку. |-
|Додано not null поле без default
|Add amount not null. Change field orders.amount decimal(10,2) → decimal(12,2)
Prisma schema
label: Cancelled
label: Sales
model_name: Customer
2. |-
|partial
|Частковий індекс з умовою. Перегляд результату. |-
|Змінено тип поля
|string → integer. |-
|Видалено поле
|Drop email. |-
|SQL DDL
|Високий
|CREATE TABLE, indexes, constraints. +--------------------------------------------------------------------------------+
4. |-
|to_field
|string
|Так
|Зазвичай primary key. |sales_invoice, purchase_order. |-
|color
|Колір модуля або сутності. |-
|type
|enum
|Так
|Тип даних. |-
|version
|string
|Номер версії. |}
!SEO-опис
4. |} </syntaxhighlight> options: 33.2. Надійність
|
value | string | - | Великі моделі будуть повільно відкриватися | Поганий UX. indexed: true
Для MVP достатньо реалізувати створення сутностей, полів, звʼязків, enum-ів, YAML import/export, базову валідацію, SQL DDL generator і Python SQLAlchemy generator. |- |
label | string | - | ORM-agnostic | }
35.2. Робота з сутностями
|
Генератор
10. |- |
updated_at | datetime | - | released | - | description | text | Ні | - | PHP Laravel Eloquent | Низький | - | enum_case | uuid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| integer | - | Унікальність entity.name | Error | Не здатна бути двох сутностей з однаковою назвою. Редактор має підтримувати: | Властивість
Редактор має підтримувати: - name 1. Генерація SQL DDL. !Обовʼязкова </syntaxhighlight> Приклад модулів: default_id_type: uuid | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| primary_key | - | POST | /api/er-models/import | - | Графічне редагування | користувач системи функціонує з діаграмою, а не тільки з текстовим YAML. !Перегляд
36. Приклад сценарію роботи користувача |
SEO-опис
1. Генерує YAML. |- |
Space + drag | - | Валідація | }
2. Перевірка індексів. AI-рекомендації по структурі. prisma:
Редактор ER-моделей K2 ERP має стати центральним інструментом для проєктування структури даних. to_field: id
Редактор має вміти порівнювати дві версії YAML-моделі й формувати SEO-опис змін. Перевірка полів. 3. |Category → Parent Category. |}
schema.yml
8. 1. |-
|label
|string
|Ні
|Назва для UI. Кожна сутність має мати поле `module`.=== 33.1. Продуктивність ===
name: k2_erp
{| class="wikitable"
<pre>
=== 14.3. Приклад повної YAML-моделі ===
4. |-
|Ctrl + Z
|Скасування останньої дії. |-
|system
|Системна таблиця. - name: email
fields:
!Приклад БД
<pre>
table_args: []
- name: idx_orders_customer_id
=== 10.4. Правила створення звʼязку ===
unique: true
↓
2. |-
|created_at
|Дата зміни. |-
|condition
|string
|Умова для partial index. type: string
=== 35.4. Робота зі звʼязками ===
- name: amount
↓
!Перевірка
color: red
== 3. Основні принципи ==
label: Customer name
!Позначення
=== 19.2. Статуси версії ===
Order N ─────── 1 Product
TypeScript Prisma generator 11. - name: crm | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| one_to_one | Critical. |- | new_value | Нове значення.2. |} class_name: Customer 4. |bytea / blob |- |money |Грошове значення. 21. Пошук і навігаціяentity: Customer 5. Функціональні блоки редактора+----------------------+-----------------------------------------+---------------+ 7.2. Дії на полотніgenerated: true amount >= 0 fields: nullable: falseПриклад YAML: == 34. MVP ==
== 28. конфігурація naming strategy ==
!Поле
version: 1
3.</pre>
!Поле
generate_indexes: true
</pre>
|-
|uuid
|UUID-ідентифікатор. Він має формувати універсальний YAML, а генерація виконується окремими генераторами. label: Sales
| Customer |
|-----------------------------|
| PK id: uuid |
| name: string |
| email: string unique |
| created_at: datetime |
|-----------------------------|
| indexes: 2 |
| relations: 3 |
Потрібно:
<pre>
=== 11.2. Властивості індексу ===
!Поле
!Обмеження
!Тип
|-
|PK
|Primary key. Повний reverse engineering складних БД.<syntaxhighlight lang="yaml">
== 18. Генерація міграцій ==
order: 10
generators:
=== 29.5. ORM ===
</pre>
=== 35.3. Робота з полями ===
1. |-
|Унікальність field.name
|Error
|У сутності не здатна бути двох полів з однаковою назвою. orm:
5. default_schema: public
to_entity: Customer
<pre>
entity_case: PascalCase
!Приклад
↓
<pre>
!SEO-опис
!SEO-опис
- Drop field customers.old_code
relations:
== 35. Критерії приймання ==
order: 40
8. + Add field customers.email
Редактор має мати можливість автоматизовано додавати типові системні поля:
ui:
!Тип
!SEO-опис
7. !Тип
- name: Order
=== 16.2. Рівні повідомлень ===
!SEO-опис
Редактор має підтримувати такі обмеження:
=== 34.1. Що включити в MVP ===
{| class="wikitable"
=== 31.1. Основні endpoint-и ===
1. |-
|created_at
|datetime
|Дата створення. Генерація SQL DDL. Модель зберігається в K2 ERP. |-
|description
|text
|SEO-опис призначення індексу. Enum-и. |}
1. |Перегляд, редагування, генерація коду. На діаграмі показується кардинальність. Завантаження результату. !Тип
!Пріоритет
1. type: table
- name: Customer
|-
|YAML стане занадто ORM-специфічним
|Втрата універсальності. * до 500 сутностей в одній моделі;
* до 10 000 полів у моделі;
* до 2 000 звʼязків;
* відкриття моделі до 100 сутностей — до 3 секунд;
* відкриття моделі до 500 сутностей — до 10 секунд;
* валідація моделі до 500 сутностей — до 5 секунд;
* генерація YAML — до 3 секунд;
* генерація ORM — залежно від генератора, але з прогресом виконання. Функції:
constraints:
8. Діаграма експортується у валідний YAML. |Аналіз структури БД, performance-рекомендації. 5. |}
1. |-
|Аналітик
|Описує бізнес-сутності та поля. |Додавання описів, коментарів, бізнес-атрибутів. Реалізувати індекси. |-
|object_type
|Entity, Field, Relation, Enum, Index, Model. |-
|fulltext
|Повнотекстовий індекс. Реалізувати YAML editor. Після імпорту відновлюються сутності, поля, enum-и та звʼязки. |-
|Адміністратор
|Налаштовує права, шаблони, генератори. |-
|label
|string
|Ні
|Назва для UI. |-
|description
|text
|Ні
|SEO-опис поля. |-
|id
|uuid
|ID моделі.<pre>
=== 8.1. Поля сутності ===
!Тип
modules:
<pre>
User N ─────── N Role
4. |-
|fk_prefix
|Префікс foreign key. Primary key, foreign key, unique, nullable. Перегляд YAML поруч із діаграмою. Додавання полів. користувач системи здатна створити сутність на діаграмі. |-
|Валідність enum
|Error
|Поле enum має посилатися на існуючий enum. |-
|backref
|string
|Ні
|Назва зворотного звʼязку для ORM. - name: status
primary_key: true
generator-typescript-prisma
== 33. Нефункціональні вимоги ==
!SEO-опис
- phone
=== 13.2. Властивості enum ===
DbContext + Entities
- draft
!Тип
</pre>
timestamps: true
Редактор ER-моделей не повинен напряму містити логіку всіх ORM. ↓
- name: phone
required: true
| Верхня панель: Назва моделі | Save | Validate | Generate | Export | Settings |
5. |-
|NN
|Not nullable. |Розділяти core schema та orm-specific extensions. |-
|register
|Регістр або журнал рухів. |-
|Перегляд моделі
|Так
|Так
|Так
|Так
|Так
|Так
|-
|Створення сутностей
|Так
|Так
|Ні
|Так
|Так
|Ні
|-
|Редагування полів
|Так
|Так
|Частково
|Так
|Так
|Ні
|-
|Редагування описів
|Так
|Так
|Так
|Так
|Так
|Ні
|-
|Видалення сутностей
|Так
|Ні
|Ні
|Так
|Так
|Ні
|-
|Затвердження версії
|Так
|Ні
|Ні
|Так
|Так
|Ні
|-
|Генерація ORM
|Так
|Так
|Ні
|Так
|Так
|Ні
|-
|конфігурація генераторів
|Так
|Ні
|Ні
|Ні
|Так
|Ні
|}
↓ compare
soft_delete: true
3. |Генерація міграцій, перевірка схем. Рекомендована структура екрана:<pre>
</pre>
=== 18.2. Типи змін ===
length: 255
1.</pre>
* live collaboration;
* коментарі на сутностях;
* review workflow;
* approval process;
* conflict resolution;
* merge моделей. |-
|unique
|Унікальність. |-
|not_null
|Заборона null. Створює звʼязок Customer 1 → N Order. |text
|-
|date
|Дата. |boolean
|-
|string
|Рядок обмеженої довжини. |Створення моделей, сутностей, звʼязків, правил. |-
|type
|enum
|normal, unique, fulltext, partial. |-
|FK
|Foreign key. |customers, orders. |-
|Додано nullable-поле
|Add phone. На основі YAML-опису різні генератори можуть створювати ORM-моделі, міграції, API-схеми, документацію і інші артефакти для різних мов програмування. Реалізувати синхронізацію diagram ↔ YAML. {| class="wikitable"
=== 29.3. Relations ===
{| class="wikitable"
=== 10.3. Візуальне відображення звʼязків ===
== 26. Undo / Redo ==
type: check
Entity Framework models
table: customers
|-
|Diagram-first
|користувач системи редагує графічну діаграму, YAML оновлюється автоматизовано. |-
|unique
|boolean
|Ні
|Чи має бути унікальним. 5. |-
|relations
|list
|Ні
|Список звʼязків. ↓
Для MVP достатньо:
<pre>
!SEO-опис
!Принцип
enum: OrderStatus
- confirmed
!SEO-опис
foreign_key_prefix: fk_
7. generated: true
=== Етап 2. 38.2. Базовий редактор ===
type: uuid
!SEO-опис
default: draft
{| class="wikitable"
=== 34.2. Що можна відкласти ===
{| class="wikitable"
== 25. Audit log ==
=== 13.3. Властивості значення enum ===
!Приклад
Редактор має підтримувати експорт у:
=== 22.2. MVP імпорту ===
=== 29.2. Fields ===
=== Етап 3. 38.3. Звʼязки та enum-и ===
!SEO-опис
=== 25.1. Що логувати ===
9. Порівняння версій. |-
|checksum
|string
|Хеш YAML. * не втрачати зміни при оновленні сторінки, якщо виступає як autosave;
* показувати конфлікти при одночасному редагуванні;
* не дозволяти зберегти невалідну модель як released;
* мати резервне збереження draft-версії;
* вести audit log. |-
|icon
|Іконка сутності. користувач системи здатна задати nullable. користувач системи здатна створити звʼязок між двома сутностями. |-
|scale
|integer
|Ні
|Кількість знаків після коми. |керування доступами та конфігурацією. Ключові вимоги:
* додати поле;
* редагувати поле;
* видалити поле;
* змінити порядок;
* позначити primary key;
* позначити unique;
* позначити indexed;
* зробити nullable / not nullable;
* вибрати enum;
* вибрати reference. |varchar(255)
|-
|text
|Довгий текст.== 14. YAML-формат моделі ==
<pre>
платформа має підтримувати:
9. Реалізувати панель властивостей.== 23. Експорт ==
|-
|table
|Звичайна таблиця. 5. ↓
!Зміна
=== 29.4. Indexes ===
== 13. Enum-и ==
== 32. Зберігання моделей у K2 ERP ==
|-
|GET
|/api/er-models
|Список моделей. |-
|DevOps
|Використовує YAML у CI/CD. |-
|readonly
|boolean
|Ні
|Чи поле read-only. |-
|Подвійний клік по сутності
|Відкриття повної картки сутності. |-
|Назви snake_case
|Warning
|Якщо naming_strategy=snake_case, назви мають відповідати правилу. платформа здатна автоматизовано створити FK-поле. |-
|fields
|list
|Список полів. |-
|on_delete
|enum
|Ні
|restrict, cascade, set_null, no_action. !Архітектор
enums: []
!Тип
!SEO-опис
!SEO-опис
2. |High. |}
{| class="wikitable"
4.=== Етап 5. 38.5. Валідація ===
on_delete: restrict
python_sqlalchemy:
=== Етап 4. 38.4. YAML ===
=== 9.3. Системні поля ===
from_field: customer_id
use_mapped_column: true
</pre>
- cancelled
== 17. Генерація ORM ==
!Статус
type: enum
!SEO-опис
indexed: true
reference:
</pre>
schema.yml
nullable: true
3. |Lazy loading, фільтри модулів, canvas virtualization. Його задача — створити універсальний SEO-опис ER-моделі. Звʼязок зберігається в YAML. |-
|values
|list
|Значення. |-
|default
|string / number / expression
|Ні
|Значення за замовчуванням. {| class="wikitable"
!Значення
!Параметр
|-
|Подвійний клік по пустому місцю
|Створення нової сутності. Збереження версій. * блокування моделі при редагуванні;
* показ користувача, який редагує модель;
* ручне збереження версій;
* коментар до збереження. |-
|timestamps
|boolean
|Ні
|Чи створювати created_at / updated_at. |Users ↔ Roles. ↓
entities: []
type: uuid
{| class="wikitable"
module: crm
32.2. Сутність er_model_versions7.4. Візуальні позначення↓ <pre> nullable: false soft_delete: false ↓ audit: true - name: OrderStatus 4. |varchar / enum |- |binary |Бінарні інформаційні дані. schema.yml 4. |- |unique |boolean |Унікальність. |- |indexed |boolean |Ні |Чи створювати індекс. |- |Ctrl + колесо миші |Масштабування. |Order → Customer. Додає поля id, name, email, phone. Запускає валідацію. |numeric(12,2) |- |float |Число з плаваючою точкою.=== 13.1. Призначення === description: Customer master data == 8. Сутності == 4. |Ні. |- |display_field |Головне поле для відображення. |- |Користувачі зламають модель через YAML-редактор |Неможливо згенерувати код. !Дія !SEO-опис === 7.3. Відображення сутності === 4. |- |default |Значення за замовчуванням. |- |to_entity |string |Так |Цільова сутність.=== 35.7. Генерація === length: 50 !Результат ↓ 1. enabled: true - name: chk_order_amount_positive * створювати сутності; * переміщувати сутності; * змінювати розміри блоків; * створювати звʼязки drag-and-drop; * групувати сутності по доменах; * масштабувати діаграму; * переміщувати полотно; * автоматизовано розкладати схему; * фільтрувати видимі сутності; * шукати сутності та поля; * підсвічувати залежності; * відкривати властивості сутності, поля або звʼязку. |} === 9.1. Основні властивості поля === === 14.2. Загальна структура YAML === === 15.1. Правила синхронізації === 14. Архітектор створює модель “K2 Sales Model”. |- |Циклічні cascade-звʼязки |Warning/Error |Можуть створити проблеми при видаленні. |- |POST |/api/er-models |Створити модель. |PascalCase: CustomerOrder. |} === 10.2. Властивості звʼязку === order: 30 Приклад:<syntaxhighlight lang="yaml"> * читабельним; * стабільним для git-diff; * структурованим; * незалежним від конкретного ORM; * придатним для автоматичної генерації коду; * валідованим через schema validator; * версіонованим. * YAML; * JSON; * SQL DDL; * PNG/SVG діаграми; * PDF документацію; * Markdown документацію; * Mermaid ER diagram; * PlantUML. |- |description |text |SEO-опис. |- |type |enum |Так |table, view, dictionary, document, register, system. 10. |- |form_view |Які поля показувати у формі. Реалізувати enum-и.== 31. API редактора == 5. користувач системи здатна задати primary key.Для ризикових змін потрібно показувати попередження. |-
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||