Skip to content

Commit

Permalink
fix: userID validation, refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
yxuo committed Jan 30, 2024
1 parent 3612258 commit 2ffc8c2
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 106 deletions.
6 changes: 3 additions & 3 deletions src/bank-statements/bank-statements.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export class BankStatementsController {
@Query(...DateQueryParams.endDate) endDate?: string,
@Query(...DateQueryParams.timeInterval)
timeInterval?: BSMeTimeIntervalEnum | undefined,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<IBSGetMeResponse> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
Expand All @@ -80,7 +80,7 @@ export class BankStatementsController {
async getMeDayDate(
@Request() request: IRequest,
@Param('date') date: string,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<IBSGetMeDayResponse> {
const isUserIdParam = userId !== null && !isNaN(Number(userId));
Expand Down Expand Up @@ -114,7 +114,7 @@ export class BankStatementsController {
@Query(...PaginationQueryParams.limit) limit: number,
@Query(...DateQueryParams.getDate('endDate', true)) endDate: string,
@Query('timeInterval') timeInterval: BSMePrevDaysTimeIntervalEnum,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<Pagination<IBSGetMePreviousDaysResponse>> {
const isUserIdParam = userId !== null && !isNaN(Number(userId));
Expand Down
36 changes: 18 additions & 18 deletions src/bank-statements/bank-statements.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,18 +106,18 @@ export class BankStatementsService {
timeInterval?: TimeIntervalEnum;
user: User;
}): Promise<IGetBSResponse> {
const intervalBSDates = getPaymentDates(
'bank-statements',
args?.startDate,
args?.endDate,
args?.timeInterval,
);
const dailyTRDates = getPaymentDates(
'ticket-revenues',
args?.startDate,
args?.endDate,
args?.timeInterval,
);
const intervalBSDates = getPaymentDates({
endpoint: 'bank-statements',
startDateStr: args?.startDate,
endDateStr: args?.endDate,
timeInterval: args?.timeInterval,
});
const dailyTRDates = getPaymentDates({
endpoint: 'ticket-revenues',
startDateStr: args?.startDate,
endDateStr: args?.endDate,
timeInterval: args?.timeInterval,
});

// Get daily data form tickets/me
const revenuesResponse = await this.ticketRevenuesService.getMe(
Expand Down Expand Up @@ -246,12 +246,12 @@ export class BankStatementsService {
endDate?: string;
timeInterval?: TimeIntervalEnum;
}): IBankStatement[] {
const intervalBSDates = getPaymentDates(
'bank-statements',
undefined,
validArgs?.endDate,
validArgs?.timeInterval,
);
const intervalBSDates = getPaymentDates({
endpoint: 'bank-statements',
startDateStr: undefined,
endDateStr: validArgs?.endDate,
timeInterval: validArgs?.timeInterval,
});
// This data is mocked for development
return [
{
Expand Down
6 changes: 3 additions & 3 deletions src/ticket-revenues/ticket-revenues.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export class TicketRevenuesController {
@Query('timeInterval') timeInterval: TimeIntervalEnum,
@Query(...DateQueryParams.endDate) endDate?: string,
@Query(...DateQueryParams.startDate) startDate?: string,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<ITRGetMeGroupedResponse> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
Expand Down Expand Up @@ -94,7 +94,7 @@ export class TicketRevenuesController {
@Query(...DateQueryParams.endDate) endDate: string,
@Query(...DateQueryParams.startDate) startDate?: string,
@Query('timeInterval') timeInterval?: TimeIntervalEnum,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<ITicketRevenuesGroup> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
Expand Down Expand Up @@ -136,7 +136,7 @@ export class TicketRevenuesController {
@Query(...DateQueryParams.endDate) endDate: string,
@Query(...DateQueryParams.startDate) startDate?: string,
@Query('timeInterval') timeInterval?: TRTimeIntervalEnum,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
@Query('userId', new ParseNumberPipe({ min: 1, required: false }))
userId?: number | null,
): Promise<Pagination<ITRGetMeIndividualResponse>> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
Expand Down
97 changes: 24 additions & 73 deletions src/ticket-revenues/ticket-revenues.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import { BQSInstances, BigqueryService } from 'src/bigquery/bigquery.service';
import { User } from 'src/users/entities/user.entity';
import { UsersService } from 'src/users/users.service';
import { getDateNthWeek } from 'src/utils/date-utils';
import { HttpErrorMessages } from 'src/utils/enums/http-error-messages.enum';
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { WeekdayEnum } from 'src/utils/enums/weekday.enum';
import { formatLog } from 'src/utils/logging';
import { getPagination } from 'src/utils/get-pagination';
import { formatLog } from 'src/utils/logging';
import {
PAYMENT_START_WEEKDAY,
PaymentEndpointType,
Expand Down Expand Up @@ -47,18 +46,18 @@ export class TicketRevenuesService {
args: ITRGetMeGroupedArgs,
): Promise<ITicketRevenuesGroup> {
// Args
const user = await this.getUser(args);
const { startDate, endDate } = getPaymentDates(
'ticket-revenues',
args.startDate,
args.endDate,
args.timeInterval,
);
const user = await this.validateUser(args);
const { startDate, endDate } = getPaymentDates({
endpoint: 'ticket-revenues',
startDateStr: args.startDate,
endDateStr: args.endDate,
timeInterval: args.timeInterval,
});

// Get data
let ticketRevenuesResponse: ITicketRevenue[] = [];
const fetchArgs: IFetchTicketRevenues = {
cpfCnpj: user.cpfCnpj,
cpfCnpj: user.getCpfCnpj(),
startDate,
endDate,
};
Expand All @@ -80,20 +79,20 @@ export class TicketRevenuesService {
pagination: IPaginationOptions,
endpoint: PaymentEndpointType,
): Promise<ITRGetMeGroupedResponse> {
const user = await this.getUser(args);
const user = await this.validateUser(args);
const GET_TODAY = true;
const { startDate, endDate } = getPaymentDates(
endpoint,
args.startDate,
args.endDate,
args.timeInterval,
);
const { startDate, endDate } = getPaymentDates({
endpoint: endpoint,
startDateStr: args.startDate,
endDateStr: args.endDate,
timeInterval: args.timeInterval,
});
const groupBy = args?.groupBy || 'day';

// Get data
let ticketRevenuesResponse: ITicketRevenue[] = [];
const fetchArgs: IFetchTicketRevenues = {
cpfCnpj: user.cpfCnpj,
cpfCnpj: user.getCpfCnpj(),
startDate,
endDate,
getToday: GET_TODAY,
Expand Down Expand Up @@ -195,32 +194,8 @@ export class TicketRevenuesService {
}
}

private async getUser(args: ITRGetMeGroupedArgs): Promise<User> {
if (isNaN(args?.userId as number)) {
throw new HttpException(
{
details: {
userId: `field is ${args?.userId}`,
},
},
HttpStatus.UNPROCESSABLE_ENTITY,
);
}
private async validateUser(args: ITRGetMeGroupedArgs): Promise<User> {
const user = await this.usersService.getOne({ id: args?.userId });
if (!user.cpfCnpj) {
throw new HttpException(
{
error: HttpErrorMessages.UNAUTHORIZED,
details: {
message: 'Maybe your token has expired, try to get a new one',
user: {
cpfCnpj: 'fieldIsEmpty',
},
},
},
HttpStatus.UNAUTHORIZED,
);
}
return user;
}

Expand Down Expand Up @@ -395,12 +370,12 @@ export class TicketRevenuesService {
): Promise<Pagination<ITRGetMeIndividualResponse>> {
const GET_TODAY = true;
const validArgs = await this.validateGetMeIndividualArgs(args);
const { startDate, endDate } = getPaymentDates(
'ticket-revenues',
validArgs.startDate,
validArgs.endDate,
validArgs.timeInterval,
);
const { startDate, endDate } = getPaymentDates({
endpoint: 'ticket-revenues',
startDateStr: validArgs.startDate,
endDateStr: validArgs.endDate,
timeInterval: validArgs.timeInterval,
});

const result = await this.fetchTicketRevenues({
cpfCnpj: validArgs.user.getCpfCnpj(),
Expand Down Expand Up @@ -464,31 +439,7 @@ export class TicketRevenuesService {
endDate?: string;
timeInterval?: TimeIntervalEnum;
}> {
if (isNaN(args?.userId as number)) {
throw new HttpException(
{
details: {
userId: `field is ${args?.userId}`,
},
},
HttpStatus.UNPROCESSABLE_ENTITY,
);
}
const user = await this.usersService.getOne({ id: args?.userId });
if (!user.cpfCnpj) {
throw new HttpException(
{
error: HttpErrorMessages.UNAUTHORIZED,
details: {
message: 'Maybe your token has expired, try to get a new one',
user: {
cpfCnpj: 'fieldIsEmpty',
},
},
},
HttpStatus.UNAUTHORIZED,
);
}
return {
startDate: args?.startDate,
endDate: args?.endDate,
Expand Down
15 changes: 8 additions & 7 deletions src/utils/payment-date-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,17 @@ export function getPaymentMonth(
}
}

export function getPaymentDates(
endpoint: PaymentEndpointType,
startDateStr?: string,
endDateStr?: string,
timeInterval?: TimeIntervalEnum,
): DateIntervalType {
export function getPaymentDates(args: {
endpoint: PaymentEndpointType;
startDateStr?: string;
endDateStr?: string;
timeInterval?: TimeIntervalEnum;
}): DateIntervalType {
const { endpoint, endDateStr, startDateStr, timeInterval } = args;
if (!validateDate(startDateStr, endDateStr, timeInterval)) {
throw new HttpException(
{
error: 'invalid request.',
error: 'Invalid request.',
},
HttpStatus.BAD_REQUEST,
);
Expand Down
6 changes: 4 additions & 2 deletions src/utils/pipes/parse-number.pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ export class ParseNumberPipe implements PipeTransform {

if (!this.args.required && (value === undefined || field === undefined)) {
return numberValue;
} else if (value !== undefined && isNaN(numberValue)) {
}

if (value !== undefined && isNaN(numberValue)) {
throw new BadRequestException(
`${field} should be a valid number: ${value}`,
);
Expand All @@ -35,7 +37,7 @@ export class ParseNumberPipe implements PipeTransform {
) {
let returnSubstring = '';
if (isMin && !isMax) {
returnSubstring = `greather or equal than ${this.args.min as number}`;
returnSubstring = `greater or equal than ${this.args.min as number}`;
}
if (!isMin && isMax) {
returnSubstring = `lower or equal than ${this.args.max as number}`;
Expand Down

0 comments on commit 2ffc8c2

Please sign in to comment.