-- Buat tabel users
CREATE TABLE IF NOT EXISTS users (
username TEXT PRIMARY KEY, password TEXT NOT NULL,
name TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'staff',
created_at TIMESTAMPTZ DEFAULT NOW()
);
INSERT INTO users (username, password, name, role) VALUES
('ADMIN','admin123','Administrator','admin'),
('FAZA','faza123','FAZA','staff'),('ZEFA','zefa123','ZEFA','staff'),
('AMIN','amin123','AMIN','staff'),('ERWIN','erwin123','ERWIN','staff'),
('PEBI','pebi123','PEBI','staff')
ON CONFLICT (username) DO NOTHING;
-- Buat tabel tickets (Tanpa kolom closed_at)
CREATE TABLE IF NOT EXISTS tickets (
id TEXT PRIMARY KEY, connote TEXT NOT NULL, pic TEXT,
complaint TEXT, reason TEXT, coding_destination TEXT,
status TEXT DEFAULT 'open', remark TEXT, bukti_foto TEXT,
created_by TEXT, updated_by TEXT,
reopen_count INTEGER DEFAULT 0, reopen_date TIMESTAMPTZ,
date_in_progress TIMESTAMPTZ, date_on_confirm TIMESTAMPTZ,
date_resolved TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW()
);
2. Migrasi & Pembersihan Kolom
-- Tambah kolom yang belum ada
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS date_in_progress TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS date_on_confirm TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS date_resolved TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS reopen_date TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS reopen_count INTEGER DEFAULT 0;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS remark TEXT;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS bukti_foto TEXT;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS created_by TEXT;
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS updated_by TEXT;
-- Salin data dari resolved_at ke date_resolved (jika kolom masih ada)
UPDATE tickets SET date_resolved = COALESCE(date_resolved, resolved_at, updated_at)
WHERE status='resolved' AND date_resolved IS NULL;
-- Isi tanggal berdasarkan status lama yang kosong
UPDATE tickets SET date_in_progress = updated_at
WHERE status IN ('in_progress','on_confirm','resolved') AND date_in_progress IS NULL;
UPDATE tickets SET date_on_confirm = updated_at
WHERE status IN ('on_confirm','resolved') AND date_on_confirm IS NULL;
UPDATE tickets SET date_resolved = updated_at
WHERE status='resolved' AND date_resolved IS NULL;
UPDATE tickets SET reopen_count = 0 WHERE reopen_count IS NULL;
UPDATE tickets SET created_by = pic WHERE created_by IS NULL;
-- Ubah semua status closed menjadi resolved (Karena status closed sudah dihapus dari sistem)
UPDATE tickets SET status = 'resolved', date_resolved = COALESCE(date_resolved, closed_at, updated_at) WHERE status = 'closed';
-- HAPUS kolom yang tidak terpakai
ALTER TABLE tickets DROP COLUMN IF EXISTS resolved_at;
ALTER TABLE tickets DROP COLUMN IF EXISTS date_reopened;
ALTER TABLE tickets DROP COLUMN IF EXISTS closed_at;
3. RLS
GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE public.users TO anon;
GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE public.tickets TO anon;
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.tickets ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Allow anon access users" ON public.users;
DROP POLICY IF EXISTS "Allow anon access tickets" ON public.tickets;
CREATE POLICY "Allow anon access users" ON public.users FOR ALL TO anon USING (true) WITH CHECK (true);
CREATE POLICY "Allow anon access tickets" ON public.tickets FOR ALL TO anon USING (true) WITH CHECK (true);