from fastapi import APIRouter, Depends, HTTPException, Request, Header from typing import List from ..schemas.game_info import GameListResponse, GameListRequest, GameCreate, GameCreateRequest, GamePhotoRequest, TagCreateRequest, GameTagLinkRequest, GameTagUnLinkRequest,GetGameTagsRequest, DeleteTagRequest from pydantic import BaseModel from ..services.admin_game_service import create_game, delete_game, update_game, list_games_service, set_the_game_photo, create_tag_service, link_tag_to_games_service, list_tags_service, get_game_tags_service, unlink_tag_from_game_service, get_games_by_tag_service, delete_tag_service from ..utils.jwt_handler import verify_token from ..db import get_connection router = APIRouter() @router.post("/games/create") def create_game_api(request: GameCreateRequest): """ 接口:创建游戏 """ game = GameCreate( game_name=request.game_name, game_type=request.game_type, description=request.description, min_players=request.min_players, max_players=request.max_players, duration=request.duration, price=request.price, difficulty_level=request.difficulty_level, is_available=request.is_available, quantity=request.quantity, long_description=request.long_description ) return create_game(token=request.token, game=game) @router.delete("/games/{game_id}") def delete_game_api( game_id: int, authorization: str = Header(..., alias="Authorization") ): # 去掉 "Bearer " 前缀 if authorization.startswith("Bearer "): token = authorization[7:] else: token = authorization return delete_game(token, game_id) @router.put("/games/{game_id}") def update_game_api(game_id: int, game: GameCreate, authorization: str = Header(..., alias="Authorization")): """ 接口:更新游戏信息 """ if authorization.startswith("Bearer "): token = authorization[7:] else: token = authorization return update_game(token, game_id, game) @router.post("/games", response_model=List[GameListResponse]) def list_games(request: GameListRequest): """ 路由层:通过 token 校验后,获取游戏列表 """ return list_games_service(token=request.token) @router.get("/games/{game_id}") def get_game(game_id: int): connection = get_connection() cursor = connection.cursor(dictionary=True) cursor.execute("SELECT * FROM games WHERE game_id = %s", (game_id,)) game = cursor.fetchone() if not game: raise HTTPException(404, detail="Game not found") return game @router.post("/games/set_photo") def set_game_photo(request: GamePhotoRequest): token = request.token game_id = request.game_id photo_url = request.photo_url return set_the_game_photo(token, photo_url, game_id) @router.post("/get_tags") def get_tags_api(request: GameListRequest): # 复用已有请求模型 return list_tags_service(token=request.token) @router.post("/tags/link_games") def link_tag_to_games(request: GameTagLinkRequest): """批量关联标签与游戏""" return link_tag_to_games_service( token=request.token, tag_id=request.tag_id, game_ids=request.game_ids ) @router.post("/tags") def create_tag(request: TagCreateRequest): """创建新标签""" return create_tag_service(token=request.token, tag_name=request.tag_name) @router.post("/get_game_tags") def get_game_tags_api(request: GetGameTagsRequest): # 需要新请求模型 return get_game_tags_service(token=request.token, game_id=request.game_id) @router.post("/tags/unlink") def unlink_tag_from_game(request: GameTagUnLinkRequest): return unlink_tag_from_game_service( token=request.token, tag_id=request.tag_id, game_id=request.game_id ) @router.post("/get_games_by_tag") def get_games_by_tag_api(request: GetGameTagsRequest): # 需要新请求模型 return get_games_by_tag_service(token=request.token, tag_id=request.tag_id) @router.post("/tags/delete") def delete_tag(request: DeleteTagRequest): return delete_tag_service(token=request.token, tag_id=request.tag_id)