diff --git a/src/infrastructure/common/pagination/pagination.service.ts b/src/infrastructure/common/pagination/pagination.service.ts index 1c22fbd..a7bd5ef 100644 --- a/src/infrastructure/common/pagination/pagination.service.ts +++ b/src/infrastructure/common/pagination/pagination.service.ts @@ -1,4 +1,5 @@ import { isObject } from 'remeda' +import { DEFAULT_PAGE_NUMBER, DEFAULT_PAGE_SIZE } from './pagination.constants' export class Pagination { static getPaginationData(query: T) { @@ -9,13 +10,13 @@ export class Pagination { typeof query.currentPage === 'string' && !isNaN(Number(query.currentPage)) ? +query.currentPage - : 1 + : DEFAULT_PAGE_NUMBER const itemsPerPage = 'itemsPerPage' in query && typeof query.itemsPerPage === 'string' && !isNaN(Number(query.itemsPerPage)) ? +query.itemsPerPage - : 10 + : DEFAULT_PAGE_SIZE return { currentPage, itemsPerPage, ...query } } diff --git a/src/infrastructure/decorators/index.ts b/src/infrastructure/decorators/index.ts new file mode 100644 index 0000000..64c93fb --- /dev/null +++ b/src/infrastructure/decorators/index.ts @@ -0,0 +1,3 @@ +export * from './cookie.decorator' +export * from './is-optional-or-empty-string.decorator' +export * from './is-order-by-constraint.decorator' diff --git a/src/infrastructure/decorators/is-optional-or-empty-string.ts b/src/infrastructure/decorators/is-optional-or-empty-string.decorator.ts similarity index 100% rename from src/infrastructure/decorators/is-optional-or-empty-string.ts rename to src/infrastructure/decorators/is-optional-or-empty-string.decorator.ts diff --git a/src/infrastructure/decorators/is-order-by-constraint.ts b/src/infrastructure/decorators/is-order-by-constraint.decorator.ts similarity index 100% rename from src/infrastructure/decorators/is-order-by-constraint.ts rename to src/infrastructure/decorators/is-order-by-constraint.decorator.ts diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index aefcb42..6cdce80 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -13,11 +13,9 @@ import { UseGuards, } from '@nestjs/common' import { RegistrationDto } from './dto/registration.dto' -import { LocalAuthGuard } from './guards/local-auth.guard' -import { JwtAuthGuard } from './guards/jwt-auth.guard' +import { LocalAuthGuard, JwtAuthGuard, JwtRefreshGuard } from './guards' import { Response as ExpressResponse } from 'express' -import { JwtRefreshGuard } from './guards/jwt-refresh.guard' -import { Cookies } from '../../infrastructure/decorators/cookie.decorator' +import { Cookies } from '../../infrastructure/decorators' import { CommandBus } from '@nestjs/cqrs' import { CreateUserCommand, diff --git a/src/modules/auth/guards/index.ts b/src/modules/auth/guards/index.ts new file mode 100644 index 0000000..a8320a5 --- /dev/null +++ b/src/modules/auth/guards/index.ts @@ -0,0 +1,4 @@ +export * from './base-auth.guard' +export * from './jwt-auth.guard' +export * from './jwt-refresh.guard' +export * from './local-auth.guard' diff --git a/src/modules/auth/infrastructure/auth.repository.ts b/src/modules/auth/infrastructure/auth.repository.ts index 87c93d7..f104c26 100644 --- a/src/modules/auth/infrastructure/auth.repository.ts +++ b/src/modules/auth/infrastructure/auth.repository.ts @@ -5,8 +5,8 @@ import { PrismaService } from '../../../prisma.service' export class AuthRepository { constructor(private prisma: PrismaService) {} - async createRefreshToken(userId: string, token: string, expiresAt: Date) { - return await this.prisma.refreshToken.create({ + createRefreshToken(userId: string, token: string, expiresAt: Date) { + return this.prisma.refreshToken.create({ data: { userId, token, diff --git a/src/modules/auth/use-cases/index.ts b/src/modules/auth/use-cases/index.ts index 28a28db..a59d9f2 100644 --- a/src/modules/auth/use-cases/index.ts +++ b/src/modules/auth/use-cases/index.ts @@ -2,7 +2,7 @@ export * from './create-user-use-case' export * from './get-current-user-data-use-case' export * from './logout-use-case' export * from './resend-verification-email-use-case' -export * from './refresh-token-use-case' -export * from './verify-email-use-case' -export * from './send-password-recovery-email-use-case' export * from './reset-password-use-case' +export * from './refresh-token-use-case' +export * from './send-password-recovery-email-use-case' +export * from './verify-email-use-case' diff --git a/src/modules/cards/cards.controller.ts b/src/modules/cards/cards.controller.ts index 1baf34f..67b35ab 100644 --- a/src/modules/cards/cards.controller.ts +++ b/src/modules/cards/cards.controller.ts @@ -11,10 +11,10 @@ import { UseInterceptors, } from '@nestjs/common' import { CardsService } from './cards.service' -import { UpdateCardDto } from './dto/update-card.dto' +import { UpdateCardDto } from './dto' import { CommandBus } from '@nestjs/cqrs' import { DeleteCardByIdCommand, GetDeckByIdCommand, UpdateCardCommand } from './use-cases' -import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard' +import { JwtAuthGuard } from '../auth/guards' import { FileFieldsInterceptor } from '@nestjs/platform-express' @Controller('cards') diff --git a/src/modules/cards/dto/get-all-cards.dto.ts b/src/modules/cards/dto/get-all-cards.dto.ts index 22226d7..c5dea4b 100644 --- a/src/modules/cards/dto/get-all-cards.dto.ts +++ b/src/modules/cards/dto/get-all-cards.dto.ts @@ -1,7 +1,6 @@ import { Length } from 'class-validator' import { PaginationDto } from '../../../infrastructure/common/pagination/pagination.dto' -import { IsOptionalOrEmptyString } from '../../../infrastructure/decorators/is-optional-or-empty-string' -import { IsOrderBy } from '../../../infrastructure/decorators/is-order-by-constraint' +import { IsOptionalOrEmptyString, IsOrderBy } from '../../../infrastructure/decorators' export class GetAllCardsInDeckDto extends PaginationDto { @IsOptionalOrEmptyString() diff --git a/src/modules/cards/dto/index.ts b/src/modules/cards/dto/index.ts new file mode 100644 index 0000000..49d9df6 --- /dev/null +++ b/src/modules/cards/dto/index.ts @@ -0,0 +1,3 @@ +export * from './create-card.dto' +export * from './get-all-cards.dto' +export * from './update-card.dto' diff --git a/src/modules/cards/use-cases/index.ts b/src/modules/cards/use-cases/index.ts index 8b4434c..8977963 100644 --- a/src/modules/cards/use-cases/index.ts +++ b/src/modules/cards/use-cases/index.ts @@ -1,3 +1,3 @@ -export * from './get-deck-by-id-use-case' export * from './delete-card-by-id-use-case' +export * from './get-deck-by-id-use-case' export * from './update-card-use-case' diff --git a/src/modules/decks/decks.controller.ts b/src/modules/decks/decks.controller.ts index 644839e..51d83ee 100644 --- a/src/modules/decks/decks.controller.ts +++ b/src/modules/decks/decks.controller.ts @@ -14,8 +14,7 @@ import { UseInterceptors, } from '@nestjs/common' import { DecksService } from './decks.service' -import { CreateDeckDto } from './dto/create-deck.dto' -import { UpdateDeckDto } from './dto/update-deck.dto' +import { UpdateDeckDto, CreateDeckDto, GetAllDecksDto } from './dto' import { CommandBus } from '@nestjs/cqrs' import { CreateDeckCommand, @@ -24,15 +23,13 @@ import { GetAllDecksCommand, GetDeckByIdCommand, UpdateDeckCommand, + GetRandomCardInDeckCommand, + SaveGradeCommand, CreateCardCommand, } from './use-cases' -import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard' -import { GetAllDecksDto } from './dto/get-all-decks.dto' -import { GetAllCardsInDeckDto } from '../cards/dto/get-all-cards.dto' -import { CreateCardDto } from '../cards/dto/create-card.dto' +import { JwtAuthGuard } from '../auth/guards' +import { CreateCardDto, GetAllCardsInDeckDto } from '../cards/dto' import { Pagination } from '../../infrastructure/common/pagination/pagination.service' -import { GetRandomCardInDeckCommand } from './use-cases/get-random-card-in-deck-use-case' -import { SaveGradeCommand } from './use-cases/save-grade-use-case' import { FileFieldsInterceptor } from '@nestjs/platform-express' @Controller('decks') diff --git a/src/modules/decks/decks.module.ts b/src/modules/decks/decks.module.ts index 44a207e..46823a5 100644 --- a/src/modules/decks/decks.module.ts +++ b/src/modules/decks/decks.module.ts @@ -10,12 +10,12 @@ import { UpdateDeckHandler, GetAllCardsInDeckHandler, CreateCardHandler, + SaveGradeHandler, + GetRandomCardInDeckHandler, } from './use-cases' import { DecksRepository } from './infrastructure/decks.repository' import { CardsRepository } from '../cards/infrastructure/cards.repository' -import { GetRandomCardInDeckHandler } from './use-cases/get-random-card-in-deck-use-case' import { GradesRepository } from './infrastructure/grades.repository' -import { SaveGradeHandler } from './use-cases/save-grade-use-case' import { FileUploadService } from '../../infrastructure/file-upload-service/file-upload.service' const commandHandlers = [ diff --git a/src/modules/decks/dto/create-grade.dto.ts b/src/modules/decks/dto/create-grade.dto.ts index 4172bbf..a6fb861 100644 --- a/src/modules/decks/dto/create-grade.dto.ts +++ b/src/modules/decks/dto/create-grade.dto.ts @@ -1,6 +1,6 @@ import { IsUUID, Max, Min } from 'class-validator' -export class CreateDeckDto { +export class CreateGradeDto { @Min(1) @Max(5) grade: number diff --git a/src/modules/decks/dto/get-all-decks.dto.ts b/src/modules/decks/dto/get-all-decks.dto.ts index 42444ba..bf38702 100644 --- a/src/modules/decks/dto/get-all-decks.dto.ts +++ b/src/modules/decks/dto/get-all-decks.dto.ts @@ -1,7 +1,6 @@ import { IsUUID } from 'class-validator' -import { IsOptionalOrEmptyString } from '../../../infrastructure/decorators/is-optional-or-empty-string' +import { IsOptionalOrEmptyString, IsOrderBy } from '../../../infrastructure/decorators' import { PaginationDto } from '../../../infrastructure/common/pagination/pagination.dto' -import { IsOrderBy } from '../../../infrastructure/decorators/is-order-by-constraint' export class GetAllDecksDto extends PaginationDto { @IsOptionalOrEmptyString() diff --git a/src/modules/decks/dto/index.ts b/src/modules/decks/dto/index.ts new file mode 100644 index 0000000..000bf00 --- /dev/null +++ b/src/modules/decks/dto/index.ts @@ -0,0 +1,4 @@ +export * from './create-deck.dto' +export * from './create-grade.dto' +export * from './get-all-decks.dto' +export * from './update-deck.dto' diff --git a/src/modules/decks/dto/update-deck.dto.ts b/src/modules/decks/dto/update-deck.dto.ts index 47115b0..58449f5 100644 --- a/src/modules/decks/dto/update-deck.dto.ts +++ b/src/modules/decks/dto/update-deck.dto.ts @@ -1,6 +1,6 @@ import { PartialType } from '@nestjs/mapped-types' import { CreateDeckDto } from './create-deck.dto' -import { IsOptionalOrEmptyString } from '../../../infrastructure/decorators/is-optional-or-empty-string' +import { IsOptionalOrEmptyString } from '../../../infrastructure/decorators' import { IsBoolean } from 'class-validator' export class UpdateDeckDto extends PartialType(CreateDeckDto) { diff --git a/src/modules/decks/infrastructure/decks.repository.ts b/src/modules/decks/infrastructure/decks.repository.ts index 169eb6d..ea492b4 100644 --- a/src/modules/decks/infrastructure/decks.repository.ts +++ b/src/modules/decks/infrastructure/decks.repository.ts @@ -1,6 +1,6 @@ import { Injectable, InternalServerErrorException, Logger } from '@nestjs/common' import { PrismaService } from '../../../prisma.service' -import { GetAllDecksDto } from '../dto/get-all-decks.dto' +import { GetAllDecksDto } from '../dto' import { Pagination } from '../../../infrastructure/common/pagination/pagination.service' import { createPrismaOrderBy } from '../../../infrastructure/common/helpers/get-order-by-object' diff --git a/src/modules/decks/use-cases/create-card-use-case.ts b/src/modules/decks/use-cases/create-card-use-case.ts index 28457b6..ac9ebd7 100644 --- a/src/modules/decks/use-cases/create-card-use-case.ts +++ b/src/modules/decks/use-cases/create-card-use-case.ts @@ -1,5 +1,5 @@ import { CommandHandler, ICommandHandler } from '@nestjs/cqrs' -import { CreateCardDto } from '../../cards/dto/create-card.dto' +import { CreateCardDto } from '../../cards/dto' import { CardsRepository } from '../../cards/infrastructure/cards.repository' import { FileUploadService } from '../../../infrastructure/file-upload-service/file-upload.service' diff --git a/src/modules/decks/use-cases/create-deck-use-case.ts b/src/modules/decks/use-cases/create-deck-use-case.ts index 96e3a1d..62f10c9 100644 --- a/src/modules/decks/use-cases/create-deck-use-case.ts +++ b/src/modules/decks/use-cases/create-deck-use-case.ts @@ -1,5 +1,5 @@ import { CommandHandler, ICommandHandler } from '@nestjs/cqrs' -import { CreateDeckDto } from '../dto/create-deck.dto' +import { CreateDeckDto } from '../dto' import { DecksRepository } from '../infrastructure/decks.repository' import { FileUploadService } from '../../../infrastructure/file-upload-service/file-upload.service' diff --git a/src/modules/decks/use-cases/get-all-cards-in-deck-use-case.ts b/src/modules/decks/use-cases/get-all-cards-in-deck-use-case.ts index 6c8aa56..2773e7d 100644 --- a/src/modules/decks/use-cases/get-all-cards-in-deck-use-case.ts +++ b/src/modules/decks/use-cases/get-all-cards-in-deck-use-case.ts @@ -1,6 +1,6 @@ import { CommandHandler, ICommandHandler } from '@nestjs/cqrs' import { CardsRepository } from '../../cards/infrastructure/cards.repository' -import { GetAllCardsInDeckDto } from '../../cards/dto/get-all-cards.dto' +import { GetAllCardsInDeckDto } from '../../cards/dto' import { ForbiddenException, NotFoundException } from '@nestjs/common' import { DecksRepository } from '../infrastructure/decks.repository' diff --git a/src/modules/decks/use-cases/get-all-decks-use-case.ts b/src/modules/decks/use-cases/get-all-decks-use-case.ts index 7c1072b..4bcaa8a 100644 --- a/src/modules/decks/use-cases/get-all-decks-use-case.ts +++ b/src/modules/decks/use-cases/get-all-decks-use-case.ts @@ -1,6 +1,6 @@ import { CommandHandler, ICommandHandler } from '@nestjs/cqrs' import { DecksRepository } from '../infrastructure/decks.repository' -import { GetAllDecksDto } from '../dto/get-all-decks.dto' +import { GetAllDecksDto } from '../dto' export class GetAllDecksCommand { constructor(public readonly params: GetAllDecksDto) {} diff --git a/src/modules/decks/use-cases/index.ts b/src/modules/decks/use-cases/index.ts index 9fd51e7..2e47db0 100644 --- a/src/modules/decks/use-cases/index.ts +++ b/src/modules/decks/use-cases/index.ts @@ -1,7 +1,9 @@ +export * from './create-card-use-case' export * from './create-deck-use-case' +export * from './delete-deck-by-id-use-case' +export * from './get-all-cards-in-deck-use-case' export * from './get-all-decks-use-case' export * from './get-deck-by-id-use-case' -export * from './delete-deck-by-id-use-case' +export * from './get-random-card-in-deck-use-case' +export * from './save-grade-use-case' export * from './update-deck-use-case' -export * from './get-all-cards-in-deck-use-case' -export * from './create-card-use-case' diff --git a/src/modules/decks/use-cases/update-deck-use-case.ts b/src/modules/decks/use-cases/update-deck-use-case.ts index ae6bc94..972382f 100644 --- a/src/modules/decks/use-cases/update-deck-use-case.ts +++ b/src/modules/decks/use-cases/update-deck-use-case.ts @@ -1,6 +1,6 @@ import { CommandHandler, ICommandHandler } from '@nestjs/cqrs' import { DecksRepository } from '../infrastructure/decks.repository' -import { UpdateDeckDto } from '../dto/update-deck.dto' +import { UpdateDeckDto } from '../dto' import { BadRequestException, NotFoundException } from '@nestjs/common' import { FileUploadService } from '../../../infrastructure/file-upload-service/file-upload.service' diff --git a/src/modules/users/api/users.controller.ts b/src/modules/users/api/users.controller.ts index 548d224..f027b15 100644 --- a/src/modules/users/api/users.controller.ts +++ b/src/modules/users/api/users.controller.ts @@ -12,7 +12,7 @@ import { import { UsersService } from '../services/users.service' import { CreateUserDto } from '../dto/create-user.dto' import { Pagination } from '../../../infrastructure/common/pagination/pagination.service' -import { BaseAuthGuard } from '../../auth/guards/base-auth.guard' +import { BaseAuthGuard } from '../../auth/guards' import { CommandBus } from '@nestjs/cqrs' import { CreateUserCommand } from '../../auth/use-cases'