mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-09 09:17:26 +08:00
[Enhance] API for redeem
- Add API endpoints for redeem system
- Continue to fix the bug mentioned in 930faf508d
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from flask import Blueprint
|
||||
|
||||
from . import (users, songs, token, system, items, purchases, presents)
|
||||
from . import (users, songs, token, system, items,
|
||||
purchases, presents, redeems)
|
||||
|
||||
bp = Blueprint('api', __name__, url_prefix='/api/v1')
|
||||
bp.register_blueprint(users.bp)
|
||||
@@ -10,3 +11,4 @@ bp.register_blueprint(system.bp)
|
||||
bp.register_blueprint(items.bp)
|
||||
bp.register_blueprint(purchases.bp)
|
||||
bp.register_blueprint(presents.bp)
|
||||
bp.register_blueprint(redeems.bp)
|
||||
|
||||
@@ -105,7 +105,7 @@ def presents_present_items_patch(data, user, present_id: str):
|
||||
p = Present(c)
|
||||
p.present_id = present_id
|
||||
p.select_items()
|
||||
p.delete_items([ItemFactory.from_dict(x, c=c)
|
||||
p.remove_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('remove', [])])
|
||||
p.add_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('create', [])])
|
||||
|
||||
@@ -119,7 +119,7 @@ def purchases_purchase_items_patch(data, user, purchase_name: str):
|
||||
p = Purchase(c)
|
||||
p.purchase_name = purchase_name
|
||||
p.select_items()
|
||||
p.delete_items([ItemFactory.from_dict(x, c=c)
|
||||
p.remove_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('remove', [])])
|
||||
p.add_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('create', [])])
|
||||
|
||||
119
latest version/api/redeems.py
Normal file
119
latest version/api/redeems.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from flask import Blueprint, request
|
||||
|
||||
from core.error import DataExist, InputError, NoData
|
||||
from core.item import ItemFactory
|
||||
from core.redeem import Redeem
|
||||
from core.sql import Connect, Query, Sql
|
||||
|
||||
from .api_auth import api_try, request_json_handle, role_required
|
||||
from .api_code import success_return
|
||||
from .constant import Constant
|
||||
|
||||
|
||||
bp = Blueprint('redeems', __name__, url_prefix='/redeems')
|
||||
|
||||
|
||||
@bp.route('', methods=['GET'])
|
||||
@role_required(request, ['select'])
|
||||
@request_json_handle(request, optional_keys=Constant.QUERY_KEYS)
|
||||
@api_try
|
||||
def redeems_get(data, user):
|
||||
'''查询全redeem信息'''
|
||||
with Connect() as c:
|
||||
query = Query(['code', 'type'], ['code'], ['code']).from_dict(data)
|
||||
x = Sql(c).select('redeem', query=query)
|
||||
r = [Redeem().from_list(i) for i in x]
|
||||
|
||||
if not r:
|
||||
raise NoData(api_error_code=-2)
|
||||
|
||||
return success_return([x.to_dict(has_items=False) for x in r])
|
||||
|
||||
|
||||
@bp.route('', methods=['POST'])
|
||||
@role_required(request, ['insert'])
|
||||
@request_json_handle(request, required_keys=['code', 'type'], optional_keys=['items'])
|
||||
@api_try
|
||||
def redeems_post(data, user):
|
||||
'''添加redeem,注意可以有items,不存在的item会自动创建'''
|
||||
with Connect() as c:
|
||||
r = Redeem(c).from_dict(data)
|
||||
if r.select_exists():
|
||||
raise DataExist(
|
||||
f'redeem `{r.code}` already exists')
|
||||
r.insert_all()
|
||||
return success_return(r.to_dict(has_items='items' in data))
|
||||
|
||||
|
||||
@bp.route('/<string:code>', methods=['GET'])
|
||||
@role_required(request, ['select'])
|
||||
@api_try
|
||||
def redeems_redeem_get(user, code: str):
|
||||
'''查询单个redeem信息'''
|
||||
with Connect() as c:
|
||||
r = Redeem(c).select(code)
|
||||
r.select_items()
|
||||
return success_return(r.to_dict())
|
||||
|
||||
|
||||
@bp.route('/<string:code>', methods=['DELETE'])
|
||||
@role_required(request, ['delete'])
|
||||
@api_try
|
||||
def redeems_redeem_delete(user, code: str):
|
||||
'''删除redeem,会连带删除redeem_item'''
|
||||
with Connect() as c:
|
||||
Redeem(c).select(code).delete_all()
|
||||
return success_return()
|
||||
|
||||
|
||||
@bp.route('/<string:code>', methods=['PUT'])
|
||||
@role_required(request, ['change'])
|
||||
@request_json_handle(request, optional_keys=['type'], must_change=True)
|
||||
@api_try
|
||||
def redeems_redeem_put(data, user, code: str):
|
||||
'''更新redeem信息,注意不能有items'''
|
||||
with Connect() as c:
|
||||
r = Redeem(c).select(code)
|
||||
if 'type' in data:
|
||||
r.redeem_type = int(data['type'])
|
||||
r.update()
|
||||
return success_return(r.to_dict(has_items=False))
|
||||
|
||||
|
||||
@bp.route('/<string:code>/items', methods=['GET'])
|
||||
@role_required(request, ['select'])
|
||||
@api_try
|
||||
def redeems_redeem_items_get(user, code: str):
|
||||
'''查询redeem的items'''
|
||||
with Connect() as c:
|
||||
r = Redeem(c)
|
||||
r.code = code
|
||||
r.select_items()
|
||||
return success_return([x.to_dict(has_is_available=True) for x in r.items])
|
||||
|
||||
|
||||
@bp.route('/<string:code>/items', methods=['PATCH'])
|
||||
@role_required(request, ['change'])
|
||||
@request_json_handle(request, is_batch=True)
|
||||
@api_try
|
||||
def redeems_redeem_items_patch(data, user, code: str):
|
||||
'''增删改单个redeem的items'''
|
||||
with Connect() as c:
|
||||
r = Redeem(c)
|
||||
r.code = code
|
||||
r.select_items()
|
||||
r.remove_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('remove', [])])
|
||||
r.add_items([ItemFactory.from_dict(x, c=c)
|
||||
for x in data.get('create', [])])
|
||||
|
||||
updates = data.get('update', [])
|
||||
for x in updates:
|
||||
if 'amount' not in x:
|
||||
raise InputError('`amount` is required in `update`')
|
||||
if not isinstance(x['amount'], int) or x['amount'] <= 0:
|
||||
raise InputError(
|
||||
'`amount` must be a positive integer', api_error_code=-101)
|
||||
|
||||
r.update_items([ItemFactory.from_dict(x, c=c) for x in updates])
|
||||
return success_return([x.to_dict(has_is_available=True) for x in r.items])
|
||||
Reference in New Issue
Block a user