Перейти до вмісту

Технічне завдання: Редактор ER-моделей K2 ERP

Матеріал з K2 ERP Wiki

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. Надійність

  • core;
  • crm;
  • sales;
  • purchases;
  • warehouse;
  • finance;
  • hr;
  • affiliate;
  • integrations. |-
value string - Великі моделі будуть повільно відкриватися Поганий UX. indexed: true

Для MVP достатньо реалізувати створення сутностей, полів, звʼязків, enum-ів, YAML import/export, базову валідацію, SQL DDL generator і Python SQLAlchemy generator. |-

label string - ORM-agnostic }

35.2. Робота з сутностями

  • мова програмування;
  • ORM;
  • output path;
  • naming strategy;
  • чи генерувати міграції;
  • чи генерувати relationships;
  • чи генерувати validation schemas;
  • чи генерувати DTO;
  • чи перезаписувати файли;
  • чи використовувати partial classes / custom blocks. * створити звʼязок;
  • редагувати звʼязок;
  • видалити звʼязок;
  • перейти до повʼязаної сутності;
  • автоматизовано створити FK-поле.=== 16.1. Обовʼязкові перевірки ===
Генератор

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_versions

7.4. Візуальні позначення

Приклад check-constraint:
 ↓
<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.
Для ризикових змін потрібно показувати попередження. |-
check - UQ } Роль

4. Поля: 2. Генерує SQLAlchemy-моделі. Реалізувати додавання полів. |-

enum reference Ні - generated boolean Ні numeric(15,2)
reference - index_prefix - archived - created_by reference }

Графічне полотно має дозволяти: 11. |-

review }

17.3. конфігурація генерації

output: ./generated/python
  • графічне полотно ER-діаграми;
  • панель інструментів;
  • дерево моделі;
  • панель властивостей;
  • YAML-редактор;
  • валідатор моделі;
  • менеджер звʼязків;
  • менеджер enum-ів;
  • менеджер індексів;
  • менеджер версій;
  • генератор ORM;
  • перегляд згенерованого коду;
  • експорт та імпорт;
  • журнал змін. |smallint
decimal - soft_delete boolean Ні - Унікальність table Error class="wikitable"
  • створення сутності;
  • переміщення сутності;
  • додавання поля;
  • зміна поля;
  • створення звʼязку;
  • видалення звʼязку;
  • зміна YAML.=== 8.2. Типи сутностей ===
Тип

6. Загальний вигляд інтерфейсу

table_case: snake_case

4. |stock_movements, account_entries. |-

updated_at datetime - current_version_id uuid Поточна реліз системи.
K2 ER Editor
3. |-
|Delete
|Видалення вибраного елемента після підтвердження. |-
|name
|string
|Назва моделі. |Обовʼязкова валідація перед збереженням.<pre>
 display_field: name
платформа має:
3. користувач системи здатна створити нову ER-модель. Якщо YAML валідний — оновлюється діаграма.== 22. Імпорт ==
 constraints:
