feat/task-type-hierarchy #5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user