meti-backend/MIGRATION_SUMMARY.md
Aditya Siregar 826c5d26ad Add init
2025-08-15 21:17:19 +07:00

4.5 KiB

Table Restructuring Summary

Overview

This document summarizes the changes made to restructure the letter dispositions system from a single table to a more normalized structure with an association table.

Changes Made

1. Database Schema Changes

New Migration Files Created:

  • migrations/000012_rename_dispositions_table.up.sql - Main migration to restructure tables
  • migrations/000012_rename_dispositions_table.down.sql - Rollback migration

Table Changes:

  • letter_dispositionsletter_incoming_dispositions
    • Renamed table
    • Removed columns: from_user_id, to_user_id, to_department_id, status, completed_at
    • Renamed from_department_iddepartment_id
    • Added read_at column
    • Kept columns: id, letter_id, department_id, notes, read_at, created_at, created_by, updated_at

New Table Created:

  • letter_incoming_dispositions_department
    • Purpose: Associates dispositions with target departments
    • Columns: id, letter_incoming_disposition_id, department_id, created_at
    • Unique constraint on (letter_incoming_disposition_id, department_id)

2. Entity Changes

Updated Entities:

  • LetterDispositionLetterIncomingDisposition
    • Simplified structure with only required fields
    • New table name mapping

New Entity:

  • LetterIncomingDispositionDepartment
    • Represents the many-to-many relationship between dispositions and departments

3. Repository Changes

Updated Repositories:

  • LetterDispositionRepositoryLetterIncomingDispositionRepository
    • Updated to work with new entity

New Repository:

  • LetterIncomingDispositionDepartmentRepository
    • Handles CRUD operations for the association table
    • Methods: CreateBulk, ListByDisposition

4. Processor Changes

Updated Processor:

  • LetterProcessorImpl
    • Added new repository dependency
    • Updated CreateDispositions method to:
      • Create main disposition record
      • Create department association records
      • Maintain existing action selection functionality

5. Transformer Changes

Updated Transformer:

  • DispositionsToContract function
    • Updated to work with new entity structure
    • Maps new fields: DepartmentID, ReadAt, UpdatedAt
    • Removed old fields: FromDepartmentID, ToDepartmentID, Status

6. Contract Changes

Updated Contract:

  • DispositionResponse struct
    • Updated fields to match new entity structure
    • Added ReadAt and UpdatedAt fields
    • Replaced FromDepartmentID and ToDepartmentID with DepartmentID

7. Application Configuration Changes

Updated App Configuration:

  • internal/app/app.go
    • Updated repository initialization
    • Added new repository dependency
    • Updated processor initialization with new repository

Migration Process

Up Migration (000012_rename_dispositions_table.up.sql):

  1. Rename letter_dispositions to letter_incoming_dispositions
  2. Drop unnecessary columns
  3. Rename from_department_id to department_id
  4. Add missing columns (read_at, updated_at)
  5. Create new association table
  6. Update triggers and indexes

Down Migration (000012_rename_dispositions_table.down.sql):

  1. Drop association table
  2. Restore removed columns
  3. Rename department_id back to from_department_id
  4. Restore old triggers and indexes
  5. Rename table back to letter_dispositions

Benefits of New Structure

  1. Normalization: Separates disposition metadata from department associations
  2. Flexibility: Allows multiple departments per disposition
  3. Cleaner Data Model: Removes redundant fields and simplifies the main table
  4. Better Performance: Smaller main table with focused indexes
  5. Easier Maintenance: Clear separation of concerns

Breaking Changes

  • Table name change from letter_dispositions to letter_incoming_dispositions
  • Entity structure changes (removed fields, renamed fields)
  • Repository interface changes
  • API response structure changes

Testing Recommendations

  1. Run migration on test database
  2. Test disposition creation with new structure
  3. Verify department associations are created correctly
  4. Test existing functionality (action selections, notes)
  5. Verify rollback migration works correctly

Rollback Plan

If issues arise, the down migration will:

  1. Restore the original table structure
  2. Preserve all existing data
  3. Remove the new association table
  4. Restore original triggers and indexes