68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
from flask import Blueprint, request
|
|
|
|
from core.error import NoData
|
|
from core.mission import MISSION_DICT
|
|
from core.sql import Connect
|
|
from core.user import UserOnline
|
|
|
|
from .auth import auth_required
|
|
from .func import arc_try, success_return
|
|
|
|
bp = Blueprint('mission', __name__, url_prefix='/mission')
|
|
|
|
|
|
def parse_mission_form(multidict) -> list:
|
|
r = []
|
|
|
|
x = multidict.get('mission_1')
|
|
i = 1
|
|
while x:
|
|
r.append(x)
|
|
x = multidict.get(f'mission_{i + 1}')
|
|
i += 1
|
|
return r
|
|
|
|
|
|
@bp.route('/me/clear', methods=['POST']) # 新手任务确认完成
|
|
@auth_required(request)
|
|
@arc_try
|
|
def mission_clear(user_id):
|
|
m = parse_mission_form(request.form)
|
|
r = []
|
|
for i, mission_id in enumerate(m):
|
|
if mission_id not in MISSION_DICT:
|
|
return NoData(f'Mission `{mission_id}` not found')
|
|
with Connect() as c:
|
|
x = MISSION_DICT[mission_id](c)
|
|
x.user_clear_mission(UserOnline(c, user_id))
|
|
d = x.to_dict()
|
|
d['request_id'] = i + 1
|
|
r.append(d)
|
|
|
|
return success_return({'missions': r})
|
|
|
|
|
|
@bp.route('/me/claim', methods=['POST']) # 领取新手任务奖励
|
|
@auth_required(request)
|
|
@arc_try
|
|
def mission_claim(user_id):
|
|
m = parse_mission_form(request.form)
|
|
r = []
|
|
|
|
with Connect() as c:
|
|
user = UserOnline(c, user_id)
|
|
|
|
for i, mission_id in enumerate(m):
|
|
if mission_id not in MISSION_DICT:
|
|
return NoData(f'Mission `{mission_id}` not found')
|
|
|
|
x = MISSION_DICT[mission_id](c)
|
|
x.user_claim_mission(user)
|
|
d = x.to_dict(has_items=True)
|
|
d['request_id'] = i + 1
|
|
r.append(d)
|
|
|
|
return success_return({
|
|
'missions': r,
|
|
'user': user.to_dict()
|
|
})
|