feat: adds pagination in organizations table

This commit is contained in:
Piyush Gupta
2025-10-07 22:59:48 +05:30
parent 464a18ccb2
commit b7b5939c16
7 changed files with 198 additions and 126 deletions
+11 -2
View File
@@ -230,7 +230,10 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
createdAt: z.date()
})
.array()
}).array()
}).array(),
meta: z.object({
total: z.number()
})
})
}
},
@@ -243,9 +246,15 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
const organizations = await server.services.superAdmin.getOrganizations({
...req.query
});
const count = await server.services.superAdmin.countOrganizations({
...req.query
});
return {
organizations
organizations,
meta: {
total: count
}
};
}
});
+22
View File
@@ -138,6 +138,27 @@ export const orgDALFactory = (db: TDbClient) => {
}
};
const countOrganizationsByFilter = async ({ searchTerm }: { searchTerm: string }) => {
interface CountResult {
count: string;
}
try {
const count = await db
.replicaNode()(TableName.Organization)
.where((qb) => {
if (searchTerm) {
void qb.whereILike(`${TableName.Organization}.name`, `%${searchTerm}%`);
}
})
.count("*")
.first();
return parseInt((count as unknown as CountResult).count || "0", 10);
} catch (error) {
throw new DatabaseError({ error, name: "Count organizations by filter" });
}
};
const findOrgById = async (orgId: string) => {
try {
const org = (await db
@@ -670,6 +691,7 @@ export const orgDALFactory = (db: TDbClient) => {
findOrgBySlug,
findAllOrgsByUserId,
findOrganizationsByFilter,
countOrganizationsByFilter,
ghostUserExists,
findOrgMembersByUsername,
findOrgMembersByRole,
@@ -55,6 +55,7 @@ import {
TAdminGetUsersDTO,
TAdminIntegrationConfig,
TAdminSignUpDTO,
TCountOrganizationsDTO,
TCreateOrganizationDTO,
TGetOrganizationsDTO,
TResendOrgInviteDTO
@@ -750,6 +751,13 @@ export const superAdminServiceFactory = ({
return organizations;
};
const countOrganizations = async ({ searchTerm }: TCountOrganizationsDTO) => {
const count = await orgDAL.countOrganizationsByFilter({
searchTerm
});
return count;
};
const createOrganization = async (
{ name, inviteAdminEmails: emails }: TCreateOrganizationDTO,
actor: OrgServiceActor
@@ -1146,6 +1154,7 @@ export const superAdminServiceFactory = ({
invalidateCache,
checkIfInvalidatingCache,
getOrganizations,
countOrganizations,
deleteOrganization,
deleteOrganizationMembership,
initializeAdminIntegrationConfigSync,
@@ -34,6 +34,10 @@ export type TGetOrganizationsDTO = {
searchTerm: string;
};
export type TCountOrganizationsDTO = {
searchTerm: string;
};
export type TCreateOrganizationDTO = {
name: string;
inviteAdminEmails: string[];