diff --git a/MP/Body.h b/MP/Body.h index 2194540..e84197a 100644 --- a/MP/Body.h +++ b/MP/Body.h @@ -19,14 +19,22 @@ public: body->set_password(password); } - Body(uint64_t target, uint64_t source, const std::string& data) { + Body(mp::MP_SUB_TYPE subType, const std::string& account, const std::string& password, const std::string& data) { body = new mp::body(); - body->set_target(target); - body->set_source(source); + body->set_subcommand(subType); + body->set_account(account); + body->set_password(password); body->set_data(data); } + Body(mp::MP_SUB_TYPE subType, const std::string& account) { + body = new mp::body(); + + body->set_subcommand(subType); + body->set_account(account); + } + Body(mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source, const std::string& data) { body = new mp::body(); @@ -36,6 +44,14 @@ public: body->set_subcommand(subType); } + Body(mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source) { + body = new mp::body(); + + body->set_target(target); + body->set_source(source); + body->set_subcommand(subType); + } + Body() { body = new mp::body(); } diff --git a/MP/Request.cpp b/MP/Request.cpp index 36aaffe..f329b9a 100644 --- a/MP/Request.cpp +++ b/MP/Request.cpp @@ -6,16 +6,32 @@ // 账户或者 手机号|邮箱|账户 请求 登陆注册 Request::Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string& account, const std::string& password) : -Mph(type), Body(subType, account, password), Cqi() { + Mph(type), Body(subType, account, password), Cqi() { } // IM 文本聊天请求 -Request::Request(mp::MP_TYPE type, uint64_t target, uint64_t source, const std::string& data) : -Mph(type), Body(target, source, data), Cqi() { +Request::Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source, const std::string& data) : + Mph(type), Body(subType, target, source, data), Cqi() { } +Request::Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source) : + Mph(type), Body(subType, target, source), Cqi() { + +} + +Request::Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType,const std::string &account, + const std::string &password,const std::string &data) : + Mph(type), Body(subType, account, password, data) { +} + +Request::Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string &account) : + Mph(type), Body(subType, account), Cqi(){ + +} + + Request::~Request() { delete request; } @@ -43,3 +59,5 @@ std::string Request::packet() { + + diff --git a/MP/Request.h b/MP/Request.h index 50eec2c..16aacdf 100644 --- a/MP/Request.h +++ b/MP/Request.h @@ -14,7 +14,10 @@ class Request : public Mph, Body, Cqi { public: Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string& account, const std::string& password); - Request(mp::MP_TYPE type, uint64_t target, uint64_t source, const std::string& data); + Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string& account, const std::string& password, const std::string& data); + Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source, const std::string& data); + Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, uint64_t target, uint64_t source); + Request(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string& account); ~Request() override; public: diff --git a/MS/works/controller/CodeController.cpp b/MS/works/controller/CodeController.cpp index 3fa7c85..8dff01b 100644 --- a/MS/works/controller/CodeController.cpp +++ b/MS/works/controller/CodeController.cpp @@ -5,25 +5,19 @@ #include "CodeController.h" void CodeController::run(std::shared_ptr request, std::shared_ptr response) { - auto* sri = new mp::sri(); + mp::sri* sri = nullptr; + // 请求验证码 if (request->m_body.subcommand() == mp::MP_SUB_TYPE::MP_CODE_EMAIL) { // 生成验证码 std::string code = peVerifCodeService.gen_code(); // 发送验证码至邮 - bool state = peVerifCodeService.send_email(request->m_body.account(), code); - - if (state) { + sri = peVerifCodeService.send_email(request->m_body.account(), code); + if (sri->subcommand() == mp::MP_SUB_TYPE::MP_CODE_SUCCESS) { // 设置session 字段 session->set_session(request->m_bev, "code", code); - sri->set_subcommand(mp::MP_SUB_TYPE::MP_CODE_SUCCESS); - sri->set_msg("验证码已发送"); - } else { - sri->set_subcommand(mp::MP_SUB_TYPE::MP_CODE_FAIL); - sri->set_msg("未知问题,验证码获取失败"); } } response->set(sri, request->m_bev); -// delete sri; } diff --git a/MS/works/db/UserDB.cpp b/MS/works/db/UserDB.cpp index f12941a..ec935cf 100644 --- a/MS/works/db/UserDB.cpp +++ b/MS/works/db/UserDB.cpp @@ -66,13 +66,16 @@ bool UserDB::insert_user_friends(uint64_t account, uint64_t friends) { conn = LinkDB::safe_grab(); auto q = conn->query("insert into im_user_friends (account, friends, restrictions) " "values (%1:account, JSON_OBJECT(%2:key, " - "JSON_OBJECT('belong_grouping', 0, 'add_time', %3:time, 'add_source', 0)), '0')"); + "JSON_OBJECT('belong_grouping', 0, 'username', '用户%4:username', 'add_time', %3:time, 'add_source', 0)), '0')"); q.template_defaults[1] = account; q.template_defaults[2] = friends == 0 ? account : friends; q.template_defaults[3] = time(nullptr); + q.template_defaults[4] = account; q.parse(); + printf("%s\n", q.str().c_str()); + auto ret = q.exec(); // 放回链接 @@ -126,7 +129,6 @@ std::optional UserDB::fetch_account() { return std::nullopt; } - // 放回链接 LinkDB::release(conn); return std::strtol(ret[0][0], nullptr,0); diff --git a/MS/works/db/UserFriendsDB.cpp b/MS/works/db/UserFriendsDB.cpp index 268aaf5..6af8fc2 100644 --- a/MS/works/db/UserFriendsDB.cpp +++ b/MS/works/db/UserFriendsDB.cpp @@ -8,11 +8,14 @@ // 查询好友添加权限类型 char UserFriendsDB::select_add_type(uint64_t account) { conn = LinkDB::safe_grab(); - auto query = conn->query("select restrictions from im_user_friends where account=%0:account"); + auto query = conn->query("select restrictions from im_user_friends where account=%1:account"); + query.template_defaults[1] = account; query.parse(); + printf("%s\n", query.str().c_str()); + // 查看添加授权类型 0 直接添加 1 验证问题 2 账户审核 - auto ret = query.store(account)[0][0][0]; // 因为 account 唯一 所以结果 至多一个 + auto ret = query.store()[0][0][0]; // 因为 account 唯一 所以结果 至多一个 // 放回链接 LinkDB::release(conn); @@ -101,7 +104,7 @@ std::tuple UserFriendsDB::add_friends(uint64_t account, uint6 // 放回链接 LinkDB::release(conn); - return {ret, "添加失败"}; + return {ret, "暂无错误"}; } void UserFriendsDB::insert_friends_to_be_added(uint64_t account, uint64_t friends) { diff --git a/MS/works/service/PEVerifCodeService.cpp b/MS/works/service/PEVerifCodeService.cpp index e5ea56c..90099d2 100644 --- a/MS/works/service/PEVerifCodeService.cpp +++ b/MS/works/service/PEVerifCodeService.cpp @@ -17,7 +17,19 @@ std::string PEVerifCodeService::gen_code() { return code; } -bool PEVerifCodeService::send_email(const std::string &target_email, const std::string &code) { +mp::sri* PEVerifCodeService::send_email(const std::string &target_email, const std::string &code) { + sri_clear(); + emailcode = code == "0" ? emailcode : code; - return send_email_def(target_email, emailcode); + bool state = send_email_def(target_email, emailcode); + + if (state) { + sri->set_subcommand(mp::MP_SUB_TYPE::MP_CODE_SUCCESS); + sri->set_msg("验证码已发送"); + } else { + sri->set_subcommand(mp::MP_SUB_TYPE::MP_CODE_FAIL); + sri->set_msg("未知问题,验证码获取失败"); + } + + return sri; } diff --git a/MS/works/service/PEVerifCodeService.h b/MS/works/service/PEVerifCodeService.h index 7038ecb..b4e5eef 100644 --- a/MS/works/service/PEVerifCodeService.h +++ b/MS/works/service/PEVerifCodeService.h @@ -11,7 +11,7 @@ class PEVerifCodeService : public Service { public: std::string gen_code(); - bool send_email(const std::string& target_email, const std::string& code = "0"); + mp::sri* send_email(const std::string& target_email, const std::string& code = "0"); private: std::string emailcode; diff --git a/MS/works/service/Service.h b/MS/works/service/Service.h index 513e0b3..cbaed1f 100644 --- a/MS/works/service/Service.h +++ b/MS/works/service/Service.h @@ -22,9 +22,11 @@ public: protected: mp::sri* sri; + std::mutex mutex; protected: virtual void sri_clear(){ + mutex.lock(); sri->clear_subcommand(); sri->clear_account(); sri->clear_username(); @@ -33,6 +35,7 @@ protected: sri->clear_token(); sri->clear_msg(); sri->clear_data(); + mutex.unlock(); } }; diff --git a/MS/works/service/UserFriendsService.cpp b/MS/works/service/UserFriendsService.cpp index 77b3dcf..b1ff277 100644 --- a/MS/works/service/UserFriendsService.cpp +++ b/MS/works/service/UserFriendsService.cpp @@ -48,16 +48,13 @@ mp::sri* UserFriendsService::add_contact_person(mp::body *body) { } // 回答问题 else if (type == '1') { - if ("") { - add_friends(body); - } else { - sri->set_subcommand(mp::MP_SUB_TYPE::MP_ADD_FAIL); - sri->set_msg("答案错误"); - } + // 取数据库中的问题 返回类型添加一个 mp::MP_SUB_TYPE::MP_ADD_XXX + sri->set_subcommand(mp::MP_SUB_TYPE::MP_ADD_SUCCESS); + sri->set_msg("xxxx"); } // 账户审核 else if (type == '2') { - + // 添加 用户的带添加段内 } return sri; diff --git a/MS/works/service/UserService.cpp b/MS/works/service/UserService.cpp index fc03b86..2be9c9b 100644 --- a/MS/works/service/UserService.cpp +++ b/MS/works/service/UserService.cpp @@ -127,7 +127,7 @@ mp::sri *UserService::register_(mp::MP_SUB_TYPE subType, const std::string &phon bool UserService::register_(uint64_t account, const std::string &password) { // 查看账户是否存在 auto exist = userDb.select_user_exist(account); - if (!exist) { + if (exist) { sri->set_msg("账户已经存在"); sri->set_subcommand(mp::MP_SUB_TYPE::MP_REGISTER_FAIL); return false;