table_game/backend/app/routers/admin_game.py
2025-03-10 08:35:19 +08:00

122 lines
4.1 KiB
Python

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)