file_table_reader/services/datasets/delete.py

34 lines
1.3 KiB
Python
Raw Permalink Normal View History

2025-11-17 03:53:15 +00:00
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.")