Skip to content

Commit

Permalink
feat: endpoint tr-get-me-individual
Browse files Browse the repository at this point in the history
  • Loading branch information
yxuo committed Jan 30, 2024
1 parent 1d6360f commit 3612258
Show file tree
Hide file tree
Showing 19 changed files with 352 additions and 93 deletions.
18 changes: 11 additions & 7 deletions src/bank-statements/bank-statements.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ import { DateApiParams } from 'src/utils/api-param/date-api-param';
import { PaginationApiParams } from 'src/utils/api-param/pagination.api-param';
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { IRequest } from 'src/utils/interfaces/request.interface';
import { pagination as getPaginationResult } from 'src/utils/pagination';
import { getPagination } from 'src/utils/get-pagination';
import { ParseNumberPipe } from 'src/utils/pipes/parse-number.pipe';
import { DateQueryParams } from 'src/utils/query-param/date.query-param';
import { PaginationQueryParams } from 'src/utils/query-param/pagination.query-param';
import { PaginationResultType as PaginationResult } from 'src/utils/types/pagination-result.type';
import { Pagination } from 'src/utils/types/pagination.type';
import { BankStatementsService } from './bank-statements.service';
import { BSMePrevDaysTimeIntervalEnum } from './enums/bs-me-prev-days-time-interval.enum';
import { BSMeTimeIntervalEnum } from './enums/bs-me-time-interval.enum';
Expand Down Expand Up @@ -116,16 +116,20 @@ export class BankStatementsController {
@Query('timeInterval') timeInterval: BSMePrevDaysTimeIntervalEnum,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
userId?: number | null,
): Promise<PaginationResult<IBSGetMePreviousDaysResponse>> {
): Promise<Pagination<IBSGetMePreviousDaysResponse>> {
const isUserIdParam = userId !== null && !isNaN(Number(userId));
const result = await this.bankStatementsService.getMePreviousDays({
endDate: endDate,
timeInterval: timeInterval,
userId: isUserIdParam ? userId : (request.user as User).id,
});
return getPaginationResult(result, result.data.length, result.data.length, {
limit,
page,
});
return getPagination(
result,
{
dataLenght: result.data.length,
maxCount: result.data.length,
},
{ limit, page },
);
}
}
8 changes: 4 additions & 4 deletions src/bank-statements/bank-statements.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ describe('BankStatementsService', () => {
provide: TicketRevenuesService,
useValue: {
getGroupedFromUser: jest.fn(),
getMeFromUser: jest.fn(),
getMe: jest.fn(),
},
} as Provider;

Expand Down Expand Up @@ -165,7 +165,7 @@ describe('BankStatementsService', () => {
jest
.spyOn(global.Date, 'now')
.mockImplementation(() => new Date('2023-01-22').valueOf());
jest.spyOn(ticketRevenuesService, 'getMeFromUser').mockResolvedValue({
jest.spyOn(ticketRevenuesService, 'getMe').mockResolvedValue({
startDate: '2023-01-12',
endDate: '2023-01-22',
amountSum: 110,
Expand Down Expand Up @@ -313,7 +313,7 @@ describe('BankStatementsService', () => {
jest
.spyOn(global.Date, 'now')
.mockImplementation(() => new Date('2023-01-25').valueOf());
jest.spyOn(ticketRevenuesService, 'getMeFromUser').mockResolvedValue({
jest.spyOn(ticketRevenuesService, 'getMe').mockResolvedValue({
startDate: null,
endDate: '2023-01-25',
amountSum: 70,
Expand Down Expand Up @@ -460,7 +460,7 @@ describe('BankStatementsService', () => {
jest
.spyOn(global.Date, 'now')
.mockImplementation(() => new Date('2023-01-17').valueOf());
jest.spyOn(ticketRevenuesService, 'getMeFromUser').mockResolvedValue({
jest.spyOn(ticketRevenuesService, 'getMe').mockResolvedValue({
startDate: null,
endDate: '2023-01-25',
amountSum: 200,
Expand Down
2 changes: 1 addition & 1 deletion src/bank-statements/bank-statements.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ export class BankStatementsService {
);

// Get daily data form tickets/me
const revenuesResponse = await this.ticketRevenuesService.getMeFromUser(
const revenuesResponse = await this.ticketRevenuesService.getMe(
{
startDate: getDateYMDString(dailyTRDates.startDate),
endDate: getDateYMDString(dailyTRDates.endDate),
Expand Down
4 changes: 0 additions & 4 deletions src/ticket-revenues/enums/ticket-revenues-group-by.enum.ts

This file was deleted.

5 changes: 5 additions & 0 deletions src/ticket-revenues/enums/tr-time-interval.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export enum TRTimeIntervalEnum {
LAST_WEEK = 'lastWeek',
LAST_2_WEEKS = 'last2Weeks',
LAST_MONTH = 'lastMonth',
}
3 changes: 3 additions & 0 deletions src/ticket-revenues/interfaces/tr-counts.interface.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/**
* Ticket Revenue Counts
*/
export interface ITRCounts {
count: number;
transactionValue: number;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';

export interface ITicketRevenuesGetGrouped {
export interface ITRGetMeGroupedArgs {
startDate?: string;
endDate?: string;
timeInterval?: TimeIntervalEnum;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ITicketRevenuesGroup } from './ticket-revenues-group.interface';

export interface ITicketRevenuesGroupedResponse {
export interface ITRGetMeGroupedResponse {
startDate: string | null;
endDate: string | null;
amountSum: number;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { TRTimeIntervalEnum as TRTimeIntervalEnum } from '../enums/tr-time-interval.enum';

export interface ITRGetMeIndividualArgs {
startDate?: string;
endDate?: string;
timeInterval?: TRTimeIntervalEnum;
userId?: number;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ITicketRevenue } from './ticket-revenue.interface';

export interface ITRGetMeIndividualResponse {
amountSum: number;
data: ITicketRevenue[];
}
79 changes: 59 additions & 20 deletions src/ticket-revenues/ticket-revenues.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { ParseNumberPipe } from 'src/utils/pipes/parse-number.pipe';
import { DateQueryParams } from 'src/utils/query-param/date.query-param';
import { PaginationQueryParams } from 'src/utils/query-param/pagination.query-param';
import { IPaginationOptions } from 'src/utils/types/pagination-options';
import { ITicketRevenuesGetGrouped } from './interfaces/ticket-revenues-get-grouped.interface';
import { Pagination } from 'src/utils/types/pagination.type';
import { TRTimeIntervalEnum } from './enums/tr-time-interval.enum';
import { ITicketRevenuesGroup } from './interfaces/ticket-revenues-group.interface';
import { ITicketRevenuesGroupedResponse } from './interfaces/ticket-revenues-grouped-response.interface';
import { ITRGetMeGroupedResponse } from './interfaces/tr-get-me-grouped-response.interface';
import { ITRGetMeIndividualResponse } from './interfaces/tr-get-me-individual-response.interface';
import { TicketRevenuesService } from './ticket-revenues.service';

@ApiTags('TicketRevenues')
Expand Down Expand Up @@ -58,21 +59,18 @@ export class TicketRevenuesController {
@Query(...DateQueryParams.startDate) startDate?: string,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
userId?: number | null,
): Promise<ITicketRevenuesGroupedResponse> {
): Promise<ITRGetMeGroupedResponse> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
const args: ITicketRevenuesGetGrouped = {
startDate,
endDate,
timeInterval,
userId: isUserIdNumber ? userId : request.user.id,
};
const pagination: IPaginationOptions = { limit, page };
const response = await this.ticketRevenuesService.getMeFromUser(
args,
pagination,
return await this.ticketRevenuesService.getMe(
{
startDate,
endDate,
timeInterval,
userId: isUserIdNumber ? userId : request.user.id,
},
{ limit, page },
'ticket-revenues',
);
return response;
}

@SerializeOptions({
Expand Down Expand Up @@ -100,15 +98,56 @@ export class TicketRevenuesController {
userId?: number | null,
): Promise<ITicketRevenuesGroup> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
const args: ITicketRevenuesGetGrouped = {
return await this.ticketRevenuesService.getMeGrouped({
startDate,
endDate,
timeInterval,
userId: isUserIdNumber ? userId : request.user.id,
};
return await this.ticketRevenuesService.getMeGroupedFromUser(
args,
'ticket-revenues',
});
}

@SerializeOptions({
groups: ['me'],
})
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@Get('/me/individual')
@HttpCode(HttpStatus.OK)
@ApiQuery(PaginationApiParams.page)
@ApiQuery(PaginationApiParams.limit)
@ApiQuery(DateApiParams.startDate)
@ApiQuery(DateApiParams.endDate)
@ApiQuery(
DateApiParams.getTimeInterval(
TRTimeIntervalEnum,
TRTimeIntervalEnum.LAST_WEEK,
),
)
@ApiQuery({
name: 'userId',
type: Number,
required: false,
description: DescriptionApiParam({ default: 'Your logged user id (me)' }),
})
async getMeIndividual(
@Request() request,
@Query(...PaginationQueryParams.page) page: number,
@Query(...PaginationQueryParams.limit) limit: number,
@Query(...DateQueryParams.endDate) endDate: string,
@Query(...DateQueryParams.startDate) startDate?: string,
@Query('timeInterval') timeInterval?: TRTimeIntervalEnum,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
userId?: number | null,
): Promise<Pagination<ITRGetMeIndividualResponse>> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
return await this.ticketRevenuesService.getMeIndividual(
{
startDate,
endDate,
timeInterval,
userId: isUserIdNumber ? userId : request.user.id,
},
{ limit, page },
);
}
}
36 changes: 18 additions & 18 deletions src/ticket-revenues/ticket-revenues.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,17 +127,17 @@ describe('TicketRevenuesService', () => {
jest.spyOn(usersService, 'getOne').mockResolvedValue(user);
jest
.spyOn(ticketRevenuesService as any, 'fetchTicketRevenues')
.mockResolvedValue(revenues);
.mockResolvedValue({
ticketRevenuesResponse: revenues,
countAll: revenues.length,
});

// Act
const result = await ticketRevenuesService.getMeGroupedFromUser(
{
startDate: '2023-06-01',
endDate: '2023-06-01',
userId: 1,
},
'ticket-revenues',
);
const result = await ticketRevenuesService.getMeGrouped({
startDate: '2023-06-01',
endDate: '2023-06-01',
userId: 1,
});

// Assert
expect(
Expand Down Expand Up @@ -217,17 +217,17 @@ describe('TicketRevenuesService', () => {
jest.spyOn(usersService, 'getOne').mockResolvedValue(user);
jest
.spyOn(ticketRevenuesService as any, 'fetchTicketRevenues')
.mockResolvedValue(revenues);
.mockResolvedValue({
ticketRevenuesResponse: revenues,
countAll: revenues.length,
});

// Act
const result = await ticketRevenuesService.getMeGroupedFromUser(
{
startDate: '2023-06-01',
endDate: '2023-06-01',
userId: 1,
},
'ticket-revenues',
);
const result = await ticketRevenuesService.getMeGrouped({
startDate: '2023-06-01',
endDate: '2023-06-01',
userId: 1,
});

// Assert
const transactionTypeCountsSum = Object.values(
Expand Down
Loading

0 comments on commit 3612258

Please sign in to comment.