schema / migration / 010-cleanup-tasks-court4-devices-events

010 - Cleanup tasks, Court 4, debug devices, events title

  • Tanggal: 2026-08-10
  • DB: mpcdb (PostgreSQL)
  • Ringkas: Drop tasks; hard-delete Court 4; soft-delete debug POS devices; drop obsolete events.title jika ada.

ALTER (jalankan di DB server)

-- 1) Drop internal kanban tasks
DROP TABLE IF EXISTS tasks;

-- 2) Hard-delete Court 4 (and any non CRT-01/02/03 leftovers)
-- Clear dependent rows that reference the court first
DELETE FROM review_answers
WHERE review_id IN (
  SELECT id FROM customer_reviews
  WHERE booking_id IN (
    SELECT id FROM bookings WHERE court_id IN (
      SELECT id FROM courts WHERE code = 'CRT-04' OR (name ILIKE 'Court 4%' AND code NOT IN ('CRT-01','CRT-02','CRT-03'))
    )
  )
);
DELETE FROM customer_reviews
WHERE booking_id IN (
  SELECT id FROM bookings WHERE court_id IN (
    SELECT id FROM courts WHERE code = 'CRT-04' OR (name ILIKE 'Court 4%' AND code NOT IN ('CRT-01','CRT-02','CRT-03'))
  )
);
DELETE FROM bookings
WHERE court_id IN (
  SELECT id FROM courts WHERE code = 'CRT-04' OR (name ILIKE 'Court 4%' AND code NOT IN ('CRT-01','CRT-02','CRT-03'))
);
DELETE FROM courts
WHERE code = 'CRT-04'
   OR (code NOT IN ('CRT-01','CRT-02','CRT-03') AND name ILIKE 'Court 4%');

-- 3) Soft-delete non-prod POS devices
UPDATE pos_devices
SET deleted_at = NOW(),
    status = 'Revoked',
    updated_at = NOW()
WHERE deleted_at IS NULL
  AND (
    name IN ('debug-agent', 'Smoke Kasir')
    OR lower(name) LIKE '%debug%'
    OR lower(name) LIKE '%smoke%'
  );

-- 4) Events: prefer name; drop title column if present (copy title→name when name empty)
DO $$
BEGIN
  IF EXISTS (
    SELECT 1 FROM information_schema.columns
    WHERE table_schema = 'public' AND table_name = 'events' AND column_name = 'title'
  ) THEN
    UPDATE events
    SET name = NULLIF(BTRIM(title), '')
    WHERE (name IS NULL OR BTRIM(name) = '')
      AND title IS NOT NULL
      AND BTRIM(title) <> '';
    ALTER TABLE events DROP COLUMN title;
  END IF;
END $$;

Rollback (opsional)

-- tasks / Court 4 / devices: restore from backup only
-- events.title:
-- ALTER TABLE events ADD COLUMN title text;

Catatan

  • Admin developers Task UI dihapus di app (bukan hanya DB).
  • Hanya 3 courts aktif yang tersisa (CRT-01..03).