иним чиним чиним чиним а так же новая система друзей и бутстраппера

This commit is contained in:
SashegDev
2026-06-07 12:32:34 +00:00
parent 166dbf8935
commit ec7ef01760
25 changed files with 3732 additions and 377 deletions
+80
View File
@@ -0,0 +1,80 @@
from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel
from typing import Optional
import structlog
from auth import get_db, get_current_user
logger = structlog.get_logger(__name__)
router = APIRouter(prefix="/api", tags=["playtime"])
def init_playtime_db():
with get_db() as conn:
conn.executescript("""
CREATE TABLE IF NOT EXISTS playtime (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
pack_name TEXT DEFAULT '',
minutes INTEGER DEFAULT 0,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE INDEX IF NOT EXISTS idx_playtime_user ON playtime(user_id);
""")
class SyncPlaytimeRequest(BaseModel):
minutes: int
pack_name: Optional[str] = ""
@router.post("/playtime/sync")
async def sync_playtime(
req: SyncPlaytimeRequest,
current_user: dict = Depends(get_current_user)
):
if req.minutes < 0 or req.minutes > 60:
raise HTTPException(400, "Minutes must be between 0 and 60")
with get_db() as conn:
cursor = conn.execute(
"SELECT id, minutes FROM playtime WHERE user_id = ? AND pack_name = ?",
(current_user["user_id"], req.pack_name)
)
existing = cursor.fetchone()
if existing:
conn.execute(
"UPDATE playtime SET minutes = minutes + ?, last_updated = CURRENT_TIMESTAMP WHERE id = ?",
(req.minutes, existing[0])
)
else:
conn.execute(
"INSERT INTO playtime (user_id, pack_name, minutes) VALUES (?, ?, ?)",
(current_user["user_id"], req.pack_name, req.minutes)
)
logger.info("Playtime synced", user=current_user["user_id"], minutes=req.minutes)
return {"status": "ok"}
@router.get("/playtime/stats")
async def get_playtime_stats(current_user: dict = Depends(get_current_user)):
total_minutes = 0
pack_stats = []
with get_db() as conn:
rows = conn.execute(
"SELECT COALESCE(SUM(minutes), 0) FROM playtime WHERE user_id = ?",
(current_user["user_id"],)
)
total_minutes = rows.fetchone()[0]
rows = conn.execute(
"SELECT pack_name, minutes FROM playtime WHERE user_id = ? AND pack_name != '' ORDER BY minutes DESC",
(current_user["user_id"],)
)
for row in rows:
pack_stats.append({
"pack_name": row[0],
"minutes": row[1]
})
return {
"total_minutes": total_minutes,
"total_hours": round(total_minutes / 60, 1),
"packs": pack_stats
}