This commit is contained in:
UnitedAirforce
2025-11-27 14:52:43 +08:00
parent 10bbd03bb6
commit aacbea2096
16 changed files with 1059 additions and 296 deletions

View File

@@ -2,6 +2,8 @@ from starlette.responses import Response, FileResponse
from starlette.requests import Request
from starlette.routing import Route
from sqlalchemy import select
import openpyxl
from io import BytesIO
import os
from api.database import player_database, devices, binds, batch_tokens, log_download, get_downloaded_bytes
@@ -18,7 +20,7 @@ async def serve_file(request: Request):
if not filename.endswith(".zip") and not filename.endswith(".pak"):
return Response("Unauthorized", status_code=403)
existing_batch_token = select(batch_tokens).where(batch_tokens.c.bind_token == auth_token)
existing_batch_token = select(batch_tokens).where(batch_tokens.c.batch_token == auth_token)
batch_result = await player_database.fetch_one(existing_batch_token)
if batch_result:
pass
@@ -71,7 +73,38 @@ async def serve_public_file(request: Request):
return FileResponse(safe_filename)
else:
return Response("File not found", status_code=404)
async def convert_user_export_data(data):
wb = openpyxl.Workbook()
# Remove default sheet
default_sheet = wb.active
wb.remove(default_sheet)
# Create sheet for each top-level key
for sheet_name, rows in data.items():
ws = wb.create_sheet(title=sheet_name)
# rows expected to be list[dict]
if isinstance(rows, list):
await write_dict_list_to_sheet(ws, rows)
stream = BytesIO()
wb.save(stream)
stream.seek(0)
return stream
async def write_dict_list_to_sheet(ws, rows):
if not rows:
return
# headers
headers = list(rows[0].keys())
ws.append(headers)
# rows
for row in rows:
ws.append([row.get(h, "") for h in headers])
routes = [
Route("/files/gc2/{auth_token}/{folder}/{filename}", serve_file, methods=["GET"]),