import re from sqlalchemy import text def slugify(value: str): return re.sub(r'[^a-zA-Z0-9]+', '_', value.lower()).strip('_') async def delete_dataset_from_partition(conn, user_id: int, metadata_id: int, title: str): """ Menghapus dataset tertentu pada partisi user tertentu. - Hapus semua record di partisi (test_partition_user_{id}) - Hapus metadata dari dataset_metadata - Hapus VIEW QGIS terkait """ base_table = f"test_partition_user_{user_id}" norm_title = slugify(title) view_name = f"v_user_{user_id}_{norm_title}" print(f"[INFO] Menghapus dataset metadata_id={metadata_id} milik user_id={user_id}...") # 1️⃣ Hapus data spasial dari partisi await conn.execute(text(f"DELETE FROM {base_table} WHERE metadata_id = :mid;"), {"mid": metadata_id}) print(f"[INFO] Data spasial dari partisi {base_table} (metadata_id={metadata_id}) dihapus.") # 2️⃣ Hapus metadata dari dataset_metadata await conn.execute(text("DELETE FROM dataset_metadata WHERE id = :mid;"), {"mid": metadata_id}) print(f"[INFO] Metadata dataset id={metadata_id} dihapus dari tabel dataset_metadata.") # 3️⃣ Hapus view terkait di QGIS await conn.execute(text(f"DROP VIEW IF EXISTS {view_name} CASCADE;")) print(f"[INFO] View {view_name} dihapus (jika ada).") print("[INFO] ✅ Penghapusan dataset selesai.")