Files
CloudGame/backend/views/games.py
T
2023-12-08 16:45:25 +08:00

126 lines
4.7 KiB
Python

import time
import datetime
import traceback
from bson import ObjectId
from config import client, DATABASE_NAME, COLLECTION, USER_COLLECTION
from utils import JSONEncoder
from flask import Blueprint, request, jsonify, Response
game = Blueprint('game', __name__);
user_collection = client[DATABASE_NAME][USER_COLLECTION]
game_collection = client[DATABASE_NAME][COLLECTION]
@game.route('/api/v1/game/getGames', methods=['POST', 'GET'])
def game_list():
try:
page = request.json.get("page", 1)
size = request.json.get("size", 10)
# 获取查询参数
original_price = request.json.get("Original Price")
title = request.json.get("Title")
developer = request.json.get("Developer")
game_features = request.json.get("Game Features")
# 构建查询条件
query_conditions = {}
# 不区分大小写的模糊查询
if original_price:
query_conditions["Original Price"] = {"$regex": original_price, "$options": "i"}
if title:
query_conditions["Title"] = {"$regex": title, "$options": "i"}
if developer:
query_conditions["Developer"] = {"$regex": developer, "$options": "i"}
# 匹配列表中所有元素
if game_features:
query_conditions["Game Features"] = {"$all": game_features}
# 执行查询
data = game_collection.find(query_conditions).skip((page - 1) * size).limit(size).sort("update_time", -1)
res = []
for i in data:
res.append(i)
total = game_collection.count_documents(query_conditions)
content = {"code": 200, "total": total, "data": res, "msg": "SUCCESS"}
content = JSONEncoder().encode(content)
except Exception as e:
content = {"code": 500, "msg": str(e)}
return Response(content, mimetype='application/json')
@game.route('/api/v1/game/addGame', methods=['POST', 'GET'])
def add_game():
try:
game_data = request.json
# Title为必填项
if not game_data.get("Title"):
return jsonify({"code": 500, "msg": "Field: [Title] is required"}), 400
existing_game = game_collection.find_one({"Title": game_data.get("Title")})
if existing_game:
return jsonify({
"code": 500,
"msg": f"A game with the same title [{existing_game}] already exists"}
), 400
# 验证字符串类型的字段
string_fields = ["Title", "Original Price", "Discounted Price", "Release Date", "Game Description", "Developer", "Publisher" ]
for field in string_fields:
if not isinstance(game_data.get(field), str):
return jsonify({"code": 500, "msg": f"Field:[{field}] should be a string"}), 400
# 添加时间戳
game_data["date_added"] = datetime.datetime.now().strftime("%Y-%m-%d")
game_data["update_time"] = time.time()
# 插入数据
game_collection.insert_one(game_data)
return jsonify({"code": 200, "msg": "SUCCESS"})
except Exception as e:
return jsonify({"code": 500, "msg": str(e)}), 500
@game.route('/api/v1/game/deleteGame', methods=['POST', 'GET'])
def delete_game():
try:
id = request.json.get("_id")
game_collection.delete_one({"_id": ObjectId(id)})
content = {"code": 200, "msg": "SUCCESS"}
except Exception as e:
import traceback
traceback.print_exc()
content = {"code": 500, "msg": str(e)}
return JSONEncoder().encode(content)
@game.route('/api/v1/game/updateGame', methods=['POST', 'GET'])
def update_game():
try:
id = request.json.pop("_id")
game_collection.update_one({"_id": ObjectId(id)}, {"$set": request.json})
content = {"code": 200, "msg": "SUCCESS"}
except Exception as e:
traceback.print_exc()
content = {"code": 500, "msg": str(e)}
return JSONEncoder().encode(content)
# 获取收藏列表
@game.route('/api/v1/game/getCollectList', methods=['POST', 'GET'])
def get_collect_list():
try:
username = request.json.get("username")
user_document = user_collection.find_one({"username": username})
game_ids = user_document.get("collect", [])
collect_list = []
# 批量查询game_ids
for game_id in game_ids:
game_document = game_collection.find_one({"_id": ObjectId(game_id)})
collect_list.append(game_document)
content = {"code": 200, "msg": "SUCCESS", "total": len(game_ids), "data": collect_list}
except Exception as e:
traceback.print_exc()
content = {"code": 500, "msg": str(e)}
content = JSONEncoder().encode(content)
return Response(content, mimetype='application/json')