ユーザー詳細管理
ユーザー詳細はユーザーごとにデータを保持する機能です。
データ管理機能と同様に、アプリケーションごとに独自のオブジェクトデータを作成することができます。また、ユーザー管理機能と異なり、他のユーザーにデータを公開することもできます。
このページでは、ユーザー詳細管理機能を利⽤する実装例を紹介します。
オブジェクトを作成する
データ管理機能と同様に、管理画面の「データ項目管理」→「各種オブジェクト項目設定」を開き、「新規登録」よりオブジェクトの新規登録を行うことができます。
オブジェクト種別で「ユーザー詳細」を選択して、「オブジェクトID」と「オブジェクト名称」を入力し、「登録」ボタンをクリックするとオブジェクトが作成されます。
注意
オブジェクトの登録操作完了後、結果がシステムに反映されるまで最大1分間かかります。ご注意ください。
オブジェクト項目を設定する
データ管理機能と同様に、管理画面の「各種オブジェクト項目設定」より編集したいオブジェクトの「項目設定」を開くと、オブジェクト項目の設定を行うことができます。
注意
オブジェクト項目設定の変更操作完了後、結果がシステムに反映されるまで最大1分間かかります。ご注意ください。
ユーザー詳細を登録する
ユーザー詳細へのデータ登録はaddUserDetail
メソッドで行います。
object_id
には事前に作成していたオブジェクトのオブジェクトIDを設定します。
let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.attributes = [
"shop_cd": "0001", // 独自に追加した項目
"star": 5,
"review_text": "Very good!"
]
let userAccessToken = "xxx"
RKZService.sharedInstance().addUserDetail(userDetail, userAccessToken: userAccessToken) { newUserDetail, responseStatus in
if responseStatus.isSuccess, let newUserDetail = newUserDetail {
// 成功時
print("id:", newUserDetail.id ?? "") // すべてのユーザー詳細で一意なキー
print("code:", newUserDetail.code ?? "") // 登録したユーザーの中で一意なキー
print("shop_cd:", newUserDetail.attributes?["shop_cd"] ?? "")
print("star:", newUserDetail.attributes?["star"] ?? "")
print("review_text:", newUserDetail.attributes?["review_text"] ?? "")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.attributes = @{
@"shop_cd": @"0001", // 独自に追加した項目
@"star": @5,
@"review_text": @"Very good!"
};
NSString *userAccessToken = @"xxx";
[[RKZService sharedInstance] addUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"id: %@", userDetail.id); // すべてのユーザー詳細で一意なキー
NSLog(@"code: %@", userDetail.code); // 登録したユーザーの中で一意なキー
NSLog(@"shop_cd: %@", userDetail.attributes[@"shop_cd"]);
NSLog(@"star: %@", userDetail.attributes[@"star"]);
NSLog(@"review_text: %@", userDetail.attributes[@"review_text"]);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.attributes = mapOf(
"shop_cd" to "0001", // 独自に追加した項目
"star" to 5,
"review_text" to "Very good!"
)
val userAccessToken = "xxx"
RKZClient.getInstance().addUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "id: ${newUserDetail.id}") // すべてのユーザー詳細で一意なキー
Log.d(TAG, "code: ${newUserDetail.code}") // 登録したユーザーの中で一意なキー
Log.d(TAG, "shop_cd: ${newUserDetail.attributes["shop_cd"]}")
Log.d(TAG, "star: ${newUserDetail.attributes["star"]}")
Log.d(TAG, "review_text: ${newUserDetail.attributes["review_text"]}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setAttributesValue("shop_cd", "0001"); // 独自に追加した項目
userDetail.setAttributesValue("star", 5);
userDetail.setAttributesValue("review_text", "Very good!");
String userAccessToken = "xxx";
RKZClient.getInstance().addUserDetail(userDetail, userAccessToken, new OnAddUserDetailListener() {
@Override
public void onAddUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "id: " + userDetail.getId()); // すべてのユーザー詳細で一意なキー
Log.d(TAG, "code: " + userDetail.getCode()); // 登録したユーザーの中で一意なキー
Log.d(TAG, "shop_cd: " + userDetail.getAttributesValueString("shop_cd"));
Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
Log.d(TAG, "review_text: " + userDetail.getAttributesValueString("review_text"));
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var userAccessToken = 'xxx'
var userDetail = {
object_id: 'shop_review',
attributes: {
shop_cd: '0001', // 独自に追加した項目
star: 5,
review_text: 'Very good!'
}
}
RKZClient.addUserDetail(userDetail, userAccessToken, function (newUserDetail) {
// 成功時
console.debug('id:', newUserDetail.id) // すべてのユーザー詳細で一意なキー
console.debug('code:', newUserDetail.code) // 登録したユーザーの中で一意なキー
console.debug('shop_cd:', newUserDetail.attributes.shop_cd)
console.debug('star:', newUserDetail.attributes.star)
console.debug('review_text:', newUserDetail.attributes.review_text)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const userAccessToken = 'xxx'
const userDetail = await RKZ.UserDetail.add(userAccessToken, {
object_id: 'shop_review',
attributes: {
shop_cd: '0001', // 独自に追加した項目
star: 5,
review_text: 'Very good!'
}
})
console.debug('id:', userDetail.id) // すべてのユーザー詳細で一意なキー
console.debug('code:', userDetail.code) // 登録したユーザーの中で一意なキー
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
final userAccessToken = 'xxx';
final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.attributes = {
'shop_cd': '0001', // 独自に追加した項目
'star': 5,
'review_text': 'Very good!'
};
final newUserDetail = await RKZClient.instance.addUserDetail(userAccessToken, userDetail);
print('id: ${newUserDetail.id}'); // すべてのユーザー詳細で一意なキー
print('code: ${newUserDetail.code}'); // 登録したユーザーの中で一意なキー
print('shop_cd: ' + newUserDetail.attributes?['shop_cd']);
print('star: ' + newUserDetail.attributes?['star']);
print('review_text: ' + newUserDetail.attributes?['review_text']);
const userDetail = await RKZ.UserDetail.add({ user_no: 'APP00001' }, {
object_id: 'shop_review',
attributes: {
shop_cd: '0001', // 独自に追加した項目
star: 5,
review_text: 'Very good!'
}
})
console.debug('id:', userDetail.id) // すべてのユーザー詳細で一意なキー
console.debug('code:', userDetail.code) // 登録したユーザーの中で一意なキー
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
curl --location '<配布したベースURL>/api_zeus/user_detail/add/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[free_columns][shop_cd]="0001"' \
--form 'contents[free_columns][star]=5' \
--form 'contents[free_columns][review_text]="Very good!"'
登録に成功すると、ユーザー詳細ID(id
)とコード(code
)が返却されます。ユーザー詳細IDは登録したユーザーのレコード以外も含めたオブジェクト全体で一意なキーです。対して、コードは登録したユーザーのレコードの中で一意なキーです。
ユーザー詳細IDはオブジェクト全体に対してレコードを特定したい場合(例えば、お気に⼊りの登録など)で使用します。
ヒント
アプリケーションで独自に追加した項目はattributes
というプロパティに設定する必要があります。
先述のサンプルコードで登録したユーザー詳細は登録したユーザーのみデータを参照することができますが、公開範囲を指定することで他のユーザーもデータを参照することができます。
公開範囲はvisibility
で指定することができます。
let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.visibility = RKZUserDetailVisibilityPublicToUsers // 公開範囲
userDetail.attributes = [
"shop_cd": "0001",
// ...
]
let userAccessToken = "xxx"
RKZService.sharedInstance().addUserDetail(userDetail, userAccessToken: userAccessToken) { newUserDetail, responseStatus in
if responseStatus.isSuccess, let newUserDetail = newUserDetail {
// 成功時
print("visibility:", newUserDetail.visibility ?? "")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.visibility = RKZUserDetailVisibilityPublicToUsers; // 公開範囲
userDetail.attributes = @{
@"shop_cd": @"0001",
// ...
};
NSString *userAccessToken = @"xxx";
[[RKZService sharedInstance] addUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"visibility: %@", userDetail.visibility);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.visibility = UserDetail.VisibilityType.PublicToUsers // 公開範囲
userDetail.attributes = mapOf(
"shop_cd" to "0001",
// ...
)
val userAccessToken = "xxx"
RKZClient.getInstance().addUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "visibility: ${newUserDetail.visibility}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setVisibility(UserDetail.VisibilityType.PublicToUsers); // 公開範囲
userDetail.setAttributesValue("shop_cd", "0001");
// ...
String userAccessToken = "xxx";
RKZClient.getInstance().addUserDetail(userDetail, userAccessToken, new OnAddUserDetailListener() {
@Override
public void onAddUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "visibility: " + userDetail.getVisibility());
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var userAccessToken = 'xxx'
var userDetail = {
object_id: 'shop_review',
visibility: '0002', // 公開範囲(PublicToUsers)
attributes: {
//...
}
}
RKZClient.addUserDetail(userDetail, userAccessToken, function (newUserDetail) {
// 成功時
console.debug('visibility:', newUserDetail.visibility)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const userAccessToken = 'xxx'
const userDetail = await RKZ.UserDetail.add(userAccessToken, {
object_id: 'shop_review',
visibility: RKZ.VisibilityType.PublicToUsers, // 公開範囲
attributes: {
//...
}
})
console.debug('visibility:', userDetail.visibility)
final userAccessToken = 'xxx';
final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.visibility = VisibilityType.publicToUsers; // 公開範囲
userDetail.attributes = {
// ...
};
final newUserDetail = await RKZClient.instance.addUserDetail(userAccessToken, userDetail);
print('visibility: ${newUserDetail.visibility}');
const userDetail = await RKZ.UserDetail.add({ user_no: 'APP00001' }, {
object_id: 'shop_review',
visibility: RKZ.VisibilityType.PublicToUsers, // 公開範囲
attributes: {
//...
}
})
console.debug('visibility:', userDetail.visibility)
curl --location '<配布したベースURL>/api_zeus/user_detail/add/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[free_columns][shop_cd]="0001"' \
--form 'contents[free_columns][star]=5' \
--form 'contents[free_columns][review_text]="Very good!"' \
--form 'contents[visibility]="0002"'
公開範囲は以下の種類があります。公開範囲を指定しない場合はPrivate
になります。
公開範囲 | 値 | 概要 |
---|---|---|
Private (非公開) | "0001" | この公開範囲を指定したユーザー詳細は、登録したユーザーのみ参照することができます。 |
PublicToUsers (制限付き公開) | "0002" | この公開範囲を指定したユーザー詳細は、登録したユーザー以外も参照することができます。 ただし、参照するにはユーザーアクセストークンで認証を行う必要があります。 |
Public (公開) | "0003" | この公開範囲を指定したユーザー詳細は、登録したユーザー以外も参照することができます。PublicToUsers と異なり、参照にユーザーアクセストークンは不要です。 |
ユーザー詳細を1件取得する
ユーザー詳細の1件取得はgetUserDetail
メソッド(JavaScript・FlutterはUserDetailQuery.findById
メソッド)で⾏います。
登録したユーザー詳細のIDを条件に1件データを取得します。
let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
RKZService.sharedInstance().getUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId) { userDetail, responseStatus in
if responseStatus.isSuccess, let userDetail = userDetail {
// 成功時
print("id:", userDetail.id ?? "")
print("code:", userDetail.code ?? "")
print("shop_cd:", userDetail.attributes?["shop_cd"] ?? "")
print("star:", userDetail.attributes?["star"] ?? "")
print("review_text:", userDetail.attributes?["review_text"] ?? "")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
[[RKZService sharedInstance] getUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"id: %@", userDetail.id);
NSLog(@"code: %@", userDetail.code);
NSLog(@"shop_cd: %@", userDetail.attributes[@"shop_cd"]);
NSLog(@"star: %@", userDetail.attributes[@"star"]);
NSLog(@"review_text: %@", userDetail.attributes[@"review_text"]);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
RKZClient.getInstance().getUserDetail(objectId, userAccessToken, userDetailId) { userDetail, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "id: ${userDetail.id}")
Log.d(TAG, "code: ${userDetail.code}")
Log.d(TAG, "shop_cd: ${userDetail.attributes["shop_cd"]}")
Log.d(TAG, "star: ${userDetail.attributes["star"]}")
Log.d(TAG, "review_text: ${userDetail.attributes["review_text"]}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
RKZClient.getInstance().getUserDetail(objectId, userAccessToken, userDetailId, new OnGetUserDetailListener() {
@Override
public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "id: " + userDetail.getId());
Log.d(TAG, "code: " + userDetail.getCode());
Log.d(TAG, "shop_cd: " + userDetail.getAttributesValueString("shop_cd"));
Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
Log.d(TAG, "review_text: " + userDetail.getAttributesValueString("review_text"));
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
RKZClient.getUserDetail(objectId, userAccessToken, userDetailId, function (userDetail) {
// 成功時
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
.findById(userDetailId)
if (userDetail != null) {
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
}
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
.findById(userDetailId);
if (userDetail != null) {
print('id: ${userDetail.id}');
print('code: ${userDetail.code}');
print('shop_cd: ' + userDetail.attributes?['shop_cd']);
print('star: ' + userDetail.attributes?['star']);
print('review_text: ' + userDetail.attributes?['review_text']);
}
const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const userDetail = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
.findById(userDetailId)
if (userDetail != null) {
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
}
curl --location '<配布したベースURL>/api_zeus/user_detail/ex/get/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[id]="8bc...qg=="'
ヒント
アプリケーションで独自に追加した項目はattributes
というプロパティに設定されて返ってきます。
ヒント
このメソッドは公開範囲がPrivate
(非公開)のレコードのみ取得することができます。他の公開範囲のレコードを1件取得する場合は公開されているユーザー詳細を1件取得するを参照してください。
ユーザー詳細を更新する
ユーザー詳細へのデータ更新はeditUserDetail
メソッドで行います。
更新したいユーザー詳細のコードを条件に1件データを更新します。
let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.code = "0001" // 登録時に返却されたコード
userDetail.attributes = [
"star": 4 // 独自に追加した項目
]
let userAccessToken = "xxx"
RKZService.sharedInstance().editUserDetail(userDetail, userAccessToken: userAccessToken) { userDetail, responseStatus in
if responseStatus.isSuccess, let userDetail = userDetail {
// 成功時
print("id:", userDetail.id ?? "")
print("code:", userDetail.code ?? "")
print("star:", userDetail.attributes?["star"] ?? "")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.code = @"0001"; // 登録時に返却されたコード
userDetail.attributes = @{
@"star": @4 // 独自に追加した項目
};
NSString *userAccessToken = @"xxx";
[[RKZService sharedInstance] editUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"id: %@", userDetail.id);
NSLog(@"code: %@", userDetail.code);
NSLog(@"star: %@", userDetail.attributes[@"star"]);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.code = "0001" // 登録時に返却されたコード
userDetail.attributes = mapOf(
"star" to 4 // 独自に追加した項目
)
val userAccessToken = "xxx"
RKZClient.getInstance().editUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "id: ${newUserDetail.id}")
Log.d(TAG, "code: ${newUserDetail.code}")
Log.d(TAG, "star: ${newUserDetail.attributes["star"]}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setCode("0001"); // 登録時に返却されたコード
userDetail.setAttributesValue("star", 4); // 独自に追加した項目
String userAccessToken = "xxx";
RKZClient.getInstance().editUserDetail(userDetail, userAccessToken, new OnEditUserDetailListener() {
@Override
public void onEditUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "id: " + userDetail.getId());
Log.d(TAG, "code: " + userDetail.getCode());
Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var userAccessToken = 'xxx'
var userDetail = {
object_id: 'shop_review',
code: '0001', // 登録時に返却されたコード
attributes: {
star: 4 // 独自に追加した項目
}
}
RKZClient.editUserDetail(userDetail, userAccessToken, function (newUserDetail) {
// 成功時
console.debug('id:', newUserDetail.id)
console.debug('code:', newUserDetail.code)
console.debug('star:', newUserDetail.attributes.star)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const userAccessToken = 'xxx'
const userDetail = await RKZ.UserDetail.edit(userAccessToken, {
object_id: 'shop_review',
code: '0001', // 登録時に返却されたコード
attributes: {
star: 4 // 独自に追加した項目
}
})
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('star:', userDetail.attributes.star)
final userAccessToken = 'xxx';
final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.code = '0001'; // 登録時に返却されたコード
userDetail.attributes = {
'star': 4 // 独自に追加した項目
};
final newUserDetail = await RKZClient.instance.editUserDetail(userAccessToken, userDetail);
print('id: ${newUserDetail.id}');
print('code: ${newUserDetail.code}');
print('star: ' + newUserDetail.attributes?['star']);
const userDetail = await RKZ.UserDetail.edit({ user_no: 'APP00001' }, {
object_id: 'shop_review',
code: '0001', // 登録時に返却されたコード
attributes: {
star: 4 // 独自に追加した項目
}
})
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('star:', userDetail.attributes.star)
curl --location '<配布したベースURL>/api_zeus/user_detail/edit/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[code]="0001"' \
--form 'contents[free_columns][star]=4'
ユーザー詳細を削除する
ユーザー詳細の削除はdeleteUserDetail
メソッド(JavaScript・FlutterはUserDetailQuery.delete
メソッド)で⾏います。
削除するデータの検索条件を指定することができます。指定可能な条件については検索条件を参照してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
// 削除対象の検索条件
let searchConditions = [
// code=0001のデータ1件を削除
RKZSearchCondition(RKZSearchConditionEqual, searchColumn: "code", searchValueArray: ["0001"])
]
RKZService.sharedInstance().deleteUserDetail(objectId, userAccessToken: userAccessToken, searchConditionArray: searchConditions) { deleteCount, responseStatus in
if responseStatus.isSuccess {
// 成功時
print("deleteCount:", deleteCount)
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// 削除対象の検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
// code=0001のデータ1件を削除
[[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionEqual searchColumn:@"code" searchValueArray:@[@"0001"]]
];
[[RKZService sharedInstance] deleteUserDetail:objectId userAccessToken:userAccessToken searchConditionArray:searchConditions withBlock:^(NSNumber * _Nonnull deleteCount, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"deleteCount: %@", deleteCount);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// 削除対象の検索条件
val searchConditions = listOf(
// code=0001のデータ1件を削除
RKZSearchCondition(RKZSearchCondition.EQUAL, "code", listOf("0001"))
)
RKZClient.getInstance().deleteUserDetail(objectId, userAccessToken, searchConditions) { deleteCount, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "deleteCount: $deleteCount")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// 削除対象の検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
// code=0001のデータ1件を削除
new RKZSearchCondition(RKZSearchCondition.EQUAL, "code", Arrays.asList("0001"))
);
RKZClient.getInstance().deleteUserDetail(objectId, userAccessToken, searchConditions, new OnDeleteUserDetailListener() {
@Override
public void onDeleteUserDetail(Integer deleteCount, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "deleteCount: " + deleteCount);
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// 削除対象の検索条件
var searchConditions = [
// code=0001のデータ1件を削除
RKZSearchCondition.equal('code', '0001')
]
RKZClient.deleteUserDetail(objectId, userAccessToken, searchConditions, function (deleteCount) {
// 成功時
console.debug('deleteCount:', deleteCount)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const count = await RKZ.UserDetail.query(objectId, userAccessToken)
.equalTo('code', '0001') // code=0001のデータ1件を削除
.delete()
console.debug('count:', count)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..equalTo('code', '0001'); // code=0001のデータ1件を削除
final count = await query.delete();
print('count: $count');
const objectId = 'shop_review'
const count = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
.equalTo('code', '0001') // code=0001のデータ1件を削除
.delete()
console.debug('count:', count)
curl --location '<配布したベースURL>/api_zeus/user_detail/delete/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[search_condition][code]="0001"'
v3.1.0より、条件を指定しない場合はエラーになります。すべてのデータを削除するには、deleteAllUserDetail
メソッドを使用してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
RKZService.sharedInstance().deleteAllUserDetail(objectId, userAccessToken: userAccessToken) { deleteCount, responseStatus in
if responseStatus.isSuccess {
// 成功時
print("deleteCount:", deleteCount)
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
[[RKZService sharedInstance] deleteAllUserDetail:objectId userAccessToken:userAccessToken withBlock:^(NSNumber * _Nonnull deleteCount, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"deleteCount: %@", deleteCount);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
RKZClient.getInstance().deleteAllUserDetail(objectId, userAccessToken) { deleteCount, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "deleteCount: $deleteCount")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
RKZClient.getInstance().deleteAllUserDetail(objectId, userAccessToken, new OnDeleteUserDetailListener() {
@Override
public void onDeleteUserDetail(Integer deleteCount, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "deleteCount: " + deleteCount);
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
RKZClient.deleteAllUserDetail(objectId, userAccessToken, function (deleteCount) {
// 成功時
console.debug('deleteCount:', deleteCount)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const count = await RKZ.UserDetail.deleteAll(userAccessToken, objectId)
console.debug('count:', count)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.deleteAllUserDetail(userAccessToken, objectId)
final count = await query.delete();
print('count: $count');
const objectId = 'shop_review'
const count = await RKZ.UserDetail.deleteAll({ user_no: 'APP00001' }, objectId)
console.debug('count:', count)
curl --location '<配布したベースURL>/api_zeus/user_detail/delete/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[all_delete_flg]="1"'
注意
v3.1.0未満までは、条件を指定しない場合、すべてのデータが削除されます。
ユーザー詳細を検索する
ユーザー詳細の検索はgetUserDetailList
メソッド(JavaScript・FlutterはUserDetailQuery.find
メソッド)で⾏います。
検索条件、ソート条件を指定することができます。指定可能な条件については検索条件、ソート条件を参照してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
// 検索条件
let searchConditions = [
// starが3以上のレコードに絞り込む
RKZSearchCondition(RKZSearchConditionGreaterThanInclude, searchColumn: "star", searchValueArray: ["3"])
]
// ソート条件
let sortConditions = [
// starの降順にソート
RKZSortCondition(RKZSortTypeDesc, sortColumn: "star")
]
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: searchConditions, sortConditionArray: sortConditions) { userDetails, responseStatus in
if responseStatus.isSuccess {
// 成功時
userDetails.forEach { item in
print("id:", item.id ?? "")
print("code:", item.code ?? "")
print("shop_cd:", item.attributes?["shop_cd"] ?? "")
print("star:", item.attributes?["star"] ?? "")
print("review_text:", item.attributes?["review_text"] ?? "")
}
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
// starが3以上のレコードに絞り込む
[[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionGreaterThanInclude searchColumn:@"star" searchValueArray:@[@"3"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
// starの降順にソート
[[RKZSortCondition alloc] initWithSortType:RKZSortTypeDesc sortColumn:@"star"]
];
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
for (RKZUserDetailData *item in userDetails) {
NSLog(@"id: %@", item.id);
NSLog(@"code: %@", item.code);
NSLog(@"shop_cd: %@", item.attributes[@"shop_cd"]);
NSLog(@"star: %@", item.attributes[@"star"]);
NSLog(@"review_text: %@", item.attributes[@"review_text"]);
}
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// 検索条件
val searchConditions = listOf(
// starが3以上のレコードに絞り込む
RKZSearchCondition(RKZSearchCondition.GREATER_THAN_INCLUDE, "star", listOf("3"))
)
// ソート条件
val sortConditions = listOf(
// starの降順にソート
RKZSortCondition(RKZSortCondition.DESC, "star")
)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions) { userDetails, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
userDetails.forEach {
Log.d(TAG, "id: ${it.id}")
Log.d(TAG, "code: ${it.code}")
Log.d(TAG, "shop_cd: ${it.attributes["shop_cd"]}")
Log.d(TAG, "star: ${it.attributes["star"]}")
Log.d(TAG, "review_text: ${it.attributes["review_text"]}")
}
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
// starが3以上のレコードに絞り込む
new RKZSearchCondition(RKZSearchCondition.GREATER_THAN_INCLUDE, "star", Arrays.asList("3"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
// starの降順にソート
new RKZSortCondition(RKZSortCondition.DESC, "star")
);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
for (UserDetail item : userDetails) {
Log.d(TAG, "id: " + item.getId());
Log.d(TAG, "code: " + item.getCode());
Log.d(TAG, "shop_cd: " + item.getAttributesValueString("shop_cd"));
Log.d(TAG, "star: " + item.getAttributesValueString("star"));
Log.d(TAG, "review_text: " + item.getAttributesValueString("review_text"));
}
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// 検索条件
var searchConditions = [
// starが3以上のレコードに絞り込む
RKZSearchCondition.greaterThanInclude('star', '3')
]
// ソート条件
var sortConditions = [
// starの降順にソート
RKZSortCondition.desc('star')
]
RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions, function (userDetails) {
// 成功時
userDetails.forEach(function (item) {
console.debug('id:', item.id)
console.debug('code:', item.code)
console.debug('shop_cd:', item.attributes.shop_cd)
console.debug('star:', item.attributes.star)
console.debug('review_text:', item.attributes.review_text)
})
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.greaterThanOrEqualTo('star', 3) // starが3以上のレコードに絞り込む
.desc('star') // starの降順にソート
.find()
result.data.forEach(item => {
console.debug('id:', item.id)
console.debug('code:', item.code)
console.debug('shop_cd:', item.attributes.shop_cd)
console.debug('star:', item.attributes.star)
console.debug('review_text:', item.attributes.review_text)
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..greaterThanOrEqualTo('star', '3') // starが3以上のレコードに絞り込む
..desc('star'); // starの降順にソート
final result = await query.find();
result.data.forEach((item) {
print('id: ${item.id}');
print('code: ${item.code}');
print('shop_cd: ' + item.attributes?['shop_cd']);
print('star: ' + item.attributes?['star']);
print('review_text: ' + item.attributes?['review_text']);
});
const objectId = 'shop_review'
const result = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
.greaterThanOrEqualTo('star', 3) // starが3以上のレコードに絞り込む
.desc('star') // starの降順にソート
.find()
result.data.forEach(item => {
console.debug('id:', item.id)
console.debug('code:', item.code)
console.debug('shop_cd:', item.attributes.shop_cd)
console.debug('star:', item.attributes.star)
console.debug('review_text:', item.attributes.review_text)
})
curl --location '<配布したベースURL>/api_zeus/user_detail/ex/get/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[search_condition][star]="3∀greater_than_include"' \
--form 'contents[order_condition][star][sort_no]=1' \
--form 'contents[order_condition][star][sort_type]="0002"'
ヒント
このメソッドは公開範囲がPrivate
(非公開)のレコードのみ検索することができます。他の公開範囲のレコードを検索する場合は公開されているユーザー詳細を検索するを参照してください。
公開されているユーザー詳細を1件取得する
公開範囲がPrivate
(非公開)以外のレコードを1件取得するには、getSharedUserDetail
メソッド(JavaScript・FlutterはUserDetailQuery.sharedById
メソッド)を使用します。
let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPublicToUsers] // 参照したいデータの公開範囲
RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
if responseStatus.isSuccess, let userDetail = userDetail {
// 成功時
print("id:", userDetail.id ?? "")
print("code:", userDetail.code ?? "")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublicToUsers]; // 参照したいデータの公開範囲
[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"id: %@", userDetail.id);
NSLog(@"code: %@", userDetail.code);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.PublicToUsers) // 参照したいデータの公開範囲
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "id: ${userDetail.id}")
Log.d(TAG, "code: ${userDetail.code}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.PublicToUsers); // 参照したいデータの公開範囲
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
@Override
public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "id: " + userDetail.getId());
Log.d(TAG, "code: " + userDetail.getCode());
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0002'] // 参照したいデータの公開範囲(PublicToUsers)
RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
// 成功時
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.PublicToUsers] // 参照したいデータの公開範囲
const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
.sharedById(userDetailId, visibility)
console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.publicToUsers]; // 参照したいデータの公開範囲
final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
.sharedById(userDetailId, visibility: visibility);
if (userDetail != null) {
print('id: ${userDetail.id}');
print('code: ${userDetail.code}');
}
条件に指定した公開範囲と一致するデータのみ取得される点に気をつけてください。先述のサンプルコードではPublicToUsers
のみ条件に指定しているため、取得対象の公開範囲がPrivate
の場合は取得されません。
取得対象がPrivate
でも取得したい場合は、条件の公開範囲を追加してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPrivate, RKZUserDetailVisibilityPublicToUsers] // 公開範囲がPrivateまたはPublicToUsersの場合取得される
RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPrivate, RKZUserDetailVisibilityPublicToUsers]; // 公開範囲がPrivateまたはPublicToUsersの場合取得される
[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.Private, UserDetail.VisibilityType.PublicToUsers) // 公開範囲がPrivateまたはPublicToUsersの場合取得される
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.Private, UserDetail.VisibilityType.PublicToUsers); // 公開範囲がPrivateまたはPublicToUsersの場合取得される
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
@Override
public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0001', '0002'] // 公開範囲がPrivateまたはPublicToUsersの場合取得される
RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.Private, RKZ.VisibilityType.PublicToUsers] // 公開範囲がPrivateまたはPublicToUsersの場合取得される
const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
.sharedById(userDetailId, visibility)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.private, VisibilityType.publicToUsers]; // 公開範囲がPrivateまたはPublicToUsersの場合取得される
final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
.sharedById(userDetailId, visibility: visibility);
取得対象がPublic
の場合、ユーザーアクセストークンは不要です。
let objectId = "shop_review"
let userAccessToken: String? = nil // ユーザーアクセストークンは不要
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPublic] // 公開範囲がPublicの場合取得される
RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = nil; // ユーザーアクセストークンは不要
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublic]; // 公開範囲がPublicの場合取得される
[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken: String? = null // ユーザーアクセストークンは不要
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.Public) // 公開範囲がPublicの場合取得される
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = null; // ユーザーアクセストークンは不要
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.Public); // 公開範囲がPublicの場合取得される
RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
@Override
public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = null
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0003'] // 公開範囲がPublicの場合取得される
RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.Public] // 公開範囲がPublicの場合取得される
const userDetail = await RKZ.UserDetail.query(objectId) // ユーザーアクセストークンは不要
.sharedById(userDetailId, visibility)
final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.public]; // 公開範囲がPublicの場合取得される
final userDetail = await RKZClient.instance.userDetailQuery(objectId) // ユーザーアクセストークンは不要
.sharedById(userDetailId, visibility: visibility);
公開されているユーザー詳細を検索する
公開範囲がPrivate
(非公開)以外のレコードを検索するには、getSharedUserDetailList
メソッド(JavaScript・FlutterはUserDetailQuery.shared
メソッド)を使用します。
let objectId = "shop_review"
let userAccessToken = "xxx"
let visibility = [RKZUserDetailVisibilityPublicToUsers] // 参照したいデータの公開範囲
RKZService.sharedInstance().getSharedUserDetailList(objectId, userAccessToken: userAccessToken, visibility: visibility, searchConditionArray: nil, sortConditionArray: nil) { userDetails, responseStatus in
if responseStatus.isSuccess {
// 成功時
userDetails.forEach { item in
print("id:", item.id ?? "")
print("code:", item.code ?? "")
}
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublicToUsers]; // 参照したいデータの公開範囲
[[RKZService sharedInstance] getSharedUserDetailList:objectId userAccessToken:userAccessToken visibility:visibility searchConditionArray:nil sortConditionArray:nil withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
for (RKZUserDetailData *item in userDetails) {
NSLog(@"id: %@", item.id);
NSLog(@"code: %@", item.code);
}
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val visibility = listOf(UserDetail.VisibilityType.PublicToUsers) // 参照したいデータの公開範囲
RKZClient.getInstance().getSharedUserDetailList(objectId, userAccessToken, visibility, null, null) { userDetails, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
userDetails.forEach {
Log.d(TAG, "id: ${it.id}")
Log.d(TAG, "code: ${it.code}")
}
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.PublicToUsers); // 参照したいデータの公開範囲
RKZClient.getInstance().getSharedUserDetailList(objectId, userAccessToken, visibility, null, null, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
for (UserDetail item : userDetails) {
Log.d(TAG, "id: " + item.getId());
Log.d(TAG, "code: " + item.getCode());
}
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var visibility = ['0002'] // 参照したいデータの公開範囲(PublicToUsers)
RKZClient.getSharedUserDetailList(objectId, userAccessToken, visibility, null, null, function (userDetails) {
// 成功時
userDetails.forEach(function (item) {
console.debug('id:', item.id)
console.debug('code:', item.code)
})
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const visibility = [RKZ.VisibilityType.PublicToUsers] // 参照したいデータの公開範囲
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.shared(visibility)
result.data.forEach(item => {
console.debug('id:', item.id)
console.debug('code:', item.code)
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final visibility = [VisibilityType.publicToUsers]; // 参照したいデータの公開範囲
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken);
final result = await query.shared(visibility: visibility);
result.data.forEach((item) {
print('id: ${item.id}');
print('code: ${item.code}');
});
ページング機能を利⽤してユーザー詳細を検索する
ユーザー詳細からレコードを取得するときに、ページング機能を利⽤すると「取得するレコードの開始位置」、「取得するレコードの件数」といったレコードを分割して取得するための条件を指定することができます。
取得結果には条件に該当したレコードのほかに、指定された条件に該当したデータの総件数も取得することができます。
ページングを利⽤してレコードを取得する場合は、getPaginateUserDetailList
、getPaginateSharedUserDetailList
メソッド(JavaScript・FlutterはUserDetailQuery.find
、UserDetailQuery.shared
メソッド)を使用します。目的に応じて、ページング用のメソッドを使用してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
let limit: NSNumber = 10 // 取得するデータの件数を指定します
let offset: NSNumber = 0 // データの取得位置を指定します
RKZService.sharedInstance().getPaginateUserDetailList(objectId, userAccessToken: userAccessToken, limit: limit, offset: offset, searchConditionArray: nil, sortConditionArray: nil) { pagingData, responseStatus in
if responseStatus.isSuccess {
// 成功時
print("result_cnt:", pagingData.result_cnt)
print("data:", pagingData.datas)
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSNumber *limit = @10; // 取得するデータの件数を指定します
NSNumber *offset = @0; // データの取得位置を指定します
[[RKZService sharedInstance] getPaginateUserDetailList:objectId userAccessToken:userAccessToken limit:limit offset:offset searchConditionArray:nil sortConditionArray:nil withBlock:^(RKZPagingData<RKZUserDetailData *> * _Nonnull pagingData, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"result_cnt: %@", pagingData.result_cnt);
NSLog(@"data: %@", pagingData.datas);
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val limit = 10 // 取得するデータの件数を指定します
val offset = 0 // データの取得位置を指定します
RKZClient.getInstance().getPaginateUserDetailList(objectId, userAccessToken, limit, offset, null, null) { pagingData, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "resultCnt: ${pagingData.resultCnt}")
Log.d(TAG, "data: ${pagingData.datas}")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
Integer limit = 10; // 取得するデータの件数を指定します
Integer offset = 0; // データの取得位置を指定します
RKZClient.getInstance().getPaginateUserDetailList(objectId, userAccessToken, limit, offset, null, null, new OnGetPagingDataListener<UserDetail>() {
@Override
public void onGetPagingData(PagingData<UserDetail> pagingData, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "resultCnt: " + pagingData.getResultCnt());
Log.d(TAG, "data: " + pagingData.getDatas());
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var limit = 10 // 取得するデータの件数を指定します
var offset = 0 // データの取得位置を指定します
RKZClient.getPaginateUserDetailList(objectId, userAccessToken, limit, offset, null, null, function (pagingData) {
// 成功時
console.debug('result_cnt:', pagingData.result_cnt)
console.debug('data:', pagingData.datas)
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.offset(0) // データの取得位置を指定します
.limit(10) // 取得するデータの件数を指定します
.find() // 検索を実行
console.debug('result_cnt:', result.result_cnt)
console.debug('data:', result.data)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..offset = 0 // データの取得位置を指定します
..limit = 10; // 取得するデータの件数を指定します
final result = await query.find(); // 検索を実行
print('resultCnt: ${result.resultCnt}');
print('data: ${result.data}');
ユーザー詳細をお気に入りに追加する
「お気に入り」とはユーザーごとに特定のユーザー詳細をマーク付けする機能です。
この機能を使用することで、ユーザーが保存したユーザー詳細をマイページに表示したり、ユーザー詳細ごとにお気に入り追加したユーザー数を表示することができます。
お気に入りに追加するにはaddUserDetailToFavorite
メソッドを使用します。
let userAccessToken = "xxx"
let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りに追加するユーザー詳細ID
RKZService.sharedInstance().addUserDetailToFavorite(userDetail, userAccessToken: userAccessToken) { statusCode, responseStatus in
if responseStatus.isSuccess {
// 成功時
print("追加完了")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *userAccessToken = @"xxx";
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.id = @"8bc...qg=="; // お気に入りに追加するユーザー詳細ID
[[RKZService sharedInstance] addUserDetailToFavorite:userDetail userAccessToken:userAccessToken withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"追加完了");
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val userAccessToken = "xxx"
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りに追加するユーザー詳細ID
RKZClient.getInstance().addUserDetailToFavorite(userDetail, userAccessToken) { rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "追加完了")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String userAccessToken = "xxx";
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setId("8bc...qg=="); // お気に入りに追加するユーザー詳細ID
RKZClient.getInstance().addUserDetailToFavorite(userDetail, userAccessToken, new OnAddFavoriteListener() {
@Override
public void onAddFavorite(RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "追加完了");
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var userAccessToken = 'xxx'
var userDetail = {
object_id: 'shop_review',
id: '8bc...qg==' // お気に入りに追加するユーザー詳細ID
}
RKZClient.addUserDetailToFavorite(userDetail, userAccessToken, function (statusCode) {
// 成功時
console.debug('追加完了')
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const userAccessToken = 'xxx'
const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // お気に入りに追加するユーザー詳細ID
await RKZ.UserDetail.addToFavorite(userAccessToken, objectId, userDetailId)
final userAccessToken = 'xxx';
final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // お気に入りに追加するユーザー詳細ID
await RKZClient.instance.addUserDetailToFavorite(userAccessToken, objectId, userDetailId);
ユーザー詳細をお気に入りから削除する
お気に入りから削除するにはdeleteUserDetailFromFavorite
メソッドを使用します。
let userAccessToken = "xxx"
let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りから削除するユーザー詳細ID
RKZService.sharedInstance().deleteUserDetailFromFavorite(userDetail, userAccessToken: userAccessToken) { statusCode, responseStatus in
if responseStatus.isSuccess {
// 成功時
print("削除完了")
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *userAccessToken = @"xxx";
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.id = @"8bc...qg=="; // お気に入りから削除するユーザー詳細ID
[[RKZService sharedInstance] deleteUserDetailFromFavorite:userDetail userAccessToken:userAccessToken withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
NSLog(@"削除完了");
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val userAccessToken = "xxx"
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りから削除するユーザー詳細ID
RKZClient.getInstance().deleteUserDetailFromFavorite(userDetail, userAccessToken) { rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
Log.d(TAG, "削除完了")
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String userAccessToken = "xxx";
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setId("8bc...qg=="); // お気に入りから削除するユーザー詳細ID
RKZClient.getInstance().deleteUserDetailFromFavorite(userDetail, userAccessToken, new OnDeleteFavoriteListener() {
@Override
public void onDeleteFavorite(RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
Log.d(TAG, "削除完了");
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var userAccessToken = 'xxx'
var userDetail = {
object_id: 'shop_review',
id: '8bc...qg==' // お気に入りから削除するユーザー詳細ID
}
RKZClient.deleteUserDetailFromFavorite(userDetail, userAccessToken, function (statusCode) {
// 成功時
console.debug('削除完了')
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const userAccessToken = 'xxx'
const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // お気に入りから削除するユーザー詳細ID
await RKZ.UserDetail.deleteFromFavorite(userAccessToken, objectId, userDetailId)
final userAccessToken = 'xxx';
final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // お気に入りから削除するユーザー詳細ID
await RKZClient.instance.deleteUserDetailFromFavorite(userAccessToken, objectId, userDetailId);
お気に⼊り追加したユーザー詳細を検索する
ユーザー詳細を検索する際にお気に⼊り情報を一緒に取得するには、show_favorite
をtrue
にします。(JavaScript・FlutterはUserDetailQuery.withFavorite
メソッドを呼び出してください)
返却された各レコードのsys_favorite.is_favorite
(ユーザーがお気に入り追加しているか?)とsys_favorite.favorite_date
(最後にお気に入り追加した日時)を参照してください。
let objectId = "shop_review"
let userAccessToken = "xxx"
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: nil, sortConditionArray: nil, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
if responseStatus.isSuccess {
// 成功時
userDetails.forEach { item in
print("id:", item.id ?? "")
print("code:", item.code ?? "")
print("is_favorite:", item.sys_favorite?.is_favorite ?? false) // ユーザーがお気に入り追加している場合true
print("favorite_date:", item.sys_favorite?.favorite_date ?? "") // 最後にお気に入り追加した日時
}
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:nil sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
for (RKZUserDetailData *item in userDetails) {
NSLog(@"id: %@", item.id);
NSLog(@"code: %@", item.code);
NSLog(@"is_favorite: %d", item.sys_favorite.is_favorite); // ユーザーがお気に入り追加している場合true
NSLog(@"favorite_date: %@", item.sys_favorite.favorite_date); // 最後にお気に入り追加した日時
}
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute) { userDetails, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
userDetails.forEach {
Log.d(TAG, "id: ${it.id}")
Log.d(TAG, "code: ${it.code}")
Log.d(TAG, "isFavorite: ${it.sysFavorite.isFavorite}") // ユーザーがお気に入り追加している場合true
Log.d(TAG, "favoriteDate: ${it.sysFavorite.favoriteDate}") // 最後にお気に入り追加した日時
}
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
for (UserDetail item : userDetails) {
Log.d(TAG, "id: " + item.getId());
Log.d(TAG, "code: " + item.getCode());
Log.d(TAG, "isFavorite: " + item.getSysFavorite().getIsFavorite()); // ユーザーがお気に入り追加している場合true
Log.d(TAG, "favoriteDate: " + item.getSysFavorite().getFavoriteDate()); // 最後にお気に入り追加した日時
}
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var extensionAttribute = {
show_favorite: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, function (userDetails) {
// 成功時
userDetails.forEach(function (item) {
console.debug('code:', item.code)
console.debug('name:', item.name)
console.debug('is_favorite:', item.sys_favorite.is_favorite) // ユーザーがお気に入り追加している場合true
console.debug('favorite_date:', item.sys_favorite.favorite_date) // 最後にお気に入り追加した日時
})
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite()
.find()
result.data.forEach(item => {
console.debug('code:', item.code)
console.debug('name:', item.name)
console.debug('is_favorite:', item.sys_favorite.is_favorite) // ユーザーがお気に入り追加している場合true
console.debug('favorite_date:', item.sys_favorite.favorite_date) // 最後にお気に入り追加した日時
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite();
final result = await query.find();
result.data.forEach((item) {
print('id: ${item.id}');
print('code: ${item.code}');
print('isFavorite: ${item.sysFavorite?.isFavorite}'); // ユーザーがお気に入り追加している場合true
print('favoriteDate: ${item.sysFavorite?.favoriteDate}'); // 最後にお気に入り追加した日時
});
show_favorite_summary
をtrue
にすることで、お気に入りに追加されている件数を取得することができます。(JavaScript・FlutterはUserDetailQuery.withFavoriteSummary
メソッドを呼び出してください)
let objectId = "shop_review"
let userAccessToken = "xxx"
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
extensionAttribute.show_favorite_summary = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: nil, sortConditionArray: nil, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
if responseStatus.isSuccess {
// 成功時
userDetails.forEach { item in
print("id:", item.id ?? "")
print("code:", item.code ?? "")
print("favorite_count:", item.sys_favorite_sum?.favorite_count ?? "") // お気に入りに追加されている件数
}
} else {
// 失敗
print("statusCode:", responseStatus.statusCode.rawValue)
print("message:", responseStatus.message ?? "")
}
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
extensionAttribute.show_favorite_summary = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:nil sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
if (responseStatus.isSuccess) {
// 成功時
for (RKZUserDetailData *item in userDetails) {
NSLog(@"id: %@", item.id);
NSLog(@"code: %@", item.code);
NSLog(@"favorite_count: %@", item.sys_favorite_sum.favorite_count); // お気に入りに追加されている件数
}
} else {
// 失敗
NSLog(@"statusCode: %ld", responseStatus.statusCode);
NSLog(@"message: %@", responseStatus.message);
}
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
extensionAttribute.setShowFavoriteSummary(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute) { userDetails, rkzResponseStatus ->
if (rkzResponseStatus.isSuccess) {
// 成功時
userDetails.forEach {
Log.d(TAG, "id: ${it.id}")
Log.d(TAG, "code: ${it.code}")
Log.d(TAG, "favoriteCount: ${it.sysFavoriteSum.favoriteCount}") // お気に入りに追加されている件数
}
} else {
// 失敗
Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
Log.e(TAG, "message: ${rkzResponseStatus.message}")
}
}
String objectId = "shop_review";
String userAccessToken = "xxx";
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
extensionAttribute.setShowFavoriteSummary(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
if (rkzResponseStatus.isSuccess()) {
// 成功時
for (UserDetail item : userDetails) {
Log.d(TAG, "id: " + item.getId());
Log.d(TAG, "code: " + item.getCode());
Log.d(TAG, "favoriteCount: " + item.getSysFavoriteSum().getFavoriteCount()); // お気に入りに追加されている件数
}
} else {
// 失敗
Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
}
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var extensionAttribute = {
show_favorite: true,
show_favorite_summary: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, function (userDetails) {
// 成功時
userDetails.forEach(function (item) {
console.debug('code:', item.code)
console.debug('name:', item.name)
console.debug('favorite_count:', item.sys_favorite_sum.favorite_count) // お気に入りに追加されている件数
})
}, function (error) {
// 失敗時
console.error('status_code:', error.status_code)
console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite()
.withFavoriteSummary()
.find()
result.data.forEach(item => {
console.debug('code:', item.code)
console.debug('name:', item.name)
console.debug('favorite_count:', item.sys_favorite_sum.favorite_count) // お気に入りに追加されている件数
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite()
..withFavoriteSummary();
final result = await query.find();
result.data.forEach((item) {
print('id: ${item.id}');
print('code: ${item.code}');
print('favoriteCount: ${item.sysFavoriteSum?.favoriteCount}'); // お気に入りに追加されている件数
});
ユーザーがお気に入り登録しているユーザー詳細に検索結果を絞り込むことができます。
let objectId = "shop_review"
let userAccessToken = "xxx"
// 検索条件
let searchConditions = [
RKZSearchCondition(favoriteType: MyFavoriteOnlyForFavorite)
]
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: searchConditions, sortConditionArray: nil, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
[[RKZSearchCondition alloc] initWithFavoriteType:MyFavoriteOnlyForFavorite]
];
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:searchConditions sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// 検索条件
val searchConditions = listOf(
RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.MyFavoriteOnly)
)
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute) { userDetails, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.MyFavoriteOnly)
);
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// 検索条件
var searchConditions = [
RKZSearchCondition.withFavorite.myFavoriteOnly()
]
var extensionAttribute = {
show_favorite: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, function (userDetails) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite(true)
.find()
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite(byMe: true);
final result = await query.find();
逆に、ユーザーがお気に入り登録していないユーザー詳細に検索結果を絞り込むこともできます。
let objectId = "shop_review"
let userAccessToken = "xxx"
// 検索条件
let searchConditions = [
RKZSearchCondition(favoriteType: NotMyFavoriteForFavorite)
]
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: searchConditions, sortConditionArray: nil, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
[[RKZSearchCondition alloc] initWithFavoriteType:NotMyFavoriteForFavorite]
];
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:searchConditions sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// 検索条件
val searchConditions = listOf(
RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.NotMyFavorite)
)
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute) { userDetails, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.NotMyFavorite)
);
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// 検索条件
var searchConditions = [
RKZSearchCondition.withFavorite.notMyFavorite()
]
var extensionAttribute = {
show_favorite: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, function (userDetails) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite(false)
.find()
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite(byMe: false);
final result = await query.find();
お気に入りに追加されている件数でソートすることができます。
let objectId = "shop_review"
let userAccessToken = "xxx"
// ソート条件
let sortConditions = [
RKZSortCondition(favoriteCountSortType: RKZSortTypeDesc)
]
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: nil, sortConditionArray: sortConditions, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
[[RKZSortCondition alloc] initWithFavoriteCountSortType:RKZSortTypeDesc]
];
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:nil sortConditionArray:sortConditions extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// ソート条件
val sortConditions = listOf(
RKZSortCondition.initWithSortTypeForFavoriteCount(RKZSortCondition.DESC)
)
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute) { userDetails, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
RKZSortCondition.initWithSortTypeForFavoriteCount(RKZSortCondition.DESC)
);
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// ソート条件
var sortConditions = [
RKZSortCondition.withFavorite.favoriteCount.desc()
]
var extensionAttribute = {
show_favorite: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, function (userDetails) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite()
.orderByFavoriteCount(RKZ.Direction.Desc)
.find()
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite()
..orderByFavoriteCount(direction: Direction.desc);
final result = await query.find();
また、最後にお気に入り追加した日時でソートすることもできます。
let objectId = "shop_review"
let userAccessToken = "xxx"
// ソート条件
let sortConditions = [
RKZSortCondition(favoriteUpdateDateSortType: RKZSortTypeDesc)
]
let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: nil, sortConditionArray: sortConditions, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
// ...
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
[[RKZSortCondition alloc] initWithFavoriteUpdateDateSortType:RKZSortTypeDesc]
];
RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:nil sortConditionArray:sortConditions extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
// ...
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
// ソート条件
val sortConditions = listOf(
RKZSortCondition.initWithSortTypeForFavoriteUpdateDate(RKZSortCondition.DESC)
)
val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute) { userDetails, rkzResponseStatus ->
// ...
}
String objectId = "shop_review";
String userAccessToken = "xxx";
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
RKZSortCondition.initWithSortTypeForFavoriteUpdateDate(RKZSortCondition.DESC)
);
UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, new OnGetUserDetailListListener() {
@Override
public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
// ...
}
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
// ソート条件
var sortConditions = [
RKZSortCondition.withFavorite.updateDate.desc()
]
var extensionAttribute = {
show_favorite: true
}
RKZClient.getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, function (userDetails) {
// ...
}, function (error) {
// ...
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const result = await RKZ.UserDetail.query(objectId, userAccessToken)
.withFavorite()
.orderByFavoriteUpdatedAt(RKZ.Direction.Desc)
.find()
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
..withFavorite()
..orderByFavoriteUpdatedAt(direction: Direction.desc);
final result = await query.find();