Add /api/admin/reset/{section} endpoint for Danger Zone reset
This commit is contained in:
@@ -1928,6 +1928,28 @@ async def restore_backup(
|
|||||||
shutil.copy2(fp, src)
|
shutil.copy2(fp, src)
|
||||||
return {"restored": filename, "auto_backup": auto_dst.name if src.exists() else None}
|
return {"restored": filename, "auto_backup": auto_dst.name if src.exists() else None}
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/api/admin/reset/{section}")
|
||||||
|
async def reset_section(
|
||||||
|
section: str,
|
||||||
|
current_user: User = Depends(get_current_admin),
|
||||||
|
):
|
||||||
|
"""Reset (truncate) a specific data section. Creates auto-backup first."""
|
||||||
|
valid = {"attendance": AttendanceRecord, "holidays": Holiday, "leaves": LeaveRecord}
|
||||||
|
if section not in valid:
|
||||||
|
raise HTTPException(status_code=400, detail=f"Unknown section: {section}")
|
||||||
|
# Auto-backup before reset
|
||||||
|
src = Path(DB_PATH)
|
||||||
|
if src.exists():
|
||||||
|
auto_dst = _backup_path(f"auto_pre_{section}_reset")
|
||||||
|
shutil.copy2(src, auto_dst)
|
||||||
|
# Truncate table
|
||||||
|
model = valid[section]
|
||||||
|
db.execute(model.__table__.delete())
|
||||||
|
db.commit()
|
||||||
|
return {"reset": section, "auto_backup": auto_dst.name}
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/version")
|
@app.get("/api/version")
|
||||||
async def get_version(
|
async def get_version(
|
||||||
current_user: User = Depends(get_current_user),
|
current_user: User = Depends(get_current_user),
|
||||||
|
|||||||
Reference in New Issue
Block a user