diff --git a/src/authorization/service/group.service.ts b/src/authorization/service/group.service.ts index 9359538..a2ccad5 100644 --- a/src/authorization/service/group.service.ts +++ b/src/authorization/service/group.service.ts @@ -4,6 +4,7 @@ import { SearchEntity } from '../../constants/search.entity.enum'; import { GroupInputFilter, NewGroupInput, + SortDirection, UpdateGroupInput, UpdateGroupPermissionInput, UpdateGroupRoleInput, @@ -60,7 +61,10 @@ export class GroupService implements GroupServiceInterface { * @returns */ async getAllGroups(input?: GroupInputFilter): Promise<[Group[], number]> { - const SortFieldMapping = new Map([['name', 'Group.name']]); + const SortFieldMapping = new Map([ + ['name', 'group.name'], + ['updatedAt', 'group.updated_at'], + ]); let queryBuilder = this.groupRepository.createQueryBuilder('group'); if (input?.search) { @@ -72,7 +76,11 @@ export class GroupService implements GroupServiceInterface { } if (input?.sort) { const field = SortFieldMapping.get(input.sort.field); - field && queryBuilder.orderBy(field, input.sort.direction); + field + ? queryBuilder.orderBy(field, input.sort.direction) + : queryBuilder.orderBy('group.updated_at', SortDirection.DESC); + } else { + queryBuilder.orderBy('group.updated_at', SortDirection.DESC); } if (input?.pagination) { queryBuilder diff --git a/src/authorization/service/role.service.ts b/src/authorization/service/role.service.ts index b26dc51..bc6bfce 100644 --- a/src/authorization/service/role.service.ts +++ b/src/authorization/service/role.service.ts @@ -4,6 +4,7 @@ import { SearchEntity } from '../../constants/search.entity.enum'; import { NewRoleInput, RoleInputFilter, + SortDirection, UpdateRoleInput, UpdateRolePermissionInput, } from '../../schema/graphql.schema'; @@ -37,7 +38,10 @@ export class RoleService implements RoleServiceInterface { ) {} async getAllRoles(input?: RoleInputFilter): Promise<[Role[], number]> { - const SortFieldMapping = new Map([['name', 'Role.name']]); + const SortFieldMapping = new Map([ + ['name', 'role.name'], + ['updatedAt', 'role.updated_at'], + ]); let queryBuilder = this.rolesRepository.createQueryBuilder('role'); if (input?.search) { queryBuilder = this.searchService.generateSearchTermForEntity( @@ -46,10 +50,16 @@ export class RoleService implements RoleServiceInterface { input.search, ); } + if (input?.sort) { const field = SortFieldMapping.get(input.sort.field); - field && queryBuilder.orderBy(field, input.sort.direction); + field + ? queryBuilder.orderBy(field, input.sort.direction) + : queryBuilder.orderBy('role.updated_at', SortDirection.DESC); + } else { + queryBuilder.orderBy('role.updated_at', SortDirection.DESC); } + if (input?.pagination) { queryBuilder .limit(input?.pagination?.limit ?? 10) @@ -96,8 +106,8 @@ export class RoleService implements RoleServiceInterface { } await this.dataSource.manager.transaction(async (entityManager) => { - const roleRepo = entityManager.getRepository(Role); const rolePermissionsRepo = entityManager.getRepository(RolePermission); + const roleRepo = entityManager.getRepository(Role); await rolePermissionsRepo.softDelete({ roleId: id }); await roleRepo.softDelete(id); }); diff --git a/src/authorization/service/user.service.ts b/src/authorization/service/user.service.ts index 4aa563b..a974230 100644 --- a/src/authorization/service/user.service.ts +++ b/src/authorization/service/user.service.ts @@ -6,6 +6,7 @@ import { SearchEntity } from '../../constants/search.entity.enum'; import { FilterField, OperationType, + SortDirection, Status, UpdateUserGroupInput, UpdateUserInput, @@ -53,8 +54,11 @@ export class UserService implements UserServiceInterface { ) {} getAllUsers(input?: UserInputFilter): Promise<[User[], number]> { - const SortFieldMapping = new Map([['firstName', 'User.firstName']]); - const filterFieldMapping = new Map([['status', 'User.status']]); + const SortFieldMapping = new Map([ + ['firstName', 'user.firstName'], + ['updatedAt', 'user.updated_at'], + ]); + const filterFieldMapping = new Map([['status', 'user.status']]); const applyUserGroupFilter = ( field: FilterField, @@ -64,7 +68,7 @@ export class UserService implements UserServiceInterface { queryBuilder.innerJoin( UserGroup, 'userGroup', - 'userGroup.userId = User.id AND userGroup.groupId IN (:...groupIds)', + 'userGroup.userId = user.id AND userGroup.groupId IN (:...groupIds)', { groupIds: field.value }, ); } @@ -83,7 +87,11 @@ export class UserService implements UserServiceInterface { } if (input?.sort) { const sortField = SortFieldMapping.get(input.sort.field); - sortField && qb.orderBy(sortField, input.sort.direction); + sortField + ? qb.orderBy(sortField, input.sort.direction) + : qb.orderBy('user.updated_at', SortDirection.DESC); + } else { + qb.orderBy('user.updated_at', SortDirection.DESC); } if (input?.pagination) { qb.limit(input?.pagination?.limit ?? 10).offset( diff --git a/test/authorization/service/group.service.test.ts b/test/authorization/service/group.service.test.ts index 1feaf31..de95a80 100644 --- a/test/authorization/service/group.service.test.ts +++ b/test/authorization/service/group.service.test.ts @@ -175,6 +175,7 @@ describe('test Group Service', () => { .mockReturnValue({ leftJoinAndSelect: jest.fn().mockReturnThis(), where: jest.fn().mockReturnThis(), + orderBy: jest.fn().mockReturnThis(), getManyAndCount: (getManyAndCountMock = jest.fn()), }); diff --git a/test/authorization/service/role.service.test.ts b/test/authorization/service/role.service.test.ts index 709e96e..2c63953 100644 --- a/test/authorization/service/role.service.test.ts +++ b/test/authorization/service/role.service.test.ts @@ -107,6 +107,7 @@ describe('test Role Service', () => { .mockReturnValue({ leftJoinAndSelect: jest.fn().mockReturnThis(), where: jest.fn().mockReturnThis(), + orderBy: jest.fn().mockReturnThis(), getManyAndCount: (getManyAndCountMock = jest.fn()), }); diff --git a/test/authorization/service/user.service.test.ts b/test/authorization/service/user.service.test.ts index 622cd66..5899a49 100644 --- a/test/authorization/service/user.service.test.ts +++ b/test/authorization/service/user.service.test.ts @@ -154,6 +154,7 @@ describe('test UserService', () => { .mockReturnValue({ leftJoinAndSelect: jest.fn().mockReturnThis(), where: jest.fn().mockReturnThis(), + orderBy: jest.fn().mockReturnThis(), getManyAndCount: (getManyAndCountMock = jest.fn()), }); }); @@ -165,6 +166,7 @@ describe('test UserService', () => { const result = await userService.getAllUsers(); expect(createQueryBuilderMock.mock.calls[0][0]).toStrictEqual('user'); + expect(getManyAndCountMock).toBeCalledTimes(1); expect(result).toEqual([users, 1]);