Generated 2020-05-18 for dataworks-public.
This commit is contained in:
@@ -6711,6 +6711,42 @@ Dataworks_publicClient::ListUsageForResourceGroupOutcomeCallable Dataworks_publi
|
||||
return task->get_future();
|
||||
}
|
||||
|
||||
Dataworks_publicClient::OfflineNodeOutcome Dataworks_publicClient::offlineNode(const OfflineNodeRequest &request) const
|
||||
{
|
||||
auto endpointOutcome = endpointProvider_->getEndpoint();
|
||||
if (!endpointOutcome.isSuccess())
|
||||
return OfflineNodeOutcome(endpointOutcome.error());
|
||||
|
||||
auto outcome = makeRequest(endpointOutcome.result(), request);
|
||||
|
||||
if (outcome.isSuccess())
|
||||
return OfflineNodeOutcome(OfflineNodeResult(outcome.result()));
|
||||
else
|
||||
return OfflineNodeOutcome(outcome.error());
|
||||
}
|
||||
|
||||
void Dataworks_publicClient::offlineNodeAsync(const OfflineNodeRequest& request, const OfflineNodeAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context) const
|
||||
{
|
||||
auto fn = [this, request, handler, context]()
|
||||
{
|
||||
handler(this, request, offlineNode(request), context);
|
||||
};
|
||||
|
||||
asyncExecute(new Runnable(fn));
|
||||
}
|
||||
|
||||
Dataworks_publicClient::OfflineNodeOutcomeCallable Dataworks_publicClient::offlineNodeCallable(const OfflineNodeRequest &request) const
|
||||
{
|
||||
auto task = std::make_shared<std::packaged_task<OfflineNodeOutcome()>>(
|
||||
[this, request]()
|
||||
{
|
||||
return this->offlineNode(request);
|
||||
});
|
||||
|
||||
asyncExecute(new Runnable([task]() { (*task)(); }));
|
||||
return task->get_future();
|
||||
}
|
||||
|
||||
Dataworks_publicClient::PublishDataServiceApiOutcome Dataworks_publicClient::publishDataServiceApi(const PublishDataServiceApiRequest &request) const
|
||||
{
|
||||
auto endpointOutcome = endpointProvider_->getEndpoint();
|
||||
|
||||
@@ -43,15 +43,6 @@ void AddProjectMemberToRoleRequest::setClientToken(const std::string &clientToke
|
||||
setParameter(std::string("ClientToken"), clientToken);
|
||||
}
|
||||
|
||||
long AddProjectMemberToRoleRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void AddProjectMemberToRoleRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
std::string AddProjectMemberToRoleRequest::getUserId() const {
|
||||
return userId_;
|
||||
}
|
||||
@@ -61,3 +52,12 @@ void AddProjectMemberToRoleRequest::setUserId(const std::string &userId) {
|
||||
setParameter(std::string("UserId"), userId);
|
||||
}
|
||||
|
||||
long AddProjectMemberToRoleRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void AddProjectMemberToRoleRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
|
||||
@@ -43,15 +43,6 @@ void CreateProjectMemberRequest::setClientToken(const std::string &clientToken)
|
||||
setParameter(std::string("ClientToken"), clientToken);
|
||||
}
|
||||
|
||||
long CreateProjectMemberRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void CreateProjectMemberRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
std::string CreateProjectMemberRequest::getUserId() const {
|
||||
return userId_;
|
||||
}
|
||||
@@ -61,3 +52,12 @@ void CreateProjectMemberRequest::setUserId(const std::string &userId) {
|
||||
setParameter(std::string("UserId"), userId);
|
||||
}
|
||||
|
||||
long CreateProjectMemberRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void CreateProjectMemberRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
|
||||
@@ -25,15 +25,6 @@ DeleteProjectMemberRequest::DeleteProjectMemberRequest()
|
||||
|
||||
DeleteProjectMemberRequest::~DeleteProjectMemberRequest() {}
|
||||
|
||||
long DeleteProjectMemberRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void DeleteProjectMemberRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
std::string DeleteProjectMemberRequest::getUserId() const {
|
||||
return userId_;
|
||||
}
|
||||
@@ -43,3 +34,12 @@ void DeleteProjectMemberRequest::setUserId(const std::string &userId) {
|
||||
setParameter(std::string("UserId"), userId);
|
||||
}
|
||||
|
||||
long DeleteProjectMemberRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void DeleteProjectMemberRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,8 @@ void GetDISyncInstanceInfoResult::parse(const std::string &payload)
|
||||
stepDetailItemObject.stepId = std::stol(solutionInfoNodeStepDetailStepDetailItem["StepId"].asString());
|
||||
if(!solutionInfoNodeStepDetailStepDetailItem["StepName"].isNull())
|
||||
stepDetailItemObject.stepName = solutionInfoNodeStepDetailStepDetailItem["StepName"].asString();
|
||||
if(!solutionInfoNodeStepDetailStepDetailItem["Info"].isNull())
|
||||
stepDetailItemObject.info = solutionInfoNodeStepDetailStepDetailItem["Info"].asString();
|
||||
data_.solutionInfo.stepDetail.push_back(stepDetailItemObject);
|
||||
}
|
||||
if(!value["Success"].isNull())
|
||||
|
||||
@@ -40,6 +40,18 @@ void GetDeploymentResult::parse(const std::string &payload)
|
||||
reader.parse(payload, value);
|
||||
setRequestId(value["RequestId"].asString());
|
||||
auto dataNode = value["Data"];
|
||||
auto allDeployedItemsNode = dataNode["DeployedItems"]["DeployedItem"];
|
||||
for (auto dataNodeDeployedItemsDeployedItem : allDeployedItemsNode)
|
||||
{
|
||||
Data::DeployedItem deployedItemObject;
|
||||
if(!dataNodeDeployedItemsDeployedItem["FileId"].isNull())
|
||||
deployedItemObject.fileId = std::stol(dataNodeDeployedItemsDeployedItem["FileId"].asString());
|
||||
if(!dataNodeDeployedItemsDeployedItem["FileVersion"].isNull())
|
||||
deployedItemObject.fileVersion = std::stol(dataNodeDeployedItemsDeployedItem["FileVersion"].asString());
|
||||
if(!dataNodeDeployedItemsDeployedItem["Status"].isNull())
|
||||
deployedItemObject.status = std::stoi(dataNodeDeployedItemsDeployedItem["Status"].asString());
|
||||
data_.deployedItems.push_back(deployedItemObject);
|
||||
}
|
||||
auto deploymentNode = dataNode["Deployment"];
|
||||
if(!deploymentNode["Status"].isNull())
|
||||
data_.deployment.status = std::stoi(deploymentNode["Status"].asString());
|
||||
|
||||
@@ -25,24 +25,6 @@ ListPermissionApplyOrdersRequest::ListPermissionApplyOrdersRequest()
|
||||
|
||||
ListPermissionApplyOrdersRequest::~ListPermissionApplyOrdersRequest() {}
|
||||
|
||||
std::string ListPermissionApplyOrdersRequest::getMaxComputeProjectName() const {
|
||||
return maxComputeProjectName_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setMaxComputeProjectName(const std::string &maxComputeProjectName) {
|
||||
maxComputeProjectName_ = maxComputeProjectName;
|
||||
setParameter(std::string("MaxComputeProjectName"), maxComputeProjectName);
|
||||
}
|
||||
|
||||
long ListPermissionApplyOrdersRequest::getEndTime() const {
|
||||
return endTime_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setEndTime(long endTime) {
|
||||
endTime_ = endTime;
|
||||
setParameter(std::string("EndTime"), std::to_string(endTime));
|
||||
}
|
||||
|
||||
long ListPermissionApplyOrdersRequest::getStartTime() const {
|
||||
return startTime_;
|
||||
}
|
||||
@@ -61,15 +43,6 @@ void ListPermissionApplyOrdersRequest::setPageNum(int pageNum) {
|
||||
setParameter(std::string("PageNum"), std::to_string(pageNum));
|
||||
}
|
||||
|
||||
int ListPermissionApplyOrdersRequest::getFlowStatus() const {
|
||||
return flowStatus_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setFlowStatus(int flowStatus) {
|
||||
flowStatus_ = flowStatus;
|
||||
setParameter(std::string("FlowStatus"), std::to_string(flowStatus));
|
||||
}
|
||||
|
||||
int ListPermissionApplyOrdersRequest::getPageSize() const {
|
||||
return pageSize_;
|
||||
}
|
||||
@@ -97,6 +70,42 @@ void ListPermissionApplyOrdersRequest::setQueryType(int queryType) {
|
||||
setParameter(std::string("QueryType"), std::to_string(queryType));
|
||||
}
|
||||
|
||||
std::string ListPermissionApplyOrdersRequest::getEngineType() const {
|
||||
return engineType_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setEngineType(const std::string &engineType) {
|
||||
engineType_ = engineType;
|
||||
setParameter(std::string("EngineType"), engineType);
|
||||
}
|
||||
|
||||
std::string ListPermissionApplyOrdersRequest::getMaxComputeProjectName() const {
|
||||
return maxComputeProjectName_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setMaxComputeProjectName(const std::string &maxComputeProjectName) {
|
||||
maxComputeProjectName_ = maxComputeProjectName;
|
||||
setParameter(std::string("MaxComputeProjectName"), maxComputeProjectName);
|
||||
}
|
||||
|
||||
long ListPermissionApplyOrdersRequest::getEndTime() const {
|
||||
return endTime_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setEndTime(long endTime) {
|
||||
endTime_ = endTime;
|
||||
setParameter(std::string("EndTime"), std::to_string(endTime));
|
||||
}
|
||||
|
||||
int ListPermissionApplyOrdersRequest::getFlowStatus() const {
|
||||
return flowStatus_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setFlowStatus(int flowStatus) {
|
||||
flowStatus_ = flowStatus;
|
||||
setParameter(std::string("FlowStatus"), std::to_string(flowStatus));
|
||||
}
|
||||
|
||||
int ListPermissionApplyOrdersRequest::getWorkspaceId() const {
|
||||
return workspaceId_;
|
||||
}
|
||||
@@ -115,12 +124,3 @@ void ListPermissionApplyOrdersRequest::setOrderType(int orderType) {
|
||||
setParameter(std::string("OrderType"), std::to_string(orderType));
|
||||
}
|
||||
|
||||
std::string ListPermissionApplyOrdersRequest::getEngineType() const {
|
||||
return engineType_;
|
||||
}
|
||||
|
||||
void ListPermissionApplyOrdersRequest::setEngineType(const std::string &engineType) {
|
||||
engineType_ = engineType;
|
||||
setParameter(std::string("EngineType"), engineType);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,15 @@ ListProjectMembersRequest::ListProjectMembersRequest()
|
||||
|
||||
ListProjectMembersRequest::~ListProjectMembersRequest() {}
|
||||
|
||||
int ListProjectMembersRequest::getPageNumber() const {
|
||||
return pageNumber_;
|
||||
}
|
||||
|
||||
void ListProjectMembersRequest::setPageNumber(int pageNumber) {
|
||||
pageNumber_ = pageNumber;
|
||||
setParameter(std::string("PageNumber"), std::to_string(pageNumber));
|
||||
}
|
||||
|
||||
int ListProjectMembersRequest::getPageSize() const {
|
||||
return pageSize_;
|
||||
}
|
||||
@@ -43,12 +52,3 @@ void ListProjectMembersRequest::setProjectId(long projectId) {
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
int ListProjectMembersRequest::getPageNumber() const {
|
||||
return pageNumber_;
|
||||
}
|
||||
|
||||
void ListProjectMembersRequest::setPageNumber(int pageNumber) {
|
||||
pageNumber_ = pageNumber;
|
||||
setParameter(std::string("PageNumber"), std::to_string(pageNumber));
|
||||
}
|
||||
|
||||
|
||||
@@ -25,15 +25,6 @@ ListProjectsRequest::ListProjectsRequest()
|
||||
|
||||
ListProjectsRequest::~ListProjectsRequest() {}
|
||||
|
||||
int ListProjectsRequest::getPageSize() const {
|
||||
return pageSize_;
|
||||
}
|
||||
|
||||
void ListProjectsRequest::setPageSize(int pageSize) {
|
||||
pageSize_ = pageSize;
|
||||
setParameter(std::string("PageSize"), std::to_string(pageSize));
|
||||
}
|
||||
|
||||
int ListProjectsRequest::getPageNumber() const {
|
||||
return pageNumber_;
|
||||
}
|
||||
@@ -43,3 +34,12 @@ void ListProjectsRequest::setPageNumber(int pageNumber) {
|
||||
setParameter(std::string("PageNumber"), std::to_string(pageNumber));
|
||||
}
|
||||
|
||||
int ListProjectsRequest::getPageSize() const {
|
||||
return pageSize_;
|
||||
}
|
||||
|
||||
void ListProjectsRequest::setPageSize(int pageSize) {
|
||||
pageSize_ = pageSize;
|
||||
setParameter(std::string("PageSize"), std::to_string(pageSize));
|
||||
}
|
||||
|
||||
|
||||
45
dataworks-public/src/model/OfflineNodeRequest.cc
Normal file
45
dataworks-public/src/model/OfflineNodeRequest.cc
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2009-2017 Alibaba Cloud All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <alibabacloud/dataworks-public/model/OfflineNodeRequest.h>
|
||||
|
||||
using AlibabaCloud::Dataworks_public::Model::OfflineNodeRequest;
|
||||
|
||||
OfflineNodeRequest::OfflineNodeRequest()
|
||||
: RpcServiceRequest("dataworks-public", "2020-05-18", "OfflineNode") {
|
||||
setMethod(HttpRequest::Method::Post);
|
||||
}
|
||||
|
||||
OfflineNodeRequest::~OfflineNodeRequest() {}
|
||||
|
||||
long OfflineNodeRequest::getNodeId() const {
|
||||
return nodeId_;
|
||||
}
|
||||
|
||||
void OfflineNodeRequest::setNodeId(long nodeId) {
|
||||
nodeId_ = nodeId;
|
||||
setBodyParameter(std::string("NodeId"), std::to_string(nodeId));
|
||||
}
|
||||
|
||||
long OfflineNodeRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void OfflineNodeRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setBodyParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
51
dataworks-public/src/model/OfflineNodeResult.cc
Normal file
51
dataworks-public/src/model/OfflineNodeResult.cc
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2009-2017 Alibaba Cloud All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <alibabacloud/dataworks-public/model/OfflineNodeResult.h>
|
||||
#include <json/json.h>
|
||||
|
||||
using namespace AlibabaCloud::Dataworks_public;
|
||||
using namespace AlibabaCloud::Dataworks_public::Model;
|
||||
|
||||
OfflineNodeResult::OfflineNodeResult() :
|
||||
ServiceResult()
|
||||
{}
|
||||
|
||||
OfflineNodeResult::OfflineNodeResult(const std::string &payload) :
|
||||
ServiceResult()
|
||||
{
|
||||
parse(payload);
|
||||
}
|
||||
|
||||
OfflineNodeResult::~OfflineNodeResult()
|
||||
{}
|
||||
|
||||
void OfflineNodeResult::parse(const std::string &payload)
|
||||
{
|
||||
Json::Reader reader;
|
||||
Json::Value value;
|
||||
reader.parse(payload, value);
|
||||
setRequestId(value["RequestId"].asString());
|
||||
if(!value["Success"].isNull())
|
||||
success_ = value["Success"].asString();
|
||||
|
||||
}
|
||||
|
||||
std::string OfflineNodeResult::getSuccess()const
|
||||
{
|
||||
return success_;
|
||||
}
|
||||
|
||||
@@ -34,15 +34,6 @@ void RemoveProjectMemberFromRoleRequest::setRoleCode(const std::string &roleCode
|
||||
setParameter(std::string("RoleCode"), roleCode);
|
||||
}
|
||||
|
||||
long RemoveProjectMemberFromRoleRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void RemoveProjectMemberFromRoleRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
std::string RemoveProjectMemberFromRoleRequest::getUserId() const {
|
||||
return userId_;
|
||||
}
|
||||
@@ -52,3 +43,12 @@ void RemoveProjectMemberFromRoleRequest::setUserId(const std::string &userId) {
|
||||
setParameter(std::string("UserId"), userId);
|
||||
}
|
||||
|
||||
long RemoveProjectMemberFromRoleRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
void RemoveProjectMemberFromRoleRequest::setProjectId(long projectId) {
|
||||
projectId_ = projectId;
|
||||
setParameter(std::string("ProjectId"), std::to_string(projectId));
|
||||
}
|
||||
|
||||
|
||||
@@ -34,15 +34,6 @@ void TestNetworkConnectionRequest::setResourceGroup(const std::string &resourceG
|
||||
setParameter(std::string("ResourceGroup"), resourceGroup);
|
||||
}
|
||||
|
||||
std::string TestNetworkConnectionRequest::getEnvType() const {
|
||||
return envType_;
|
||||
}
|
||||
|
||||
void TestNetworkConnectionRequest::setEnvType(const std::string &envType) {
|
||||
envType_ = envType;
|
||||
setParameter(std::string("EnvType"), envType);
|
||||
}
|
||||
|
||||
std::string TestNetworkConnectionRequest::getDatasourceName() const {
|
||||
return datasourceName_;
|
||||
}
|
||||
@@ -52,6 +43,15 @@ void TestNetworkConnectionRequest::setDatasourceName(const std::string &datasour
|
||||
setParameter(std::string("DatasourceName"), datasourceName);
|
||||
}
|
||||
|
||||
std::string TestNetworkConnectionRequest::getEnvType() const {
|
||||
return envType_;
|
||||
}
|
||||
|
||||
void TestNetworkConnectionRequest::setEnvType(const std::string &envType) {
|
||||
envType_ = envType;
|
||||
setParameter(std::string("EnvType"), envType);
|
||||
}
|
||||
|
||||
long TestNetworkConnectionRequest::getProjectId() const {
|
||||
return projectId_;
|
||||
}
|
||||
|
||||
@@ -25,24 +25,6 @@ UpdateDataSourceRequest::UpdateDataSourceRequest()
|
||||
|
||||
UpdateDataSourceRequest::~UpdateDataSourceRequest() {}
|
||||
|
||||
int UpdateDataSourceRequest::getEnvType() const {
|
||||
return envType_;
|
||||
}
|
||||
|
||||
void UpdateDataSourceRequest::setEnvType(int envType) {
|
||||
envType_ = envType;
|
||||
setParameter(std::string("EnvType"), std::to_string(envType));
|
||||
}
|
||||
|
||||
long UpdateDataSourceRequest::getDataSourceId() const {
|
||||
return dataSourceId_;
|
||||
}
|
||||
|
||||
void UpdateDataSourceRequest::setDataSourceId(long dataSourceId) {
|
||||
dataSourceId_ = dataSourceId;
|
||||
setParameter(std::string("DataSourceId"), std::to_string(dataSourceId));
|
||||
}
|
||||
|
||||
std::string UpdateDataSourceRequest::getDescription() const {
|
||||
return description_;
|
||||
}
|
||||
@@ -61,6 +43,24 @@ void UpdateDataSourceRequest::setContent(const std::string &content) {
|
||||
setParameter(std::string("Content"), content);
|
||||
}
|
||||
|
||||
int UpdateDataSourceRequest::getEnvType() const {
|
||||
return envType_;
|
||||
}
|
||||
|
||||
void UpdateDataSourceRequest::setEnvType(int envType) {
|
||||
envType_ = envType;
|
||||
setParameter(std::string("EnvType"), std::to_string(envType));
|
||||
}
|
||||
|
||||
long UpdateDataSourceRequest::getDataSourceId() const {
|
||||
return dataSourceId_;
|
||||
}
|
||||
|
||||
void UpdateDataSourceRequest::setDataSourceId(long dataSourceId) {
|
||||
dataSourceId_ = dataSourceId;
|
||||
setParameter(std::string("DataSourceId"), std::to_string(dataSourceId));
|
||||
}
|
||||
|
||||
std::string UpdateDataSourceRequest::getStatus() const {
|
||||
return status_;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user