Skip to content

Commit

Permalink
update getAllRoles api to return non paginated results as well
Browse files Browse the repository at this point in the history
  • Loading branch information
Chakravarthy7102 committed Nov 9, 2023
1 parent dd9ee0c commit 53aa598
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 105 deletions.
107 changes: 60 additions & 47 deletions lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,57 +16,70 @@ const getAllRoles = async (_, __, options, ____) => {
status: "FEATURE_NOT_ENABLED_ERROR",
};
}
const limit = Number(options.req.getKeyValueFromQuery("limit"));
let page = Number(options.req.getKeyValueFromQuery("page"));
if (limit === undefined || isNaN(limit) === false) {
throw new error_1.default({
message: "Missing required parameter 'limit'",
type: error_1.default.BAD_INPUT_ERROR,
});
}
if (page === undefined || isNaN(page) === false) {
throw new error_1.default({
message: "Missing required parameter 'page'",
type: error_1.default.BAD_INPUT_ERROR,
});
}
//set default page number to 1 if the page number is negitive or zero
if (page <= 0) {
page = 1;
}
const skip = limit * (page - 1);
const response = await userroles_1.default.getAllRoles();
const totalPages = Math.ceil(response.roles.length / limit);
if (page > totalPages) {
//results with pagination and permissions assoicated with a role.
if (
options.req.getKeyValueFromQuery("limit") !== undefined &&
options.req.getKeyValueFromQuery("page") !== undefined
) {
const limit = Number(options.req.getKeyValueFromQuery("limit"));
let page = Number(options.req.getKeyValueFromQuery("page"));
if (isNaN(limit) === true) {
throw new error_1.default({
message: "Missing required parameter 'limit' or invalid type",
type: error_1.default.BAD_INPUT_ERROR,
});
}
if (isNaN(page) === true) {
throw new error_1.default({
message: "Missing required parameter 'page' or invalid type",
type: error_1.default.BAD_INPUT_ERROR,
});
}
//set default page number to 1 if the page number is negitive or zero
if (page <= 0) {
page = 1;
}
const skip = limit * (page - 1);
const response = await userroles_1.default.getAllRoles();
const totalPages = Math.ceil(response.roles.length / limit);
const rolesCount = response.roles.length;
if (page > totalPages) {
return {
roles: [],
rolesCount,
totalPages,
status: "OK",
};
}
const paginatedRoles = response.roles.slice(skip, skip + limit);
let roles = [];
for (let i = 0; i < paginatedRoles.length; i++) {
const role = paginatedRoles[i];
try {
const res = await userroles_1.default.getPermissionsForRole(role);
if (res.status === "OK") {
roles.push({
role,
permissions: res.permissions,
});
} else {
//this case should never happen.
roles.push({
role,
permissions: [],
});
}
} catch (_) {}
}
return {
roles: [],
roles,
totalPages,
rolesCount,
status: "OK",
};
} else {
const response = await userroles_1.default.getAllRoles();
return response;
}
const paginatedRoles = response.roles.slice(skip, skip + limit);
let roles = [];
for (let i = 0; i < paginatedRoles.length; i++) {
const role = paginatedRoles[i];
try {
const res = await userroles_1.default.getPermissionsForRole(role);
if (res.status === "OK") {
roles.push({
role,
permissions: res.permissions,
});
} else {
roles.push({
role,
permissions: [],
});
}
} catch (_) {}
}
return {
roles,
totalPages,
status: "OK",
};
};
exports.default = getAllRoles;
2 changes: 1 addition & 1 deletion lib/build/recipe/dashboard/recipe.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ class Recipe extends recipeModule_1.default {
utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_ROLE_API)
),
disabled: false,
method: "post",
method: "put",
},
{
id: constants_1.USERROLES_ROLE_API,
Expand Down
131 changes: 75 additions & 56 deletions lib/ts/recipe/dashboard/api/userroles/roles/getAllRoles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@ type Response =
| {
status: "OK";
totalPages: number;
rolesCount: number;
roles: Roles;
}
| {
status: "OK";
roles: string[];
}
| {
status: "FEATURE_NOT_ENABLED_ERROR";
};
Expand All @@ -29,69 +34,83 @@ const getAllRoles: APIFunction = async (
status: "FEATURE_NOT_ENABLED_ERROR",
};
}
const limit = Number(options.req.getKeyValueFromQuery("limit"));
let page = Number(options.req.getKeyValueFromQuery("page"));

if (limit === undefined || isNaN(limit) === false) {
throw new STError({
message: "Missing required parameter 'limit'",
type: STError.BAD_INPUT_ERROR,
});
}

if (page === undefined || isNaN(page) === false) {
throw new STError({
message: "Missing required parameter 'page'",
type: STError.BAD_INPUT_ERROR,
});
}

//set default page number to 1 if the page number is negitive or zero
if (page <= 0) {
page = 1;
}

const skip = limit * (page - 1);

const response = await UserRoles.getAllRoles();
//results with pagination and permissions assoicated with a role.
if (
options.req.getKeyValueFromQuery("limit") !== undefined &&
options.req.getKeyValueFromQuery("page") !== undefined
) {
const limit = Number(options.req.getKeyValueFromQuery("limit"));
let page = Number(options.req.getKeyValueFromQuery("page"));

if (isNaN(limit) === true) {
throw new STError({
message: "Missing required parameter 'limit' or invalid type",
type: STError.BAD_INPUT_ERROR,
});
}

if (isNaN(page) === true) {
throw new STError({
message: "Missing required parameter 'page' or invalid type",
type: STError.BAD_INPUT_ERROR,
});
}

//set default page number to 1 if the page number is negitive or zero
if (page <= 0) {
page = 1;
}

const skip = limit * (page - 1);

const response = await UserRoles.getAllRoles();

const totalPages = Math.ceil(response.roles.length / limit);
const rolesCount = response.roles.length;

if (page > totalPages) {
return {
roles: [],
rolesCount,
totalPages,
status: "OK",
};
}
const paginatedRoles = response.roles.slice(skip, skip + limit);

let roles: Roles = [];

for (let i = 0; i < paginatedRoles.length; i++) {
const role = paginatedRoles[i];
try {
const res = await UserRoles.getPermissionsForRole(role);

if (res.status === "OK") {
roles.push({
role,
permissions: res.permissions,
});
} else {
//this case should never happen.
roles.push({
role,
permissions: [],
});
}
} catch (_) {}
}

const totalPages = Math.ceil(response.roles.length / limit);

if (page > totalPages) {
return {
roles: [],
roles,
totalPages,
rolesCount,
status: "OK",
};
} else {
const response = await UserRoles.getAllRoles();
return response;
}
const paginatedRoles = response.roles.slice(skip, skip + limit);

let roles: Roles = [];

for (let i = 0; i < paginatedRoles.length; i++) {
const role = paginatedRoles[i];
try {
const res = await UserRoles.getPermissionsForRole(role);

if (res.status === "OK") {
roles.push({
role,
permissions: res.permissions,
});
} else {
roles.push({
role,
permissions: [],
});
}
} catch (_) {}
}

return {
roles,
totalPages,
status: "OK",
};
};

export default getAllRoles;
2 changes: 1 addition & 1 deletion lib/ts/recipe/dashboard/recipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ export default class Recipe extends RecipeModule {
id: USERROLES_ROLE_API,
pathWithoutApiBasePath: new NormalisedURLPath(getApiPathWithDashboardBase(USERROLES_ROLE_API)),
disabled: false,
method: "post",
method: "put",
},
{
id: USERROLES_ROLE_API,
Expand Down

0 comments on commit 53aa598

Please sign in to comment.