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.

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