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,
)
| 584 | |
| 585 | |
| 586 | async 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 |