from contextlib import asynccontextmanager from fastapi import FastAPI from pydantic import BaseModel from src.cloud_util.mqtt import MQTT from src.config import Config from src.recorder.poo import PooRecorder Config.init() mqtt = MQTT() poo_recorder = PooRecorder(mqtt) @asynccontextmanager async def _lifespan(_app: FastAPI): # noqa: ANN202 await mqtt.start() yield await mqtt.stop() class PooRecordField(BaseModel): status: str app = FastAPI(lifespan=_lifespan) @app.post("/poo/record") async def record(record_detail: PooRecordField) -> PooRecordField: await poo_recorder.record(record_detail.status) return record_detail