feat: add daily tasks and fix /admin139 admin entry
这个提交包含在:
@@ -10,6 +10,10 @@ class MeController : public drogon::HttpController<MeController> {
|
||||
public:
|
||||
METHOD_LIST_BEGIN
|
||||
ADD_METHOD_TO(MeController::profile, "/api/v1/me", drogon::Get);
|
||||
ADD_METHOD_TO(MeController::listRedeemItems, "/api/v1/me/redeem/items", drogon::Get);
|
||||
ADD_METHOD_TO(MeController::listRedeemRecords, "/api/v1/me/redeem/records", drogon::Get);
|
||||
ADD_METHOD_TO(MeController::createRedeemRecord, "/api/v1/me/redeem/records", drogon::Post);
|
||||
ADD_METHOD_TO(MeController::listDailyTasks, "/api/v1/me/daily-tasks", drogon::Get);
|
||||
ADD_METHOD_TO(MeController::listWrongBook, "/api/v1/me/wrong-book", drogon::Get);
|
||||
ADD_METHOD_TO(MeController::upsertWrongBookNote, "/api/v1/me/wrong-book/{1}", drogon::Patch);
|
||||
ADD_METHOD_TO(MeController::deleteWrongBookItem, "/api/v1/me/wrong-book/{1}", drogon::Delete);
|
||||
@@ -18,6 +22,18 @@ class MeController : public drogon::HttpController<MeController> {
|
||||
void profile(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
void listRedeemItems(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
void listRedeemRecords(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
void createRedeemRecord(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
void listDailyTasks(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
void listWrongBook(const drogon::HttpRequestPtr& req,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& cb);
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include "csp/db/sqlite_db.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace csp::services {
|
||||
|
||||
struct DailyTaskItem {
|
||||
std::string code;
|
||||
std::string title;
|
||||
std::string description;
|
||||
int reward = 1;
|
||||
bool completed = false;
|
||||
int64_t completed_at = 0;
|
||||
};
|
||||
|
||||
class DailyTaskService {
|
||||
public:
|
||||
static constexpr const char* kTaskLoginCheckin = "login_checkin";
|
||||
static constexpr const char* kTaskDailySubmit = "daily_submit";
|
||||
static constexpr const char* kTaskFirstAc = "first_ac";
|
||||
static constexpr const char* kTaskCodeQuality = "code_quality";
|
||||
|
||||
explicit DailyTaskService(db::SqliteDb& db) : db_(db) {}
|
||||
|
||||
std::string CurrentDayKey() const;
|
||||
std::vector<DailyTaskItem> ListTodayTasks(int64_t user_id) const;
|
||||
|
||||
// Returns true when the task is completed for the first time today
|
||||
// (and reward is granted), false when already completed.
|
||||
bool CompleteTaskIfFirstToday(int64_t user_id, const std::string& task_code);
|
||||
|
||||
private:
|
||||
db::SqliteDb& db_;
|
||||
};
|
||||
|
||||
} // namespace csp::services
|
||||
在新工单中引用
屏蔽一个用户