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