Skip to content

Commit

Permalink
Merge pull request #179 from RJ-SMTR/hotfix/#177-fin-info-mock
Browse files Browse the repository at this point in the history
Hotfix/#177 Endpoint dias anteriores
  • Loading branch information
williamfl2007 committed Feb 7, 2024
2 parents fffefc0 + e136f7c commit 98ba242
Show file tree
Hide file tree
Showing 10 changed files with 278 additions and 146 deletions.
125 changes: 125 additions & 0 deletions src/bank-statements/bank-statements-repository.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import { Injectable } from '@nestjs/common';
import { nextFriday } from 'date-fns';
import { TicketRevenuesService } from 'src/ticket-revenues/ticket-revenues.service';
import { User } from 'src/users/entities/user.entity';
import { getDateYMDString, isPaymentWeekComplete } from 'src/utils/date-utils';
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { getPagination } from 'src/utils/get-pagination';
import { PaginationOptions } from 'src/utils/types/pagination-options';
import { Pagination } from 'src/utils/types/pagination.type';
import { IBankStatement } from './interfaces/bank-statement.interface';
import { IBSCounts } from './interfaces/bs-counts.interface';
import { IBSGetMePreviousDaysValidArgs } from './interfaces/bs-get-me-previous-days-args.interface';
import { IBSGetMePreviousDaysResponse } from './interfaces/bs-get-me-previous-days-response.interface';

/**
* Get weekly statements
*/
@Injectable()
export class BankStatementsRepositoryService {
constructor(private readonly ticketRevenuesService: TicketRevenuesService) {}

public async getPreviousDays(
validArgs: IBSGetMePreviousDaysValidArgs,
paginationOptions: PaginationOptions,
): Promise<Pagination<IBSGetMePreviousDaysResponse>> {
const previousDays = await this.buildPreviousDays({
user: validArgs.user,
endDate: validArgs.endDate,
timeInterval: validArgs.timeInterval,
paginationArgs: paginationOptions,
});
const statusCounts = this.generateStatusCounts(previousDays.data);

return getPagination<IBSGetMePreviousDaysResponse>(
{
data: previousDays.data,
statusCounts: statusCounts,
},
{
dataLenght: previousDays.data.length,
maxCount: previousDays.count,
},
paginationOptions,
);
}

private async buildPreviousDays(validArgs: {
user: User;
endDate: string;
timeInterval?: TimeIntervalEnum;
paginationArgs?: PaginationOptions;
}): Promise<Pagination<{ data: IBankStatement[] }>> {
const pagination = validArgs.paginationArgs
? validArgs.paginationArgs
: { limit: 9999, page: 1 };
const revenues = await this.ticketRevenuesService.fetchTicketRevenues({
startDate: new Date(validArgs.endDate),
endDate: new Date(validArgs.endDate),
cpfCnpj: validArgs.user.getCpfCnpj(),
limit: pagination.limit,
offset: (pagination.page - 1) * pagination.limit,
previousDays: true,
});
const statements = revenues.data.map((item, index) => {
const isPaid = isPaymentWeekComplete(
new Date(String(item.processingDateTime)),
);
return {
id: index,
date: getDateYMDString(new Date(String(item.processingDateTime))),
processingDate: getDateYMDString(
new Date(String(item.processingDateTime)),
),
transactionDate: getDateYMDString(
new Date(String(item.transactionDateTime)),
),
paymentOrderDate: getDateYMDString(
nextFriday(new Date(String(item.processingDateTime))),
),
effectivePaymentDate: isPaid
? getDateYMDString(
nextFriday(new Date(String(item.processingDateTime))),
)
: null,
cpfCnpj: validArgs.user.getCpfCnpj(),
permitCode: validArgs.user.getPermitCode(),
amount: item.transactionValue,
status: isPaid ? 'Pago' : 'A pagar',
statusCode: isPaid ? 'paid' : 'toPay',
bankStatus: isPaid ? '00' : null,
bankStatusCode: isPaid ? 'Crédito ou Débito Efetivado' : null,
error: null,
errorCode: null,
} as IBankStatement;
});
return getPagination<{ data: IBankStatement[] }>(
{
data: statements,
},
{
dataLenght: statements.length,
maxCount: revenues.countAll,
},
pagination,
);
}

private generateStatusCounts(
data: IBankStatement[],
): Record<string, IBSCounts> {
const statusCounts: Record<string, IBSCounts> = {};
for (const item of data) {
if (!statusCounts?.[item.statusCode]) {
statusCounts[item.statusCode] = {
count: 1,
amountSum: item.amount,
};
} else {
statusCounts[item.statusCode].count += 1;
statusCounts[item.statusCode].amountSum += item.amount;
}
}
return statusCounts;
}
}
15 changes: 9 additions & 6 deletions src/bank-statements/bank-statements.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export class BankStatementsController {
@ApiQuery(PaginationApiParams.page)
@ApiQuery(PaginationApiParams.limit)
@ApiQuery(DateApiParams.startDate)
@ApiQuery(DateApiParams.endDate)
@ApiQuery(DateApiParams.getEndDate(true))
@ApiQuery(
DateApiParams.getTimeInterval(
BSMePrevDaysTimeIntervalEnum,
Expand All @@ -118,11 +118,14 @@ export class BankStatementsController {
userId?: number | null,
): 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,
});
const result = await this.bankStatementsService.getMePreviousDays(
{
endDate: endDate,
timeInterval: timeInterval,
userId: isUserIdParam ? userId : (request.user as User).id,
},
{ limit, page },
);
return getPagination(
result,
{
Expand Down
3 changes: 2 additions & 1 deletion src/bank-statements/bank-statements.module.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { Module } from '@nestjs/common';
import { TicketRevenuesModule } from 'src/ticket-revenues/ticket-revenues.module';
import { UsersModule } from 'src/users/users.module';
import { BankStatementsRepositoryService } from './bank-statements-repository.service';
import { BankStatementsController } from './bank-statements.controller';
import { BankStatementsService } from './bank-statements.service';

@Module({
providers: [BankStatementsService],
providers: [BankStatementsService, BankStatementsRepositoryService],
controllers: [BankStatementsController],
imports: [UsersModule, TicketRevenuesModule],
})
Expand Down
48 changes: 32 additions & 16 deletions src/bank-statements/bank-statements.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { User } from 'src/users/entities/user.entity';
import { UsersService } from 'src/users/users.service';
import { getDateYMDString } from 'src/utils/date-utils';
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { BankStatementsRepositoryService } from './bank-statements-repository.service';
import { BankStatementsService } from './bank-statements.service';
import { IBankStatement } from './interfaces/bank-statement.interface';

Expand Down Expand Up @@ -47,6 +48,7 @@ describe('BankStatementsService', () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
BankStatementsService,
BankStatementsRepositoryService,
usersServiceMock,
ticketRevenuesServiceMock,
],
Expand Down Expand Up @@ -190,36 +192,40 @@ describe('BankStatementsService', () => {
{
id: 2,
date: '2023-01-27',
effectivePaymentDate: null,
amount: 40,
status: 'A pagar',
statusCode: 'toPay',
bankStatus: null,
bankStatusCode: null,
},
{
id: 1,
date: '2023-01-20',
effectivePaymentDate: '2023-01-20',
amount: 70,
status: 'Pago',
statusCode: 'paid',
bankStatus: '00',
bankStatusCode: 'Crédito ou Débito Efetivado',
},
].map((i) => ({
...i,
cpfCnpj: 'cc_1',

paymentOrderDate: i.date,
processingDate: i.date,
transactionDate: i.date,
processingDate: i.date,
paymentOrderDate: i.date,
permitCode: 'pc_1',
status: '',
statusCode: '',
error: null,
errorCode: null,
bankStatus: null,
bankStatusCode: null,
effectivePaymentDate: null,
})),
});
});

