From f50cf2b7f62a00affe502e80ecc0785272af773b Mon Sep 17 00:00:00 2001 From: serversdown Date: Wed, 1 Apr 2026 05:42:10 +0000 Subject: [PATCH] feat: add functionality to manage deleted projects in settings - Introduced a new section for displaying soft-deleted projects. - Implemented loading of deleted projects via an API call. - Added restore and permanently delete options for each deleted project. - Integrated loading of deleted projects when the data tab is shown. --- backend/routers/projects.py | 34 + .../partials/projects/location_list.html | 5 - templates/projects/detail.html | 622 ++++++++++-------- templates/settings.html | 83 ++- 4 files changed, 458 insertions(+), 286 deletions(-) diff --git a/backend/routers/projects.py b/backend/routers/projects.py index 53a4bf5..bc40b1b 100644 --- a/backend/routers/projects.py +++ b/backend/routers/projects.py @@ -654,6 +654,40 @@ async def create_project(request: Request, db: Session = Depends(get_db)): }) +@router.get("/deleted") +async def list_deleted_projects(db: Session = Depends(get_db)): + """List all soft-deleted projects.""" + projects = ( + db.query(Project) + .filter(Project.status == "deleted") + .order_by(Project.deleted_at.desc()) + .all() + ) + return JSONResponse([ + { + "id": p.id, + "name": p.name, + "client_name": p.client_name, + "deleted_at": p.deleted_at.isoformat() if p.deleted_at else None, + } + for p in projects + ]) + + +@router.post("/{project_id}/restore") +async def restore_project(project_id: str, db: Session = Depends(get_db)): + """Restore a soft-deleted project back to active.""" + project = db.query(Project).filter_by(id=project_id).first() + if not project: + raise HTTPException(status_code=404, detail="Project not found") + if project.status != "deleted": + raise HTTPException(status_code=400, detail="Project is not deleted") + project.status = "active" + project.deleted_at = None + db.commit() + return {"success": True, "message": f"Project '{project.name}' restored."} + + @router.get("/{project_id}") async def get_project(project_id: str, db: Session = Depends(get_db)): """ diff --git a/templates/partials/projects/location_list.html b/templates/partials/projects/location_list.html index c455927..9c8219a 100644 --- a/templates/partials/projects/location_list.html +++ b/templates/partials/projects/location_list.html @@ -10,11 +10,6 @@ class="font-semibold text-gray-900 dark:text-white hover:text-seismo-orange truncate"> {{ item.location.name }} - {% if item.location.location_type %} - - {{ item.location.location_type|capitalize }} - - {% endif %} {% if item.location.description %}

{{ item.location.description }}

diff --git a/templates/projects/detail.html b/templates/projects/detail.html index 9e42246..6cc60ed 100644 --- a/templates/projects/detail.html +++ b/templates/projects/detail.html @@ -35,30 +35,21 @@ class="tab-button px-4 py-3 border-b-2 font-medium text-sm transition-colors border-seismo-orange text-seismo-orange whitespace-nowrap"> Overview - - - - - - + +