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).