feat(election): committee meeting module — schedule, online/offline mode, soft delete, audit logging
- CommitteeMeeting entity, enums (ONLINE/OFFLINE mode, SCHEDULED/COMPLETED/CANCELLED status), repository with soft delete filter - CommitteeMeetingService + Impl: schedule, update, patchStatus, soft delete, retrieveByCommittee - CommitteeMeetingApiResource: REST endpoints at /v1/election/committee-meetings with full audit logging - ElectionAuditAction: add SCHEDULE_MEETING, UPDATE_MEETING, CANCEL_MEETING, COMPLETE_MEETING, DELETE_MEETING + FAILED variants - CommitteeService: expose getElectionIdForCommittee() for audit context - Liquibase 0351: create m_election_committee_meeting table with is_deleted soft delete column - Liquibase 0352: rename created_date/last_modified_date → created_on_utc/last_modified_on_utc to match EclipseLink base class mapping Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
a1a31aff25
commit
e72b9359c1
@@ -378,4 +378,6 @@
|
||||
<include file="parts/0348_election_config_duration_years.xml" relativeToChangelogFile="true"/>
|
||||
<include file="parts/0349_election_committee.xml" relativeToChangelogFile="true"/>
|
||||
<include file="parts/0350_committee_image.xml" relativeToChangelogFile="true"/>
|
||||
<include file="parts/0351_committee_meeting.xml" relativeToChangelogFile="true"/>
|
||||
<include file="parts/0352_committee_meeting_rename_audit_cols.xml" relativeToChangelogFile="true"/>
|
||||
</databaseChangeLog>
|
||||
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
<?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.1.xsd">
|
||||
|
||||
<changeSet id="0351-committee-meeting" author="CBS">
|
||||
<preConditions onFail="MARK_RAN">
|
||||
<not><tableExists tableName="m_election_committee_meeting"/></not>
|
||||
</preConditions>
|
||||
|
||||
<createTable tableName="m_election_committee_meeting">
|
||||
<column name="id" type="BIGSERIAL">
|
||||
<constraints primaryKey="true" nullable="false"/>
|
||||
</column>
|
||||
<column name="committee_id" type="BIGINT">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="title" type="VARCHAR(200)">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="meeting_date" type="DATE">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="meeting_time" type="VARCHAR(10)"/>
|
||||
<column name="mode" type="VARCHAR(20)">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="status" type="VARCHAR(20)" defaultValue="SCHEDULED">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="agenda" type="TEXT"/>
|
||||
<!-- Online fields -->
|
||||
<column name="platform" type="VARCHAR(50)"/>
|
||||
<column name="meeting_link" type="VARCHAR(500)"/>
|
||||
<column name="meeting_id_ref" type="VARCHAR(100)"/>
|
||||
<column name="meeting_password" type="VARCHAR(100)"/>
|
||||
<!-- Offline fields -->
|
||||
<column name="venue" type="VARCHAR(200)"/>
|
||||
<column name="address" type="TEXT"/>
|
||||
<column name="city" type="VARCHAR(100)"/>
|
||||
<!-- Soft delete -->
|
||||
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<!-- Audit -->
|
||||
<column name="created_by" type="BIGINT"/>
|
||||
<column name="created_date" type="TIMESTAMP"/>
|
||||
<column name="last_modified_by" type="BIGINT"/>
|
||||
<column name="last_modified_date" type="TIMESTAMP"/>
|
||||
</createTable>
|
||||
|
||||
<addForeignKeyConstraint
|
||||
baseTableName="m_election_committee_meeting"
|
||||
baseColumnNames="committee_id"
|
||||
referencedTableName="m_election_committee"
|
||||
referencedColumnNames="id"
|
||||
constraintName="fk_committee_meeting_committee"/>
|
||||
|
||||
<createIndex tableName="m_election_committee_meeting" indexName="idx_committee_meeting_committee_date">
|
||||
<column name="committee_id"/>
|
||||
<column name="meeting_date" descending="true"/>
|
||||
</createIndex>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
<?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.1.xsd">
|
||||
|
||||
<changeSet id="0352-committee-meeting-rename-created-date" author="CBS">
|
||||
<preConditions onFail="MARK_RAN">
|
||||
<columnExists tableName="m_election_committee_meeting" columnName="created_date"/>
|
||||
</preConditions>
|
||||
<renameColumn tableName="m_election_committee_meeting"
|
||||
oldColumnName="created_date"
|
||||
newColumnName="created_on_utc"
|
||||
columnDataType="TIMESTAMP"/>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="0352-committee-meeting-rename-modified-date" author="CBS">
|
||||
<preConditions onFail="MARK_RAN">
|
||||
<columnExists tableName="m_election_committee_meeting" columnName="last_modified_date"/>
|
||||
</preConditions>
|
||||
<renameColumn tableName="m_election_committee_meeting"
|
||||
oldColumnName="last_modified_date"
|
||||
newColumnName="last_modified_on_utc"
|
||||
columnDataType="TIMESTAMP"/>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
Reference in New Issue
Block a user