feat(dict): delete dictionary endpoint + UI button с cascade safety
This commit is contained in:
+84
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
||||
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.27.xsd">
|
||||
|
||||
<!--
|
||||
ON DELETE CASCADE для FK на dictionary_definitions(id).
|
||||
|
||||
Контекст: feature `DELETE /api/v1/dictionaries/{name}`. Service.delete
|
||||
выполняет SINGLE `definitionRepository.deleteById` — без ON CASCADE
|
||||
Postgres reject'нул бы с violation (dictionary_records → 23503). Тогда
|
||||
Java logic должен был бы вручную в правильном порядке deleteByDictionaryId
|
||||
на N+ child tables, что error-prone и не атомарно.
|
||||
|
||||
CASCADE на FK — Postgres делает delete детей в одной транзакции,
|
||||
атомарно. Audit log + outbox events не имеют FK constraints (они
|
||||
audit-style append-only), delete их выполняется в Java service
|
||||
явным DELETE WHERE aggregate_id=<defId>.
|
||||
|
||||
Child tables (FK references dictionary_definitions(id)):
|
||||
- dictionary_records (0003)
|
||||
- record_drafts (0019)
|
||||
- dictionary_schema_drafts (0022)
|
||||
-->
|
||||
|
||||
<changeSet id="0030-1-dictionary-records-cascade" author="ordinis">
|
||||
<comment>FK fk_record_dictionary → ON DELETE CASCADE</comment>
|
||||
<sql>
|
||||
ALTER TABLE dictionary_records
|
||||
DROP CONSTRAINT IF EXISTS fk_record_dictionary;
|
||||
ALTER TABLE dictionary_records
|
||||
ADD CONSTRAINT fk_record_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id)
|
||||
ON DELETE CASCADE;
|
||||
</sql>
|
||||
<rollback>
|
||||
ALTER TABLE dictionary_records
|
||||
DROP CONSTRAINT IF EXISTS fk_record_dictionary;
|
||||
ALTER TABLE dictionary_records
|
||||
ADD CONSTRAINT fk_record_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id);
|
||||
</rollback>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="0030-2-record-drafts-cascade" author="ordinis">
|
||||
<comment>FK fk_draft_dictionary → ON DELETE CASCADE</comment>
|
||||
<sql>
|
||||
ALTER TABLE record_drafts
|
||||
DROP CONSTRAINT IF EXISTS fk_draft_dictionary;
|
||||
ALTER TABLE record_drafts
|
||||
ADD CONSTRAINT fk_draft_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id)
|
||||
ON DELETE CASCADE;
|
||||
</sql>
|
||||
<rollback>
|
||||
ALTER TABLE record_drafts
|
||||
DROP CONSTRAINT IF EXISTS fk_draft_dictionary;
|
||||
ALTER TABLE record_drafts
|
||||
ADD CONSTRAINT fk_draft_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id);
|
||||
</rollback>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="0030-3-schema-drafts-cascade" author="ordinis">
|
||||
<comment>FK fk_schema_draft_dictionary → ON DELETE CASCADE</comment>
|
||||
<sql>
|
||||
ALTER TABLE dictionary_schema_drafts
|
||||
DROP CONSTRAINT IF EXISTS fk_schema_draft_dictionary;
|
||||
ALTER TABLE dictionary_schema_drafts
|
||||
ADD CONSTRAINT fk_schema_draft_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id)
|
||||
ON DELETE CASCADE;
|
||||
</sql>
|
||||
<rollback>
|
||||
ALTER TABLE dictionary_schema_drafts
|
||||
DROP CONSTRAINT IF EXISTS fk_schema_draft_dictionary;
|
||||
ALTER TABLE dictionary_schema_drafts
|
||||
ADD CONSTRAINT fk_schema_draft_dictionary
|
||||
FOREIGN KEY (dictionary_id) REFERENCES dictionary_definitions(id);
|
||||
</rollback>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
@@ -39,5 +39,6 @@
|
||||
<include file="changes/0027-spacecraft-mission-fk.xml" relativeToChangelogFile="true"/>
|
||||
<include file="changes/0028-phase3-prep-org-id.xml" relativeToChangelogFile="true"/>
|
||||
<include file="changes/0029-drop-self-approve-constraints.xml" relativeToChangelogFile="true"/>
|
||||
<include file="changes/0030-dictionary-delete-cascade.xml" relativeToChangelogFile="true"/>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
||||
Reference in New Issue
Block a user