diff --git a/app/api/routers/projects.py b/app/api/routers/projects.py index 0424275..d790144 100644 --- a/app/api/routers/projects.py +++ b/app/api/routers/projects.py @@ -228,6 +228,38 @@ def delete_project( project = db.query(models.Project).filter(models.Project.id == project_id).first() if not project: raise HTTPException(status_code=404, detail="Project not found") + + project_code = project.project_code + + # Delete milestones and their issues + from app.models.milestone import Milestone + milestones = db.query(Milestone).filter(Milestone.project_id == project_id).all() + for ms in milestones: + # Delete issues under milestone + issues = db.query(models.Issue).filter(models.Issue.milestone_id == ms.id).all() + for issue in issues: + db.delete(issue) + db.delete(ms) + + # Delete project members + members = db.query(models.ProjectMember).filter(models.ProjectMember.project_id == project_id).all() + for m in members: + db.delete(m) + + # Remove from other projects' sub_projects and related_projects + import json + all_projects = db.query(models.Project).all() + for p in all_projects: + if p.sub_projects and project_code in p.sub_projects: + subs = json.loads(p.sub_projects) if p.sub_projects else [] + subs = [s for s in subs if s != project_code] + p.sub_projects = json.dumps(subs) if subs else None + + if p.related_projects and project_code in p.related_projects: + related = json.loads(p.related_projects) if p.related_projects else [] + related = [r for r in related if r != project_code] + p.related_projects = json.dumps(related) if related else None + db.delete(project) db.commit() return None