| 199 | |
| 200 | |
| 201 | async def add_activity_to_trail( |
| 202 | request: Request, |
| 203 | user: PublicUser, |
| 204 | activity_uuid: str, |
| 205 | db_session: AsyncSession, |
| 206 | ) -> TrailRead: |
| 207 | # Look for the activity |
| 208 | statement = select(Activity).where(Activity.activity_uuid == activity_uuid) |
| 209 | activity = (await db_session.execute(statement)).scalars().first() |
| 210 | |
| 211 | if not activity: |
| 212 | raise HTTPException( |
| 213 | status_code=status.HTTP_404_NOT_FOUND, detail="Activity not found" |
| 214 | ) |
| 215 | |
| 216 | statement = select(Course).where(Course.id == activity.course_id) |
| 217 | course = (await db_session.execute(statement)).scalars().first() |
| 218 | |
| 219 | if not course: |
| 220 | raise HTTPException( |
| 221 | status_code=status.HTTP_404_NOT_FOUND, detail="Course not found" |
| 222 | ) |
| 223 | |
| 224 | await check_resource_access( |
| 225 | request, db_session, user, course.course_uuid, AccessAction.READ |
| 226 | ) |
| 227 | |
| 228 | trail = await check_trail_presence( |
| 229 | org_id=course.org_id, |
| 230 | user_id=user.id, |
| 231 | request=request, |
| 232 | user=user, |
| 233 | db_session=db_session, |
| 234 | ) |
| 235 | |
| 236 | statement = select(TrailRun).where( |
| 237 | TrailRun.trail_id == trail.id, TrailRun.course_id == course.id, TrailRun.user_id == user.id |
| 238 | ) |
| 239 | trailrun = (await db_session.execute(statement)).scalars().first() |
| 240 | |
| 241 | if not trailrun: |
| 242 | trailrun = TrailRun( |
| 243 | trail_id=trail.id if trail.id is not None else 0, |
| 244 | course_id=course.id if course.id is not None else 0, |
| 245 | org_id=course.org_id, |
| 246 | user_id=user.id, |
| 247 | creation_date=str(datetime.now()), |
| 248 | update_date=str(datetime.now()), |
| 249 | ) |
| 250 | db_session.add(trailrun) |
| 251 | await db_session.commit() |
| 252 | await db_session.refresh(trailrun) |
| 253 | |
| 254 | statement = select(TrailStep).where( |
| 255 | TrailStep.trailrun_id == trailrun.id, TrailStep.activity_id == activity.id, TrailStep.user_id == user.id |
| 256 | ) |
| 257 | trailstep = (await db_session.execute(statement)).scalars().first() |
| 258 | |