1.0.7 типоооо и фиксы

This commit is contained in:
Sashegdev
2026-04-08 19:45:15 +00:00
parent 13a43a01ef
commit bf26baaf93
5 changed files with 41 additions and 10 deletions
+19 -3
View File
@@ -80,7 +80,7 @@ def init_db():
last_login REAL
);
CREATE TABLE IF NOT EXISTS passes ( -- НОВАЯ ТАБЛИЦА
CREATE TABLE IF NOT EXISTS passes (
code TEXT PRIMARY KEY, -- ZERN-XXXXXX
is_used BOOLEAN DEFAULT 0,
activated_by INTEGER REFERENCES users(id),
@@ -96,6 +96,13 @@ def init_db():
activated_at REAL NOT NULL,
PRIMARY KEY (user_id, pass_code)
);
CREATE TABLE IF NOT EXISTS refresh_tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
token_hash TEXT NOT NULL,
expires_at REAL NOT NULL
);
""")
conn.commit()
conn.close()
@@ -143,7 +150,7 @@ async def register(body: RegisterRequest, request: Request):
conn = get_db()
try:
if conn.execute("SELECT 1 FROM users WHERE username = ? COLLATE NOCASE", (body.username,)).fetchone():
raise HTTPException(409, "Имя пользователя уже занято")
raise HTTPException(status_code=409, detail="Имя пользователя уже занято")
uuid = generate_uuid()
pw_hash = hash_password(body.password)
@@ -156,11 +163,20 @@ async def register(body: RegisterRequest, request: Request):
user_id = conn.lastrowid
conn.commit()
return _issue_tokens(conn, user_id, body.username, uuid)
# Вызываем функцию и явно преобразуем в dict, чтобы избежать проблем сериализации
tokens = _issue_tokens(conn, user_id, body.username, uuid)
return tokens.model_dump() if hasattr(tokens, "model_dump") else tokens
except HTTPException:
raise
except Exception as e:
logger.error("Register error", exc_info=True)
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
finally:
conn.close()
@router.post("/login", response_model=TokenResponse)
async def login(body: LoginRequest, request: Request):
conn = get_db()
+9
View File
@@ -869,6 +869,15 @@ async def api_my_passes(request: Request):
return {"passes": passes, "has_active": any(p["is_active"] for p in passes)}
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
logger.error("Unhandled exception", exc_info=True)
return JSONResponse(
status_code=500,
content={"detail": "Internal Server Error", "type": type(exc).__name__}
)
# Cleanup on shutdown
@app.on_event("shutdown")
async def shutdown_proxy():