file_table_reader/api/routers/datasets_router.py

98 lines
2.7 KiB
Python
Raw Normal View History

2025-11-17 03:53:15 +00:00
from fastapi import APIRouter
2025-11-24 01:57:43 +00:00
from sqlalchemy import text
from database.connection import engine
2025-11-17 03:53:15 +00:00
from services.datasets.delete import delete_dataset_from_partition # import fungsi di atas
from response import successRes, errorRes
router = APIRouter()
2025-11-24 01:57:43 +00:00
def serialize_row(row_dict):
new_dict = {}
for key, value in row_dict.items():
if hasattr(value, "isoformat"):
new_dict[key] = value.isoformat()
else:
new_dict[key] = value
return new_dict
@router.get("/metadata")
async def get_author_metadata(
# user = Depends(get_current_user)
):
"""
Mengambil data author_metadata:
- Admin semua data
- User hanya data miliknya
"""
try:
async with engine.begin() as conn:
# if user.role == "admin":
# query = text("""
# SELECT *
# FROM backend.author_metadata
# ORDER BY created_at DESC
# """)
# result = await conn.execute(query)
# else:
# query = text("""
# SELECT *
# FROM backend.author_metadata
# WHERE user_id = :uid
# ORDER BY created_at DESC
# """)
# result = await conn.execute(query, {"uid": user.id})
# rows = result.fetchall()
query = text("""
SELECT *
FROM backend.author_metadata
ORDER BY created_at DESC
""")
result = await conn.execute(query)
rows = result.fetchall()
# data = [dict(row._mapping) for row in rows]
data = [serialize_row(dict(row._mapping)) for row in rows]
return successRes(
message="Berhasil mengambil data author metadata",
data=data
)
except Exception as e:
print(f"[ERROR] Gagal ambil author_metadata: {e}")
raise errorRes(
status_code=500,
message="Gagal mengambil data author_metadata",
details=str(e)
)
@router.delete("/delete/{user_id}/{metadata_id}")
2025-11-17 03:53:15 +00:00
async def delete_dataset(user_id: int, metadata_id: int, title: str):
"""
Hapus dataset tertentu (berdasarkan user_id dan metadata_id)
"""
try:
async with engine.begin() as conn:
await delete_dataset_from_partition(conn, user_id, metadata_id, title)
return successRes(message=f"Dataset {title} berhasil dihapus.", data="")
except Exception as e:
print(f"[ERROR] Gagal hapus dataset: {e}")
raise errorRes(status_code=500, details=str(e), message="Gagal hapus dataset")
2025-12-01 02:22:43 +00:00
# @router.get("/upload/geoserver")
# async def