MCPcopy
hub / github.com/learnhouse/learnhouse / complete_course

Function complete_course

apps/api/src/services/admin/admin.py:586–704  ·  view source on GitHub ↗

Mark all activities in a course as completed for a user.

(
    request: Request,
    token_user: APITokenUser,
    user_id: int,
    course_uuid: str,
    db_session: AsyncSession,
)

Source from the content-addressed store, hash-verified

584
585
586async def complete_course(
587 request: Request,
588 token_user: APITokenUser,
589 user_id: int,
590 course_uuid: str,
591 db_session: AsyncSession,
592) -> dict:
593 """Mark all activities in a course as completed for a user."""
594
595 await _get_user_in_org(user_id, token_user.org_id, db_session)
596
597 course = (await db_session.execute(
598 select(Course).where(
599 Course.course_uuid == course_uuid,
600 Course.org_id == token_user.org_id,
601 )
602 )).scalars().first()
603 if not course:
604 raise HTTPException(status_code=404, detail="Course not found")
605
606 # Ensure trail exists
607 trail = (await db_session.execute(
608 select(Trail).where(Trail.org_id == token_user.org_id, Trail.user_id == user_id)
609 )).scalars().first()
610 if not trail:
611 trail = Trail(
612 org_id=token_user.org_id,
613 user_id=user_id,
614 trail_uuid=f"trail_{uuid4()}",
615 creation_date=str(datetime.now()),
616 update_date=str(datetime.now()),
617 )
618 db_session.add(trail)
619 await db_session.commit()
620 await db_session.refresh(trail)
621
622 # Ensure trail run exists
623 trailrun = (await db_session.execute(
624 select(TrailRun).where(
625 TrailRun.trail_id == trail.id,
626 TrailRun.course_id == course.id,
627 TrailRun.user_id == user_id,
628 )
629 )).scalars().first()
630 if not trailrun:
631 trailrun = TrailRun(
632 trail_id=trail.id if trail.id is not None else 0,
633 course_id=course.id if course.id is not None else 0,
634 org_id=course.org_id,
635 user_id=user_id,
636 creation_date=str(datetime.now()),
637 update_date=str(datetime.now()),
638 )
639 db_session.add(trailrun)
640 await db_session.commit()
641 await db_session.refresh(trailrun)
642
643 # Get all activities in the course

Callers 4

test_no_activitiesMethod · 0.90
test_completes_courseMethod · 0.90
test_course_not_foundMethod · 0.90

Calls 11

TrailClass · 0.90
TrailRunClass · 0.90
TrailStepClass · 0.90
trackFunction · 0.90
_get_user_in_orgFunction · 0.85
commitMethod · 0.80
firstMethod · 0.45
scalarsMethod · 0.45
executeMethod · 0.45
allMethod · 0.45

Tested by 3

test_no_activitiesMethod · 0.72
test_completes_courseMethod · 0.72
test_course_not_foundMethod · 0.72