2024-07-16 15:55:45 +02:00
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
|
|
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
|
2024-08-16 23:29:59 +02:00
|
|
|
from src.cloud_util.homeassistant import HomeAssistant
|
2024-08-07 16:58:06 +02:00
|
|
|
from src.cloud_util.mqtt import MQTT
|
2024-08-16 16:57:25 +02:00
|
|
|
from src.cloud_util.notion import NotionAsync
|
2024-08-15 16:50:56 +02:00
|
|
|
from src.cloud_util.ticktick import TickTick
|
2024-08-15 14:51:33 +02:00
|
|
|
from src.config import Config
|
2024-08-06 17:14:00 +02:00
|
|
|
from src.recorder.poo import PooRecorder
|
2024-07-16 15:55:45 +02:00
|
|
|
|
2024-08-15 14:51:33 +02:00
|
|
|
Config.init()
|
|
|
|
|
|
2024-08-15 16:50:56 +02:00
|
|
|
ticktick = TickTick()
|
2024-08-16 16:57:25 +02:00
|
|
|
notion = NotionAsync(token=Config.get_env(key="NOTION_TOKEN"))
|
2024-08-07 16:58:06 +02:00
|
|
|
mqtt = MQTT()
|
2024-08-16 23:29:59 +02:00
|
|
|
homeassistant = HomeAssistant(ticktick=ticktick)
|
2024-08-21 17:05:12 +02:00
|
|
|
poo_recorder = PooRecorder(mqtt=mqtt, notion=notion, homeassistant=homeassistant)
|
2024-07-16 15:55:45 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@asynccontextmanager
|
2024-07-17 16:44:30 +02:00
|
|
|
async def _lifespan(_app: FastAPI): # noqa: ANN202
|
2024-08-07 16:58:06 +02:00
|
|
|
await mqtt.start()
|
2024-07-16 15:55:45 +02:00
|
|
|
yield
|
2024-08-07 16:58:06 +02:00
|
|
|
await mqtt.stop()
|
2024-07-16 15:55:45 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
app = FastAPI(lifespan=_lifespan)
|
|
|
|
|
|
|
|
|
|
|
2024-08-16 23:29:59 +02:00
|
|
|
@app.get("/homeassistant/status")
|
|
|
|
|
async def get_status() -> dict:
|
|
|
|
|
return {"Status": "Ok"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.post("/homeassistant/publish")
|
2024-08-21 16:30:43 +02:00
|
|
|
async def homeassistant_publish(payload: HomeAssistant.Message) -> dict:
|
2024-08-21 21:11:29 +02:00
|
|
|
return await homeassistant.process_message(message=payload)
|
2024-08-16 23:29:59 +02:00
|
|
|
|
|
|
|
|
|
2024-08-16 16:57:25 +02:00
|
|
|
# Poo recorder
|
2024-08-07 14:44:24 +02:00
|
|
|
@app.post("/poo/record")
|
2024-08-24 22:11:15 +02:00
|
|
|
async def record(record_detail: PooRecorder.RecordField) -> PooRecorder.RecordField:
|
|
|
|
|
await poo_recorder.record(record_detail)
|
2024-08-07 14:44:24 +02:00
|
|
|
return record_detail
|
2024-08-15 16:50:56 +02:00
|
|
|
|
|
|
|
|
|
2024-08-16 16:57:25 +02:00
|
|
|
# ticktick
|
2024-08-15 16:50:56 +02:00
|
|
|
@app.get("/ticktick/auth/code")
|
|
|
|
|
async def ticktick_auth(code: str, state: str) -> dict:
|
2024-08-21 21:11:29 +02:00
|
|
|
if await ticktick.retrieve_access_token(code, state):
|
2024-08-15 16:50:56 +02:00
|
|
|
return {"State": "Token Retrieved"}
|
|
|
|
|
return {"State": "Token Retrieval Failed"}
|