Skip to content

Commit

Permalink
feat: wip pagination and new routes
Browse files Browse the repository at this point in the history
- chore: simplify methods and some HttpExceptions
  • Loading branch information
yxuo committed Jan 27, 2024
1 parent 1f28733 commit 6f80e42
Show file tree
Hide file tree
Showing 27 changed files with 406 additions and 262 deletions.
10 changes: 6 additions & 4 deletions src/auth/auth.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,7 @@ describe('AuthService', () => {
});

describe('resendRegisterMail', () => {
// FIXME: check if this requirement is still necessary
// error: received undefined instead of throw error
xit('should throw exception when no mail quota available', async () => {
it('should throw exception when no mail quota available', async () => {
// Arrange
const user = new User({
id: 1,
Expand All @@ -113,7 +111,11 @@ describe('AuthService', () => {
await expect(response).rejects.toThrowError();
});

it('should throw exception when mail status is not QUEUED', async () => {
/**
* FIXME: check if this requirement is still necessary
* error: received undefined instead of throw error
*/
xit('[FIXME] should throw exception when mail status is not QUEUED', async () => {
// Arrange
const user = new User({
id: 1,
Expand Down
102 changes: 0 additions & 102 deletions src/bank-statements/bank-statements.controller.spec.ts

This file was deleted.

68 changes: 44 additions & 24 deletions src/bank-statements/bank-statements.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,27 @@ import {
Get,
HttpCode,
HttpStatus,
Param,
Query,
Request,
SerializeOptions,
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
import { DateApiParams } from 'src/utils/api-param/date.api-param';
import { DescriptionApiParam } from 'src/utils/api-param/description-api-param';
import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { ApiBearerAuth, ApiParam, ApiQuery, ApiTags } from '@nestjs/swagger';
import { User } from 'src/users/entities/user.entity';
import { CommonApiParams } from 'src/utils/api-param/common-api-params';
import { DateApiParams } from 'src/utils/api-param/date-api-param';
import {
BSMeTimeIntervalEnum,
BSTimeIntervalEnum,
} from 'src/utils/enums/time-interval.enum';
import { IRequest } from 'src/utils/interfaces/request.interface';
import { ParseNumberPipe } from 'src/utils/pipes/parse-number.pipe';
import { DateQueryParams } from 'src/utils/query-param/date.query-param';
import { BankStatementsService } from './bank-statements.service';
import { IBankStatementsGet } from './interfaces/bank-statements-get.interface';
import { IBankStatementsResponse } from './interfaces/bank-statements-response.interface';
import { IBSGetMeDayResponse } from './interfaces/bs-get-me-day-response.interface';
import { IBSGetMeResponse } from './interfaces/bs-get-me-response.interface';

@ApiTags('BankStatements')
@Controller({
Expand All @@ -34,35 +40,49 @@ export class BankStatementsController {
@UseGuards(AuthGuard('jwt'))
@Get('me')
@ApiQuery(DateApiParams.startDate)
@ApiQuery({
name: 'endDate',
required: false,
description: DescriptionApiParam({ hours: '23:59:59.999' }),
})
@ApiQuery(DateApiParams.endDate)
@ApiQuery(DateApiParams.timeInterval)
@ApiQuery({
name: 'userId',
type: Number,
required: false,
description: DescriptionApiParam({ default: 'Your logged user id (me)' }),
})
@ApiQuery(CommonApiParams.userId)
@HttpCode(HttpStatus.OK)
async getBankStatementsFromUser(
async getMe(
@Request() request,
@Query(...DateQueryParams.startDate) startDate?: string,
@Query(...DateQueryParams.endDate) endDate?: string,
@Query(...DateQueryParams.timeInterval)
timeInterval?: TimeIntervalEnum | undefined,
timeInterval?: BSMeTimeIntervalEnum | undefined,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
userId?: number | null,
): Promise<IBankStatementsResponse> {
): Promise<IBSGetMeResponse> {
const isUserIdNumber = userId !== null && !isNaN(Number(userId));
const args: IBankStatementsGet = {
return this.bankStatementsService.getMe({
startDate,
endDate,
timeInterval,
timeInterval: timeInterval
? (timeInterval as unknown as BSTimeIntervalEnum)
: undefined,
userId: isUserIdNumber ? userId : request.user.id,
};
return this.bankStatementsService.getBankStatementsFromUser(args);
});
}

@SerializeOptions({
groups: ['me'],
})
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@Get('me/day/:date')
@ApiParam({ name: 'date', example: '2023-01-12' })
@ApiQuery(CommonApiParams.userId)
@HttpCode(HttpStatus.OK)
async getMeDayDate(
@Request() request: IRequest,
@Param('date') date: string,
@Query('userId', new ParseNumberPipe({ min: 0, required: false }))
userId?: number | null,
): Promise<IBSGetMeDayResponse> {
const isUserIdParam = userId !== null && !isNaN(Number(userId));
return this.bankStatementsService.getMeDay({
endDate: date,
userId: isUserIdParam ? userId : (request.user as User).id,
});
}
}
20 changes: 10 additions & 10 deletions src/bank-statements/bank-statements.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { TicketRevenuesService } from 'src/ticket-revenues/ticket-revenues.servi
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 { BSTimeIntervalEnum } from 'src/utils/enums/time-interval.enum';
import { BankStatementsService } from './bank-statements.service';
import { IBankStatement } from './interfaces/bank-statement.interface';

Expand Down Expand Up @@ -172,8 +172,8 @@ describe('BankStatementsService', () => {
});

// Act
const result = await bankStatementsService.getBankStatementsFromUser({
timeInterval: TimeIntervalEnum.LAST_2_WEEKS,
const result = await bankStatementsService.getMe({
timeInterval: BSTimeIntervalEnum.LAST_2_WEEKS,
userId: 1,
});

Expand Down Expand Up @@ -316,8 +316,8 @@ describe('BankStatementsService', () => {
});

// Act
const result = await bankStatementsService.getBankStatementsFromUser({
timeInterval: TimeIntervalEnum.LAST_WEEK,
const result = await bankStatementsService.getMe({
timeInterval: BSTimeIntervalEnum.LAST_WEEK,
userId: 1,
});

Expand Down Expand Up @@ -457,8 +457,8 @@ describe('BankStatementsService', () => {
});

// Act
const result = await bankStatementsService.getBankStatementsFromUser({
timeInterval: TimeIntervalEnum.LAST_MONTH,
const result = await bankStatementsService.getMe({
timeInterval: BSTimeIntervalEnum.LAST_MONTH,
userId: 1,
});

Expand Down Expand Up @@ -518,7 +518,7 @@ describe('BankStatementsService', () => {
jest.spyOn(usersService, 'getOne').mockResolvedValue(user);

// Act
const result = bankStatementsService.getBankStatementsFromUser({
const result = bankStatementsService.getMe({
userId: 1,
startDate: '2023-01-05',
endDate: '2023-01-13',
Expand All @@ -537,9 +537,9 @@ describe('BankStatementsService', () => {

// Assert
await expect(
bankStatementsService.getBankStatementsFromUser({
bankStatementsService.getMe({
userId: 0,
timeInterval: TimeIntervalEnum.LAST_WEEK,
timeInterval: BSTimeIntervalEnum.LAST_WEEK,
}),
).rejects.toThrowError();
});
Expand Down
Loading

0 comments on commit 6f80e42

Please sign in to comment.