fix: PATCH /me logic
This commit is contained in:
+33
-23
@@ -239,6 +239,39 @@ Json::Value AuthService::changePassword(const auth::UserContext &user,
|
|||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Json::Value AuthService::currentUser(const auth::UserContext &user)
|
||||||
|
{
|
||||||
|
auto db = drogon::app().getDbClient();
|
||||||
|
const auto result = db->execSqlSync(
|
||||||
|
"SELECT id, first_name, last_name, email, fiscal_code, phone, points, "
|
||||||
|
"must_change_password FROM users WHERE id = ?",
|
||||||
|
user.id);
|
||||||
|
|
||||||
|
auto response = success();
|
||||||
|
if (!result.empty())
|
||||||
|
{
|
||||||
|
response["user"]["id"] = Json::Int64(result[0]["id"].as<long long>());
|
||||||
|
response["user"]["first_name"] = result[0]["first_name"].as<std::string>();
|
||||||
|
response["user"]["last_name"] = result[0]["last_name"].as<std::string>();
|
||||||
|
response["user"]["email"] = result[0]["email"].as<std::string>();
|
||||||
|
response["user"]["fiscal_code"] = result[0]["fiscal_code"].as<std::string>();
|
||||||
|
response["user"]["phone"] = result[0]["phone"].as<std::string>();
|
||||||
|
response["user"]["points"] = result[0]["points"].as<int>();
|
||||||
|
response["user"]["must_change_password"] =
|
||||||
|
result[0]["must_change_password"].as<bool>();
|
||||||
|
response["user"]["role"] = user.role;
|
||||||
|
for (const auto &role : user.roles)
|
||||||
|
{
|
||||||
|
response["user"]["roles"].append(role);
|
||||||
|
}
|
||||||
|
for (const auto &permission : user.permissions)
|
||||||
|
{
|
||||||
|
response["user"]["permissions"].append(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) {
|
Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) {
|
||||||
const auto allowedFields = {"first_name", "last_name", "phone"};
|
const auto allowedFields = {"first_name", "last_name", "phone"};
|
||||||
auto db = drogon::app().getDbClient();
|
auto db = drogon::app().getDbClient();
|
||||||
@@ -265,27 +298,4 @@ Json::Value AuthService::changePassword(const auth::UserContext &user,
|
|||||||
|
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) {
|
|
||||||
const auto allowedFields = {"first_name", "last_name", "phone"};
|
|
||||||
if (!body.isMember("field") || !body.isMember("value") ||
|
|
||||||
!body["field"].isString() || !body["value"].isString())
|
|
||||||
{
|
|
||||||
return failure("missing_fields");
|
|
||||||
}
|
|
||||||
const auto field = body["field"].asString();
|
|
||||||
if (std::find(allowedFields.begin(), allowedFields.end(), field) ==
|
|
||||||
allowedFields.end())
|
|
||||||
{
|
|
||||||
return failure("invalid_field");
|
|
||||||
}
|
|
||||||
|
|
||||||
auto db = drogon::app().getDbClient();
|
|
||||||
db->execSqlSync(
|
|
||||||
"UPDATE users SET " + field + " = ? WHERE id = ?",
|
|
||||||
body["value"].asString(),
|
|
||||||
user.id);
|
|
||||||
|
|
||||||
return success();
|
|
||||||
}
|
|
||||||
} // namespace visione::services
|
} // namespace visione::services
|
||||||
|
|||||||
Reference in New Issue
Block a user