Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Search user mapping fix. #429

Merged
merged 1 commit into from
Sep 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/common/db-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,13 @@ async function scanAll(model, size, lastKey) {
/**
* Get data collection by scan with search
* @param {Object} model The dynamoose model to scan
* @param {String} size The size of result
* @param {String} lastKey The lastKey param
* @param {String} containsKey The contains key param
* @param {String} contains The contains value
* @returns {Promise<void>}
*/
async function scanAllWithSearch(model, size, lastKey, containsKey, contains) {
async function scanAllWithSearch(model, containsKey, contains) {
return await new Promise((resolve, reject) => {
const scanMethod = model.scan(containsKey).contains(contains).limit(size);
if (lastKey) scanMethod.startAt(lastKey);
const scanMethod = model.scan(containsKey).contains(contains).all();
scanMethod.exec((err, result) => {
if (err) {
logger.error(`DynamoDB scan error ${err}`);
Expand Down
32 changes: 28 additions & 4 deletions src/front/src/app/user-mappings/user-mappings-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ angular.module('topcoderX')
totalPages: 1,
initialized: false,
query: '',
lastKey: []
lastKey: [],
pages: 1
};

$scope.addUserMapping = function () {
Expand All @@ -40,7 +41,14 @@ angular.module('topcoderX')
config.isLoading = true;
UserMappingsService.search(config.query, config.sortBy, config.sortDir, config.pageNumber, config.pageSize, config.lastKey[config.pageNumber]) // eslint-disable-line max-len
.then(function (res) {
config.items = res.data.docs;
if (config.query) {
config.allItems = res.data.docs;
config.items = config.allItems.slice(0, config.pageSize);
config.pages = Math.ceil(config.allItems.length / config.pageSize);
}
else {
config.items = res.data.docs;
}
if (res.data.lastKey && (res.data.lastKey.githubLastKey || res.data.lastKey.gitlabLastKey)) {
config.lastKey[config.pageNumber + 1] = res.data.lastKey;
if (!config.pages || config.pages <= config.pageNumber) {
Expand Down Expand Up @@ -122,21 +130,37 @@ angular.module('topcoderX')
if (pageNumber === 0 || pageNumber > $scope.tableConfig.pages ||
(pageNumber === $scope.tableConfig.pages &&
$scope.tableConfig.pageNumber === pageNumber)) {
return false;
return false;
}
$scope.tableConfig.pageNumber = pageNumber;
$scope.getUserMappings();
if ($scope.tableConfig.query && $scope.tableConfig.allItems) {
var start = ($scope.tableConfig.pageNumber - 1) * $scope.tableConfig.pageSize - 1;
if (pageNumber === 1) {
start = 0;
}
$scope.tableConfig.items = $scope.tableConfig.allItems.slice(
start, $scope.tableConfig.pageSize);
$scope.tableConfig.initialized = true;
$scope.tableConfig.isLoading = false;
}
else {
$scope.getUserMappings();
}
};

$scope.onSearchIconClicked = function () {
$scope.tableConfig.pageNumber = 1;
$scope.tableConfig.pages = 1;
$scope.tableConfig.allItems = [];
$scope.getUserMappings();
};

$scope.onSearchReset = function () {
var config = $scope.tableConfig;
config.query = '';
$scope.tableConfig.pageNumber = 1;
$scope.tableConfig.pages = 1;
$scope.tableConfig.allItems = [];
$scope.getUserMappings();
};

Expand Down
8 changes: 2 additions & 6 deletions src/services/UserService.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,12 @@ async function search(criteria) {
if (criteria.query) {
githubUserMappings = await dbHelper.scanAllWithSearch(
GithubUserMapping,
criteria.perPage / 2, // eslint-disable-line
criteria.githubLastKey ? JSON.parse(criteria.githubLastKey) : undefined, // eslint-disable-line
'topcoderUsername',
criteria.query.toLowerCase());
criteria.query);
gitlabUserMappings = await dbHelper.scanAllWithSearch(
GitlabUserMapping,
criteria.perPage / 2, // eslint-disable-line
criteria.gitlabLastKey ? JSON.parse(criteria.gitlabLastKey) : undefined, // eslint-disable-line
'topcoderUsername',
criteria.query.toLowerCase());
criteria.query);
}
else {
githubUserMappings = await dbHelper.scanAll(
Expand Down