feat(project-members): Persist pagination setting and add role filtering

This commit is contained in:
carlosmonastyrski
2025-04-24 10:06:09 -03:00
parent 0e488d840f
commit aa893a40a9
7 changed files with 134 additions and 21 deletions
@@ -13,7 +13,7 @@ export const projectMembershipDALFactory = (db: TDbClient) => {
// special query
const findAllProjectMembers = async (
projectId: string,
filter: { usernames?: string[]; username?: string; id?: string } = {}
filter: { usernames?: string[]; username?: string; id?: string; roles?: string[] } = {}
) => {
try {
const docs = await db
@@ -126,6 +126,11 @@ export const projectMembershipDALFactory = (db: TDbClient) => {
}
]
});
if (filter.roles && filter.roles.length > 0) {
return members.filter((member) =>
member.roles.some((role) => filter.roles?.includes(role.role) || filter.roles?.includes(role.customRoleSlug))
);
}
return members;
} catch (error) {
throw new DatabaseError({ error, name: "Find all project members" });
@@ -79,7 +79,8 @@ export const projectMembershipServiceFactory = ({
actorOrgId,
actorAuthMethod,
includeGroupMembers,
projectId
projectId,
roles
}: TGetProjectMembershipDTO) => {
const { permission } = await permissionService.getProjectPermission({
actor,
@@ -91,7 +92,7 @@ export const projectMembershipServiceFactory = ({
});
ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionMemberActions.Read, ProjectPermissionSub.Member);
const projectMembers = await projectMembershipDAL.findAllProjectMembers(projectId);
const projectMembers = await projectMembershipDAL.findAllProjectMembers(projectId, { roles });
// projectMembers[0].project
if (includeGroupMembers) {
@@ -1,6 +1,6 @@
import { TProjectPermission } from "@app/lib/types";
export type TGetProjectMembershipDTO = { includeGroupMembers?: boolean } & TProjectPermission;
export type TGetProjectMembershipDTO = { includeGroupMembers?: boolean; roles?: string[] } & TProjectPermission;
export type TLeaveProjectDTO = Omit<TProjectPermission, "actorOrgId" | "actorAuthMethod">;
export enum ProjectUserMembershipTemporaryMode {
Relative = "relative"