fix : User history fix for returning most recently executed 50 user history REST/GraphQL items (HBE-165) (#27)

* chore: updated fetchUserHistory operation to return recently executed 50 entries

* chore: updated history to use PaginationArgs for operation

* chore: updated GraphQL resolver name
This commit is contained in:
Ankit Sridhar
2023-03-02 14:56:50 +05:30
committed by GitHub
parent 5eb85fd99c
commit 1780f3858d
3 changed files with 23 additions and 9 deletions

View File

@@ -71,7 +71,7 @@ describe('UserHistoryService', () => {
]; ];
return expect( return expect(
await userHistoryService.fetchUserHistory('abc', ReqType.REST), await userHistoryService.fetchUserHistory('abc', 2, ReqType.REST),
).toEqual(userHistory); ).toEqual(userHistory);
}); });
test('Should return a list of users GQL history if exists', async () => { test('Should return a list of users GQL history if exists', async () => {
@@ -118,7 +118,7 @@ describe('UserHistoryService', () => {
}, },
]; ];
return expect( return expect(
await userHistoryService.fetchUserHistory('abc', ReqType.GQL), await userHistoryService.fetchUserHistory('abc', 2, ReqType.GQL),
).toEqual(userHistory); ).toEqual(userHistory);
}); });
test('Should return an empty list of users REST history if doesnt exists', async () => { test('Should return an empty list of users REST history if doesnt exists', async () => {
@@ -126,7 +126,7 @@ describe('UserHistoryService', () => {
const userHistory: UserHistory[] = []; const userHistory: UserHistory[] = [];
return expect( return expect(
await userHistoryService.fetchUserHistory('abc', ReqType.REST), await userHistoryService.fetchUserHistory('abc', 2, ReqType.REST),
).toEqual(userHistory); ).toEqual(userHistory);
}); });
test('Should return an empty list of users GQL history if doesnt exists', async () => { test('Should return an empty list of users GQL history if doesnt exists', async () => {
@@ -134,7 +134,7 @@ describe('UserHistoryService', () => {
const userHistory: UserHistory[] = []; const userHistory: UserHistory[] = [];
return expect( return expect(
await userHistoryService.fetchUserHistory('abc', ReqType.GQL), await userHistoryService.fetchUserHistory('abc', 2, ReqType.GQL),
).toEqual(userHistory); ).toEqual(userHistory);
}); });
}); });
@@ -278,7 +278,7 @@ describe('UserHistoryService', () => {
}); });
describe('toggleHistoryStarStatus', () => { describe('toggleHistoryStarStatus', () => {
test('Should resolve right and star/unstar a request in the history', async () => { test('Should resolve right and star/unstar a request in the history', async () => {
const createdOnDate = new Date() const createdOnDate = new Date();
mockPrisma.userHistory.findFirst.mockResolvedValueOnce({ mockPrisma.userHistory.findFirst.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',

View File

@@ -19,15 +19,20 @@ export class UserHistoryService {
/** /**
* Fetch users REST or GraphQL history based on ReqType param. * Fetch users REST or GraphQL history based on ReqType param.
* @param uid Users uid * @param uid Users uid
* @param take items to fetch
* @param reqType request Type to fetch i.e. GraphQL or REST * @param reqType request Type to fetch i.e. GraphQL or REST
* @returns an array of user history * @returns an array of user history
*/ */
async fetchUserHistory(uid: string, reqType: ReqType) { async fetchUserHistory(uid: string, take: number, reqType: ReqType) {
const userHistory = await this.prisma.userHistory.findMany({ const userHistory = await this.prisma.userHistory.findMany({
where: { where: {
userUid: uid, userUid: uid,
reqType: reqType, reqType: reqType,
}, },
take: take,
orderBy: {
executedOn: 'desc',
},
}); });
const userHistoryColl: UserHistory[] = userHistory.map( const userHistoryColl: UserHistory[] = userHistory.map(

View File

@@ -1,7 +1,8 @@
import { Parent, ResolveField, Resolver } from '@nestjs/graphql'; import { Args, Parent, ResolveField, Resolver } from '@nestjs/graphql';
import { User } from '../user/user.model'; import { User } from '../user/user.model';
import { UserHistoryService } from './user-history.service'; import { UserHistoryService } from './user-history.service';
import { ReqType, UserHistory } from './user-history.model'; import { ReqType, UserHistory } from './user-history.model';
import { PaginationArgs } from '../types/input-types.args';
@Resolver(() => User) @Resolver(() => User)
export class UserHistoryUserResolver { export class UserHistoryUserResolver {
@@ -9,18 +10,26 @@ export class UserHistoryUserResolver {
@ResolveField(() => [UserHistory], { @ResolveField(() => [UserHistory], {
description: 'Returns a users REST history', description: 'Returns a users REST history',
}) })
async RESTHistory(@Parent() user: User): Promise<UserHistory[]> { async RESTHistory(
@Parent() user: User,
@Args() args: PaginationArgs,
): Promise<UserHistory[]> {
return await this.userHistoryService.fetchUserHistory( return await this.userHistoryService.fetchUserHistory(
user.uid, user.uid,
args.take,
ReqType.REST, ReqType.REST,
); );
} }
@ResolveField(() => [UserHistory], { @ResolveField(() => [UserHistory], {
description: 'Returns a users GraphQL history', description: 'Returns a users GraphQL history',
}) })
async GraphQLHistory(@Parent() user: User): Promise<UserHistory[]> { async GQLHistory(
@Parent() user: User,
@Args() args: PaginationArgs,
): Promise<UserHistory[]> {
return await this.userHistoryService.fetchUserHistory( return await this.userHistoryService.fetchUserHistory(
user.uid, user.uid,
args.take,
ReqType.GQL, ReqType.GQL,
); );
} }