feat: implement activity removal from trail and update UI for unmarking activities

This commit is contained in:
swve 2025-04-16 15:24:40 +02:00
parent b25505465b
commit 1350cb7354
4 changed files with 150 additions and 6 deletions

View file

@ -10,6 +10,7 @@ from src.services.trail.trail import (
get_user_trails,
get_user_trail_with_orgid,
remove_course_from_trail,
remove_activity_from_trail,
)
@ -95,3 +96,16 @@ async def api_add_activity_to_trail(
return await add_activity_to_trail(
request, user, activity_uuid, db_session
)
@router.delete("/remove_activity/{activity_uuid}")
async def api_remove_activity_from_trail(
request: Request,
activity_uuid: str,
user=Depends(get_current_user),
db_session=Depends(get_db_session),
) -> TrailRead:
"""
Remove Activity from trail
"""
return await remove_activity_from_trail(request, user, activity_uuid, db_session)

View file

@ -282,6 +282,79 @@ async def add_activity_to_trail(
return trail_read
async def remove_activity_from_trail(
request: Request,
user: PublicUser,
activity_uuid: str,
db_session: Session,
) -> TrailRead:
# Look for the activity
statement = select(Activity).where(Activity.activity_uuid == activity_uuid)
activity = db_session.exec(statement).first()
if not activity:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Activity not found"
)
statement = select(Course).where(Course.id == activity.course_id)
course = db_session.exec(statement).first()
if not course:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Course not found"
)
statement = select(Trail).where(
Trail.org_id == course.org_id, Trail.user_id == user.id
)
trail = db_session.exec(statement).first()
if not trail:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Trail not found"
)
# Delete the trail step for this activity
statement = select(TrailStep).where(
TrailStep.activity_id == activity.id,
TrailStep.user_id == user.id,
TrailStep.trail_id == trail.id
)
trail_step = db_session.exec(statement).first()
if trail_step:
db_session.delete(trail_step)
db_session.commit()
# Get updated trail data
statement = select(TrailRun).where(TrailRun.trail_id == trail.id, TrailRun.user_id == user.id)
trail_runs = db_session.exec(statement).all()
trail_runs = [
TrailRunRead(**trail_run.__dict__, course={}, steps=[], course_total_steps=0)
for trail_run in trail_runs
]
for trail_run in trail_runs:
statement = select(TrailStep).where(TrailStep.trailrun_id == trail_run.id, TrailStep.user_id == user.id)
trail_steps = db_session.exec(statement).all()
trail_steps = [TrailStep(**trail_step.__dict__) for trail_step in trail_steps]
trail_run.steps = trail_steps
for trail_step in trail_steps:
statement = select(Course).where(Course.id == trail_step.course_id)
course = db_session.exec(statement).first()
trail_step.data = dict(course=course)
trail_read = TrailRead(
**trail.model_dump(),
runs=trail_runs,
)
return trail_read
async def add_course_to_trail(
request: Request,