У майбутніх версіях бажано підтримати командну роботу. {| class="wikitable"
 enum_case: PascalCase
{| class="wikitable"
!Обовʼязкове
5. |}

!Наслідок

!Тип
1. |-
|list_view
|Які поля показувати в списку. {| class="wikitable"
 - name: customer_id
2. |-
|old_value
|Старе значення. YAML export/import. |-
|length
|integer
|Ні
|Довжина для string. C# Entity Framework generator
schema.yml
== 10. Звʼязки між сутностями ==
 - name: prisma

1. YAML-файл має бути:

Поле
backref: orders

5. Перевірка enum. +--------------------------------------------------------------------------------+ schema_v1.yml

  • name;
  • table;
  • label;
  • module;
  • schema;
  • type;
  • description;
  • audit;
  • timestamps;
  • soft_delete. |time
json Medium. CI/CD генерує ORM та міграції.

32.1. Сутність er_models

- name
relation_mode: foreignKeys
Кожна сутність на діаграмі має відображатися як блок:
Картка сутності має містити вкладки:
 ↓
!Поле
2. 3. 4. |-
|Backend-розробник
|Використовує YAML для генерації ORM. |-
|dictionary
|Довідник. |snake_case: customer_orders. |-
|unique
|Унікальний індекс. !SEO-опис
 module: crm

!Тип

15. |-
|self_reference
|Посилання сутності на саму себе. Узгодити набір типів даних. |-
|Валідність reference
|Error
|FK має посилатися на існуючу сутність і поле. ↓
{| class="wikitable"
Функції:
 expression: "amount >= 0"
 type: document

== 30. UI metadata ==

schema.yml
{| class="wikitable"

* історію версій;
* порівняння версій;
* rollback до попередньої версії;
* коментар до версії;
* автора зміни;
* дату зміни;
* статус версії. schema.yml
5.<pre>
{| class="wikitable"
2. користувач системи здатна видалити сутність після підтвердження. Якщо YAML невалідний — показується помилка з рядком і полем.=== 33.3. Безпека ===
</syntaxhighlight>
!Поле

3. |-
|many_to_many
|Багато до багатьох через проміжну таблицю. |-
|field_case
|Формат назв полів. |-
|version
|integer
|реліз системи запису для optimistic locking. |-
|object_name
|Назва обʼєкта. |-
|deleted_at
|datetime
|Дата мʼякого видалення. |-
|GET
|/api/er-models/{id}
|Отримати модель. Створює enum OrderStatus. |-
|deprecated
|boolean
|Чи значення застаріле. 3.<pre>
 - email
 - value: draft
== 2. Основна концепція ==
!Тип
|-
|entity_case
|Формат назв сутностей. 1. Помилки YAML показуються користувачу. Генерація Python SQLAlchemy. !Приклад

!Поле
При створенні звʼязку редактор має запропонувати:
 options:
 type: many_to_one
== 38. Рекомендований план реалізації ==
 base_class: Base
 default_schema: public

!SEO-опис
<pre>
Потрібно зберігати історію змін. settings:
 label: K2 ERP
2. |-
|Двостороння синхронізація
|Зміни на діаграмі оновлюють YAML, а зміни YAML оновлюють діаграму. |-
|label
|string
|Людинозрозуміла назва. Зберігає версію 0.1.0. |-
|SYS
|System field. |-
|document
|Документ ERP. |Low. Створює сутність Customer. |-
|search_fields
|Поля для пошуку. |Ні. Реалізувати FK-звʼязки. |-
|order
|integer
|Порядок відображення. |-
|IDX
|Indexed field. |-
|precision
|integer
|Ні
|Точність для decimal. - name: name
 label: Paid

 color: green
 - name: customer

* пошук сутності за назвою;
* пошук поля;
* пошук таблиці;
* пошук enum;
* пошук звʼязків;
* фільтр за модулем;
* фільтр за типом сутності;
* фільтр за помилками валідації;
* перехід від поля FK до повʼязаної сутності;
* підсвічування усіх звʼязків вибраної сутності. Додає модулі crm і sales. |-
|approved
|Затверджено. |-
|GET
|/api/er-models/{id}/versions
|Отримати версії. |-
|indexes
|list
|Ні
|Індекси. |-
|Ctrl + Y
|Повтор дії. |Low. Згенерований код можна переглянути перед завантаженням. |-
|Додано індекс
|Add idx_customer_email. |-
|foreign_key
|Зовнішній ключ. |}

 name: k2_erp

 unique: true
 generate_relationships: true
</syntaxhighlight>
 type: uuid
7. |-
|created_at
|datetime
|Дата створення. - phone
Редактор має показувати попередній перегляд:<pre>
 ↓
 label: Customer
3.<pre>
 label: CRM
=== 11.1. Типи індексів ===
14. Узгодити YAML-схему. користувач системи здатна задати unique та index. | Дерево моделі | Графічне полотно ER-діаграми | Властивості |
| | | |
| - Entities | +-------------+ +-------------+ | Entity/Field |
| - Customer | | Customer | 1 N | Order | | properties |
| - Order | |-------------|-------|-------------| | |
| - Enums | | id | | id | | |
| - Relations | | name | | customer_id | | |
| - Indexes | +-------------+ +-------------+ | |
 soft_delete: true
| Нижня панель: Errors | Warnings | YAML | Generated Code | Migration Preview |
</syntaxhighlight>
Приклад YAML:<syntaxhighlight lang="yaml">

5. |-
|Warning
|Потенційна проблема. |Єдиний контракт YAML і тестові fixtures. |-
|Генератори різних мов працюватимуть по-різному
|Розбіжності в ORM. |-
|fields
|list
|Так
|Список полів. Створює сутність Order. models.py
{| class="wikitable"
{| class="wikitable"
 nullable: false
|-
|Додана таблиця
|Add Customer. description: Customer sales order
 audit: true
Laravel Eloquent models

35.5. YAML

35.6. Валідація

color: gray

19. Версіонування моделей

naming_strategy: snake_case

SQLAlchemy models

- email

generator-python-sqlalchemy

Приклад

Приклади дій, які мають підтримувати undo: 1. 5. |-

DEF - view Представлення. YAML можна імпортувати назад. Обробка помилок генерації. Реалізувати створення моделі. Збереження версій.=== 7.1. Основні вимоги === Рівень
type: string

Етап 7. 38.7. Версіонування та audit

Архітектор - status enum bigint
smallint fk_. |- action Тип дії.== 29. UI для редагування сутності ==

modules:

default: 0
name string }

Сутність відповідає таблиці, колекції або ORM-класу. |users, roles, audit_log. Реалізувати export YAML. |-

description text double precision
boolean - yaml_content text - reference reference Ні High. {| class="wikitable"
- value: confirmed

Редактор має підтримувати розбиття моделі на модулі. Невалідну модель не можна перевести в released. |-

RO Customer → Orders. Реалізувати YAML preview. |- POST /api/er-models/{id}/generate Запустити генерацію. 4.=== 17.1. Основна ідея === Рівень ризику
name string Так Назва звʼязку. type: check

35.1. Створення моделі

27. Collaboration

description: Main K2 ERP data model

14.1. Основні вимоги до YAML

name string Так Технічна назва сутності. 3. type: string

Генератори

Error - schema string Ні Схема БД, як приклад public, sales, crm. Статуси draft/review/approved/released. indexes:
  • створювати структуру бази даних у візуальному режимі;
  • описувати таблиці, поля, типи даних, звʼязки та обмеження;
  • задавати індекси, ключі, enum-и, довідники та технічні метадані;
  • зберігати модель у форматі YAML;
  • версіонувати зміни структури;
  • перевіряти модель на помилки;
  • використовувати YAML як єдине джерело правди для генерації ORM;
  • генерувати ORM-код для різних мов програмування через окремі генератори;
  • формувати документацію по структурі бази даних;
  • підтримувати командну роботу над моделями. - name: idx_customers_email
index_prefix: idx_

schema.yml

39. Висновок

type: decimal

4. Основні користувачі

12. |-

system boolean Ні - YAML як source of truth - C# Entity Framework Середній Entity classes, DbContext. timestamps: true Тип
  • перевіряти права доступу;
  • обмежувати генерацію коду тільки авторизованим користувачам;
  • не дозволяти виконання довільного коду з YAML;
  • перевіряти YAML на небезпечні конструкції;
  • логувати імпорт та експорт моделей. |-
updated_by reference користувач системи, який оновив запис.=== Етап 6. 38.6. Генерація ===
  • створити індекс;
  • обрати поля;
  • задати unique;
  • задати тип індексу;
  • задати condition. |-
Індекс для FK Warning FK-поля рекомендовано індексувати.=== 27.2. Наступні версії ===

9. |-

nullable boolean Так Чи здатна бути null. on_update: cascade

Функції:

Model-first currencies, countries, units. |- color string - many_to_one }

Редактор має складатися з таких частин: Графічний ER-редактор

nullable: true
- value: cancelled
Розробник

6. |User → UserProfile. |-

audit boolean Ні Чи вести історію змін. 13. Генерація для всіх ORM. table: customers Поле
- name: chk_orders_amount_positive

29.1. General

1. 5. Створення ER-моделі. |-

Видалено таблицю - module string Ні date
datetime }

schema.prisma

provider: postgresql
  • скасування останньої дії;
  • повтор скасованої дії;
  • історію дій у межах поточної сесії;
  • підтвердження для небезпечних дій. |}
DBA
- email

4. |-

label string Ні integer
bigint - TypeScript Prisma Високий schema.prisma. * створення сутності;
  • видалення сутності;
  • перейменування сутності;
  • додавання поля;
  • видалення поля;
  • зміну типу поля;
  • зміну nullable;
  • зміну primary key;
  • створення звʼязку;
  • видалення звʼязку;
  • зміну індексу;
  • зміну enum;
  • імпорт;
  • експорт;
  • генерацію ORM;
  • затвердження версії. |}

38.1. Етап 1. аналітичні інструменти

1. icon: user

2. |Migration preview і high-risk warnings. Узгодити MVP-генератори. |-

POST /api/er-models/{id}/validate Провалідувати модель. Перевірка унікальності сутностей. version: 1 Режим
expression: "amount >= 0"

9. Поля сутності

2. |-

primary_key boolean Ні }
module: sales
- name: python_sqlalchemy
Як зменшити

generator-php-laravel

Приклад:
!SEO-опис
 label: Order status
entities:

3. користувач системи здатна вибрати тип даних. |}

