罗湖图书馆知识竞赛

  1. 后端安全
    作为开放课程,为保持数据稳定有序限制了除答题和修改自己地址外的数据修改或删除。
    克隆应用后需要到【后端安全】栏把权限放开。

  2. 数据总览
    可以利用数据库管理插件方便地查看各类型数据:dbadmin

  3. 图书馆
    读取、新建、修改、删除

  4. 题库
    题库关联到图书馆:使用图书馆_id作为key的xdb
    包含题目、选项、答案序号
    读取、新建、修改、删除

  5. 成绩
    绑定当前登录用户:使用$c.me._id作为key的xdb
    把答题正确的题目序号插入成绩表对应图书馆的数组中并把积分 + 1。

  6. 结构设计的优缺点
    我们把答案和题目一起存放在题库中,一方面方便对题库集中管理(CRUD),也方便在前端直接高效验证答题是否正确,但另一方面答案也暴露给了前端,通过技术手段可以获取,也无法在后端验证答案。
    此类设计适合快速开发、没羊毛可被薅的场景。但如果奖品价值高,比如有现金优惠券的,应该考虑更高的安全性:把题目和答案分开存放(比如一个题目存成一条数据,所有答案共存一条数据并用key与题目关联),用户选择答案后把题目和答案一起发送到后端由后端来验证是否正确,正确的话修改成绩表,验证结果返回前端以提示用户。

  1. 读取数据并整理答题状态
    在$c.exp.onLogin里读取“我”的成绩、图书馆列表、题库,并在地图页根据这些数据计算各图书馆的答题状态分别显示不同的图标,图书馆详情页页会根据答题情况改变答题按钮。

  2. 全局音乐
    音乐是全局的,无论用户如何翻页都不影响音乐的播放,所以应该脱离页面而存在。多数浏览器要求用户跟页面有交互后才可以触发播放音乐。
    在$c.exp.onLogin里给body添加audio元素$V.music,在页面顶部共享组件的onReady中自动触发播放。
    用户点击音乐图标可以暂停或继续播放

  3. 点击图书馆的坐标进入该馆详情页,自动打卡获取5积分,并累加总分。
    不可重复获取打卡积分,要把已打卡的图书馆_id存入DB

  4. 答题
    克隆该馆题库并添加序号和各选项ABC前缀:$v.题目
    从用户成绩拿到该馆的已答序号:$v.已答题
    题目中过滤掉已答题得到:$v.未答题
    未答题数组头提出一个题目作为用户正在回答的题目:$v.正答题
    如果回答正确就把题目序号存入成绩表对应图书馆的key下,同时更新积分和答题时间
    无论正确如否都从未答题数组头再提下一个题目
    但如果没有更多题目了或已回答5道题了就返回地图页

由众触低代码平台生成和驱动