Browse Source

✨ feat: 增加乐跑目标次数功能

Pchen. 4 months ago
parent
commit
e3d50befd7

+ 31 - 1
apis/Lepao/Account/AddAccount.js

@@ -9,6 +9,9 @@ class AddAccount extends API {
 
         this.setPath('/Lepao/Account')
         this.setMethod('POST')
+
+        this.emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
+        this.banEmailList = ['icloud.com']
     }
 
     // 生成 6 位数字 + 字母混合码
@@ -40,12 +43,34 @@ class AddAccount extends API {
                 ...BaseStdResponse.MISSING_PARAMETER
             })
 
+        if (isNaN(target_count) || target_count < 0 || target_count > 99) {
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '乐跑目标次数不在合法范围内'
+            })
+        }
+
+        if (!this.emailRegex.test(email)) {
+            Message.error('请检查邮箱格式是否正确')
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '请检查邮箱格式是否正确'
+            })
+        }
+
+        const emailDomain = email.split('@')[1].toLowerCase()
+        if (this.banEmailList.includes(emailDomain))
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: `暂不支持使用 ${emailDomain} 域名的邮箱,请更换其他邮箱后重试`
+            })
+
         if (!await AccessControl.checkSession(uuid, session))
             return res.status(401).json({
                 ...BaseStdResponse.ACCESS_DENIED
             })
 
-        let countSql = 'SELECT id, create_user FROM lepao_account WHERE student_num = ?'
+        let countSql = 'SELECT id, create_user, total_num FROM lepao_account WHERE student_num = ?'
         let countRows = await db.query(countSql, [student_num])
 
         if (!countRows)
@@ -60,6 +85,11 @@ class AddAccount extends API {
             }
         }
 
+        if (countRows.length !== 0) {
+            if (countRows[0].total_num >= target_count && target_count !== 0)
+                return res.json({ ...BaseStdResponse.ERR, msg: '该账号累计跑步次数已达到目标次数,请尝试修改目标次数' })
+        }
+
         const time = new Date().getTime()
 
         let sql, r

+ 1 - 2
apis/Lepao/Account/UpdateAccount.js

@@ -22,8 +22,7 @@ class UpdateAccount extends API {
 
         if ([reqData, resData].some(value => value === '' || value === null || value === undefined))
             return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
+                ...BaseStdResponse.MISSING_PARAMETER
             })
 
         try {

+ 2 - 2
apis/Public/GetAppVersion.js

@@ -13,8 +13,8 @@ class GetAppVersion extends API {
         res.json({
             ...BaseStdResponse.OK,
             data: {
-                version: '1.6',
-                msg: '\n更新内容:\n自动乐跑支持随机时段乐跑,每天将随机分配乐跑时间'
+                version: '1.7',
+                msg: '\n更新内容:\n1.自动乐跑支持设定乐跑目标次数,达到目标次数后将不再自动乐跑\n2.修复部分用户无法添加乐跑账号的问题\n'
             }
         })
     }

+ 1 - 1
lib/Lepao/Lepao.js

@@ -303,7 +303,7 @@ class Lepao {
             await EmailTemplate.lepaoSuccess(rows[0].email, data)
             this.logger.info(`${account}乐跑成功邮件发送完成`)
 
-            if (total_num == rows[0].target_count) {
+            if (rows[0].target_count !== 0 && total_num >= rows[0].target_count) {
                 this.logger.info(`${account}乐跑目标完成,发送乐跑结束邮件并关闭自动乐跑`)
                 await EmailTemplate.lepaoOver(rows[0].email, data)
                 let overSql = 'UPDATE lepao_account SET auto_run = 0 WHERE student_num = ?'

+ 1 - 0
plugin/Email/Email.js

@@ -42,6 +42,7 @@ async function sendEmail(email, subject, content) {
                 logger.error(`邮件发送失败 (${currentConfig.user}),错误:`, error.stack)
                 if (i === config.email.length - 1) {
                     // 最后一个配置也失败了
+                    logger.error(`邮件发送失败,所有邮箱配置均不可用`)
                     return reject(error)
                 }
                 // 否则继续下一个配置

+ 2 - 2
plugin/Email/emailTemplate.js

@@ -335,13 +335,13 @@ class emailTemplate {
                 <body>
                 <div class="container">
                     <div class="head">
-                    <h2>🏃‍♀️RunForge - 乐跑任务通关啦!🎉</h2>
+                    <h2>🏃‍♀️RunForge - 乐跑目标完成🎉</h2>
                     </div>
 
                     <p>亲爱的 <span class="highlight">${data.name}</span> 宝宝 ꒰。•ᴗ•。꒱:</p>
 
                     <p>
-                    ✨恭喜恭喜~你已经火力全开地完成了本学期的乐跑任务啦!🎊<br>
+                    ✨恭喜恭喜~你已经火力全开地完成了设定乐跑目标啦!🎊<br>
                     不得不说,你就是我们心中的 <strong>小跑神</strong> 🌟💨,坚持到最后真的超级棒!💪( •̀ᄇ• ́)و
                     </p>