122 lines
4.1 KiB
Python
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)
|