34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
|
|
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.")
|