Skip to Content

Backend Changes

We need to create the tasks in Qrambo with photos of our users during offboarding.

This is how we change the backend for making it work with Qrambo.

Backend Changes
main.py
from fastapi import FastAPI, HTTPException from pydantic import BaseModel from datetime import datetime from typing import Optional from models import Journey, Scooter, Ticket from request_models import OffboardRequest from tasks import create_offboarding_scooter_task from request_models import OffboardTaskUpdatesRequest app = FastAPI() @app.post("/offboard-scooter") async def offboard_scooter(request: OffboardRequest): try: # Get journey and validate it belongs to the user and scooter journey = await Journey.get( id=request.journey_id, user_id=request.user_id, scooter_id=request.scooter_id, status=Journey.STARTED ) if not journey: raise HTTPException(status_code=404, detail="Journey not found") # Update journey status journey.status = Journey.COMPLETED_REVIEWING journey.end_time = datetime.now() await journey.save() # Mark scooter as available scooter = journey.scooter scooter.is_available = True await scooter.save() # Create a task with offboarding photo ## Look task.py for details await create_offboarding_scooter_task( journey_id=request.journey_id, user_id=request.user_id, scooter_id=request.scooter_id, offboarding_photo_url=request.offboarding_photo_url ) return { 'status': 'success', 'message': 'Scooter offboarded application got successfully', 'journey_id': request.journey_id } except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # your webhook for task updates @app.post("/offboard-scooter-task-updates") async def offboard_scooter_task_updates(request: OffboardTaskUpdatesRequest): if(request.event == "TASK_COMPLETED"): task = request.properties.task # Get the journey from the database journey = await Journey.get(task.input_data.journey_id) journey.status = Journey.COMPLETED await journey.save() # Check if the photo is good if(task.output_data.result != "good"): # create a ticket to the user ticket = Ticket( user_id=user.id, journey_id=journey.id, amount=100 ) await ticket.insert() # update the user balance user = await User.get(task.input_data.user_id) user.balance -= 100 await user.save() return {"status": "success"}
Last updated on