import json import os from contextlib import asynccontextmanager import uvicorn from fastapi import FastAPI, HTTPException, Query from peewee import SqliteDatabase, Model, CharField, TextField db_path = os.path.join(os.path.dirname(__file__), "data.db") db = SqliteDatabase(db_path) class BaseModel(Model): class Meta: database = db class Tool(BaseModel): code = CharField(max_length=4, unique=True) step = TextField() desp = TextField(default="") @asynccontextmanager async def lifespan(app: FastAPI): db.connect() db.create_tables([Tool]) yield if not db.is_closed(): db.close() app = FastAPI(title="ARinera Minecraft TUI Backend", lifespan=lifespan) @app.get("/health") async def health(): return {"status": "ok"} @app.get("/tools") async def get_tools( code: str = Query(..., min_length=4, max_length=4, pattern=r"^\d{4}$"), ): tool = Tool.get_or_none(Tool.code == code) if tool is None: raise HTTPException(status_code=404, detail=f"code {code} not found") return json.loads(tool.step) def main(): uvicorn.run("main:app", reload=True, port=3131) if __name__ == "__main__": main()