diff --git a/doc/README.md b/doc/README.md index 8694cc6..bb0ab36 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,18 +1,21 @@ ## 接口 -| 接口名 | 请求方法 | 参数 | 备注 | -| --------------- | -------- | ---------------------------------- | -------------------------------- | -| /index | GET | | | -| /update | POST | [{"name":string, "awards_id":int}] | 提交中奖用户 | -| /revoke | POST | {"uid":string} | 取消用户中奖信息,uid为工号,例如G0001 | -| /lucky_users | GET/POST | {"awards_id":int} | 获取所有中奖用户列表,使用post方式获取指定奖项的中奖用户列表 | -| /users | GET | | 获取所有用户列表 | -| /luckless_users | GET | | 获取未中奖用户列表 | -| /awards | GET | | 获取所有奖项列表 | -| /reset | GET | | 重置所有数据 | +| 接口名 | 请求方法 | 参数 | 备注 | +| --------------- | -------- | ---------------------------------------- | -------------------------------- | +| /index | GET | | | +| /run | POST | {"award_id":int} | 开始抽奖 | +| /draw_lottery | GET | | 获取抽奖结果,仅当抽奖状态才可调用此接口 | +| ~~/update~~ | ~~POST~~ | ~~[{"uid":string, "awards_id":int}]~~ | ~~提交中奖用户~~ | +| /revoke | POST | {"uid":string} | 取消用户中奖信息,uid为工号,例如G0001 | +| /lucky_users | GET/POST | {"awards_id":int} | 获取所有中奖用户列表,使用post方式获取指定奖项的中奖用户列表 | +| /users | GET | | 获取所有用户列表 | +| /luckless_users | GET | | 获取未中奖用户列表 | +| /add_awards | POST | [{"award_id":int, "award_name":string,"award_capacity":int}] | 添加新奖品 | +| /awards | GET | | 获取所有奖项列表 | +| /reset | GET | | 重置所有数据 | --- -## 数据库表-leaders +## 数据库表-users | 字段值 | 字段类型 | 字段描述 | | -------- | ------ | ------------------------------ | @@ -24,10 +27,10 @@ ## 数据库表-awards -| 字段值 | 字段类型 | 字段描述 | -| -------------- | ------ | ------- | -| award_id | int | 奖项id | -| award_name | string | 奖项名称 | -| award_size | int | 可抽取奖项数量 | -| award_capacity | int | 奖项总数 | +| 字段值 | 字段类型 | 字段描述 | +| -------------- | ------ | --------- | +| award_id | int | 奖项id | +| award_name | string | 奖项名称 | +| award_size | int | 剩余可抽取奖品数量 | +| award_capacity | int | 奖品总数 | diff --git a/src/lottery.py b/src/lottery.py new file mode 100644 index 0000000..a354b66 --- /dev/null +++ b/src/lottery.py @@ -0,0 +1,57 @@ +#! /usr/bin/python3 +# -*- coding:utf-8 -*- +import tinydb as d +import os +from . import CURRENT_DIR + +db = d.TinyDB(os.path.join(CURRENT_DIR, "lottery.db")) +t_users = db.table('users') +t_awards = db.table('awards') + + +def server_resp(status, msg, data=None): + return {"status": status, "msg": msg, "data": data} + + +def reset(users_db, awards_db): + db.purge_tables() + for u in users_db: + t_users.insert(u) + for a in awards_db: + t_awards.insert(a) + return server_resp(200, "success") + + +def users(): + t_users.clear_cache() + return server_resp(200, "success", t_users.all()) + + +def luckless_users(): + t_users.clear_cache() + user = d.Query() + return server_resp(200, "success", t_users.search( + (~user.award_id.exists()) | (user.award_id is None))) + + +def lucky_users(): + t_users.clear_cache() + user = d.Query() + return server_resp(200, "success", t_users.search( + user.award_id is not None)) + + +def awards(): + t_awards.clear_cache() + return server_resp(200, "success", t_awards.all()) + + +def update(uid, award_id): + t_users.clear_cache() + t_awards.clear_cache() + if not t_awards.get(d.Query().award_id == award_id): + return server_resp(400, "不存在此奖品") + if len(t_users.update({'award_id': award_id}, d.Query().uid == uid)) == 0: + return server_resp(401, "不存在此用户") + else: + return server_resp(200, "success")