12. +-----------------------------+
Редактор має підтримувати два режими роботи:
== 7. Графічне полотно ER-діаграми ==

 - value: paid
Приклад:<syntaxhighlight lang="yaml">
!SEO-опис
 default_id_type: uuid
Приклад цільової схеми:

=== 9.2. Підтримувані типи даних === 3. Узгодити правила naming strategy. Коментарі на діаграмі. |}

!Поле 1. |- |Nullable FK |Warning |Якщо relation required=true, FK не має бути nullable. naming_strategy: snake_case Редактор має підтримувати імпорт із:

values:

3. 3. |- |POST |/api/er-models/{id}/export |Експорт моделі. nullable: false

label: Confirmed

Редактор має підтримувати правила іменування. |}

== 15. Двостороння синхронізація Diagram ↔ YAML == !Дія 3. Реалізувати відображення кардинальності. |}

!SEO-опис

nullable: false
↓

17.2. Підтримувані генератори в MVP

schema_v2.yml

20. Робота з модулями K2 ERP

- name: number
  • тип звʼязку;
  • поле FK або створення нового FK-поля;
  • назву звʼязку;
  • назву backref;
  • поведінку при delete;
  • поведінку при update;
  • чи виступає як звʼязок обовʼязковим;
  • чи створювати індекс на FK. |-
created_by reference Автор. - name: id
type: string
  • імпорт YAML;
  • імпорт із існуючої PostgreSQL БД;
  • імпорт SQL DDL у базовому режимі. |-
constraints list Ні Обмеження.=== 22.1. Джерела імпорту ===

1. |} Eloquent Models + Migrations Розробити в K2 ERP графічний редактор ER-моделей, який дає можливість:

SEO-опис

3. |-

Primary key Error - model_id uuid - deleted_by reference користувач системи, який видалив запис. timestamps: true

6. Індекси. Додає поля id, customer_id, number, status, amount. |snake_case: customer_id. 2. |customer_balance_view. |-

column string Ні Назва колонки в БД, якщо відрізняється від name. YAML-модель

Редактор має мати API для інтеграції з іншими частинами K2 ERP. |foreign key

label: Order Окремо варто відзначити полів, звʼязків, індексів, обмежень, бізнес-метаданих і подальшого збереження моделі у форматі YAML.== 16. Валідація моделі == 13. nullable: false