Files
arinera-minecraft-tool/backend/main.py
2026-05-28 23:36:21 +08:00

63 lines
1.3 KiB
Python

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,
ssl_keyfile="certs/cert.key",
ssl_certfile="certs/fullchain.pem",
)
if __name__ == "__main__":
main()