it('should filter last week', /**
* Requirement: 2024/01/18 {@link https://github.com/RJ-SMTR/api-cct/issues/168#issuecomment-1898457310 #168, item 2 - GitHub}
*
* Mocked today: 2023/01/22
* Mocked today: 2023/01/25
*
* bank-statements time interval (last week):
* ```
Expand Down Expand Up @@ -346,8 +352,8 @@ describe('BankStatementsService', () => {
processingDate: '2023-01-27',
transactionDate: '2023-01-27',
amount: 70,
status: '',
statusCode: '',
status: 'A pagar',
statusCode: 'toPay',
error: null,
errorCode: null,
bankStatus: null,
Expand Down Expand Up @@ -489,16 +495,31 @@ describe('BankStatementsService', () => {
id: 3,
date: '2023-01-20',
amount: 60,
effectivePaymentDate: null,
status: 'A pagar',
statusCode: 'toPay',
bankStatus: null,
bankStatusCode: null,
},
{
id: 2,
date: '2023-01-13',
amount: 70,
effectivePaymentDate: '2023-01-13',
status: 'Pago',
statusCode: 'paid',
bankStatus: '00',
bankStatusCode: 'Crédito ou Débito Efetivado',
},
{
id: 1,
date: '2023-01-06',
amount: 70,
effectivePaymentDate: '2023-01-06',
status: 'Pago',
statusCode: 'paid',
bankStatus: '00',
bankStatusCode: 'Crédito ou Débito Efetivado',
},
].map((i) => ({
...i,
Expand All @@ -509,11 +530,6 @@ describe('BankStatementsService', () => {
transactionDate: i.date,
error: null,
errorCode: null,
bankStatus: null,
bankStatusCode: null,
status: '',
statusCode: '',
effectivePaymentDate: null,
})),
});
});
Expand Down
Loading

0 comments on commit 98ba242

Please sign in to comment.