やりたいこと
AzureCosmosDBでUDFを使ってjson arrayのPagenationとSortの記事でAzure Functions、CosmosDBを使ってsearchAPIの作り方が紹介されています。
こちらの記事を参考にページネーションを?page=4&limit=50のようにしたいと思います。
本記事ではUDF(ユーザ定義関数)以外は省略しますので詳細を理解するには最初に上記記事を読んでください。
UDFの修正点
-
引数start, endをpageとlimitに変更。
page
はページ番号(デフォルト1)、limit
は1ページに表示する件数(デフォルト100)です。
もしpageやlimitが整数以外、最小値より小さい値だった場合はデフォルト値に置き換えることにします。 -
引数
order
の値はDESCからTime(昇順)、-Time(降順)に変更。
完成したUDF
function sort(contents, page, limit, order) {
/*
ページング
*/
page = Number(page);
limit = Number(limit);
var MIN_PAGE_NUM = 1;
var MIN_LIMIT_NUM = 1;
if (!isValidData(page, MIN_PAGE_NUM)) {
page = 1;
}
if (!isValidData(limit, MIN_LIMIT_NUM)) {
limit = 100;
}
start = limit * (page - 1);
end = page * limit;
function isValidData(data, min) {
if (isInteger(data)) {
if (data < min) {
return false;
} else {
return true;
}
} else {
return false;
}
}
function isInteger(x) {
return Math.round(x) === x;
}
/*
ソート
*/
function compareTime(a, b) {
if (order == '-Time') {
return b.Time - a.Time;
}
else{
return a.Time - b.Time;
}
}
return contents.sort(compareTime).slice(start, end);
}