Skip to content
This repository has been archived by the owner on Feb 16, 2024. It is now read-only.

Commit

Permalink
refactor: create entity classes with automap properties
Browse files Browse the repository at this point in the history
  • Loading branch information
relby committed Feb 4, 2024
1 parent 8e71a9d commit c6dd6ea
Show file tree
Hide file tree
Showing 71 changed files with 539 additions and 490 deletions.
4 changes: 2 additions & 2 deletions src/api/api.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,20 @@ import { UserItemProfile } from './profiles/user-item.profile';
import { TradesController } from './controllers/trades.controller';
import { TradesModule } from 'src/infra/ioc/core-modules/trades.module';
import { TradeProfile } from './profiles/trade.profile';
import { pojos } from '@automapper/pojos';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { CentrifugoModule } from 'src/infra/centrifugo/centrifugo.module';
import { CentrifugoController } from './controllers/centrifugo.controller';
import { RefreshTokenAuthStrategy } from './strategies/refresh-token-auth.strategy';
import { CronJobsModule } from 'src/infra/cron-jobs/cron-jobs.module';
import { classes } from '@automapper/classes';

@Module({
imports: [
JwtModule.register({
global: true,
}),
AutomapperModule.forRoot({
strategyInitializer: pojos(),
strategyInitializer: classes(),
}),
PassportModule,

Expand Down
8 changes: 4 additions & 4 deletions src/api/controllers/auth.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { LoginUserInputDTO } from '../dtos/auth/login-user.input.dto';
import { RegisterUserInputDTO } from '../dtos/auth/register-user.input.dto';
import { RegisterUserOutputDTO } from '../dtos/auth/register-user.output.dto';
import { ApiCreatedResponse, ApiOkResponse, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { UserEntity } from 'src/infra/postgres/tables';
import { UserEntity } from 'src/core/entities/user.entity';
import { InjectMapper } from '@automapper/nestjs';
import { Mapper } from '@automapper/core';
import { UserOutputDTO } from '../dtos/users/user.output.dto';
Expand Down Expand Up @@ -36,7 +36,7 @@ export class AuthController {
const { accessToken, refreshToken } = await this.authService.loginUser(user);

return {
user: this.mapper.map<UserEntity, UserOutputDTO>(user, 'UserEntity', 'UserOutputDTO'),
user: this.mapper.map(user, UserEntity, UserOutputDTO),
accessToken,
refreshToken,
};
Expand All @@ -50,7 +50,7 @@ export class AuthController {
const { user, accessToken, refreshToken } = await this.authService.registerUser(dto);

return {
user: this.mapper.map<UserEntity, UserOutputDTO>(user, 'UserEntity', 'UserOutputDTO'),
user: this.mapper.map(user, UserEntity, UserOutputDTO),
accessToken,
refreshToken,
};
Expand Down Expand Up @@ -82,7 +82,7 @@ export class AuthController {
} = await this.authService.refreshTokens(user, oldRefreshToken);

return {
user: this.mapper.map<UserEntity, UserOutputDTO>(user, 'UserEntity', 'UserOutputDTO'),
user: this.mapper.map(user, UserEntity, UserOutputDTO),
accessToken,
refreshToken: newRefreshToken,
};
Expand Down
2 changes: 1 addition & 1 deletion src/api/controllers/centrifugo.controller.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Controller, HttpCode, HttpStatus, Post, UseGuards } from '@nestjs/common';
import { CentrifugoService } from 'src/infra/centrifugo/centrifugo.service';
import { User } from '../decorators/user.decorator';
import { UserEntity } from 'src/infra/postgres/tables';
import { UserEntity } from 'src/core/entities/user.entity';
import { AccessTokenAuthGuard } from '../guards/access-token-auth.guard';
import { ApiCreatedResponse, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { GenerateCentrifugoConnectionTokenOutputDTO } from '../dtos/centrifugo/generate-centrifugo-connection-token.output.dto';
Expand Down
22 changes: 12 additions & 10 deletions src/api/controllers/packs.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import { PackWithPokemonsOutputDTO } from '../dtos/packs/pack-with-pokemons.outp
import { OpenedPackOutputDTO } from '../dtos/packs/opened-pack.output.dto';
import { PaginationInputDTO } from '../dtos/pagination.input.dto';
import { mapPaginatedArray } from 'src/common/helpers/map-paginated-array.helper';
import { OpenedPackEntity, PackEntity, UserEntity } from 'src/infra/postgres/tables';
import { OpenedPackEntity } from 'src/core/entities/opened-pack.entity';
import { PackEntity} from 'src/core/entities/pack.entity';
import { UserEntity } from 'src/core/entities/user.entity';
import { GetPacksInputDTO } from '../dtos/packs/get-packs.input.dto';
import { ApiOkResponseWithPagination } from '../decorators/api-ok-response-with-pagination.decorator';

Expand All @@ -35,11 +37,11 @@ export class PacksController {
): Promise<PaginatedArray<PackOutputDTO>> {
const packs = await this.packsService.getPacksWithPagination(dto, paginationDTO);

return mapPaginatedArray<PackEntity, PackOutputDTO>(
return mapPaginatedArray(
this.mapper,
packs,
'PackEntity',
'PackOutputDTO',
PackEntity,
PackOutputDTO,
)
}

Expand All @@ -53,10 +55,10 @@ export class PacksController {
): Promise<PackWithPokemonsOutputDTO> {
const pack = await this.packsService.getPackById(id);

return this.mapper.map<PackEntity, PackWithPokemonsOutputDTO>(
return this.mapper.map(
pack,
'PackEntity',
'PackOutputDTO',
PackEntity,
PackWithPokemonsOutputDTO,
);
}

Expand All @@ -72,10 +74,10 @@ export class PacksController {
): Promise<OpenedPackOutputDTO> {
const openedPack = await this.packsService.openPackById(user, id);

return this.mapper.map<OpenedPackEntity, OpenedPackOutputDTO>(
return this.mapper.map(
openedPack,
'OpenedPackEntity',
'OpenedPackOutputDTO'
OpenedPackEntity,
OpenedPackOutputDTO,
);
}
}
27 changes: 14 additions & 13 deletions src/api/controllers/trades.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { Body, Controller, Param, ParseUUIDPipe, Post, UseGuards } from '@nestjs
import { ApiCreatedResponse, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { UUIDv4 } from 'src/common/types';
import { PendingTradesService } from 'src/core/services/pending-trades.service';
import { AcceptedTradeEntity, CancelledTradeEntity, PendingTradeEntity, RejectedTradeEntity, UserEntity } from 'src/infra/postgres/tables';
import { AcceptedTradeEntity, CancelledTradeEntity, PendingTradeEntity, RejectedTradeEntity} from 'src/core/entities/trade.entity';
import { UserEntity } from 'src/core/entities/user.entity';
import { User } from '../decorators/user.decorator';
import { AcceptedTradeOutputDTO } from '../dtos/accepted-trades/accepted-trade.output.dto';
import { CancelledTradeOuputDTO } from '../dtos/cancelled-trades/cancelled-trade.output.dto';
Expand Down Expand Up @@ -33,10 +34,10 @@ export class TradesController {
): Promise<PendingTradeOutputDTO> {
const pendingTrade = await this.pendingTradesService.createPendingTrade(user, dto);

return this.mapper.map<PendingTradeEntity, PendingTradeOutputDTO>(
return this.mapper.map(
pendingTrade,
'PendingTradeEntity',
'PendingTradeOutputDTO',
PendingTradeEntity,
PendingTradeOutputDTO,
);
}

Expand All @@ -50,10 +51,10 @@ export class TradesController {
) {
const cancelledTrade = await this.pendingTradesService.cancelPendingTradeById(user, id)

return this.mapper.map<CancelledTradeEntity, CancelledTradeOuputDTO>(
return this.mapper.map(
cancelledTrade,
'CancelledTradeEntity',
'CancelledTradeOuputDTO',
CancelledTradeEntity,
CancelledTradeOuputDTO,
);
}

Expand All @@ -67,10 +68,10 @@ export class TradesController {
) {
const acceptedTrade = await this.pendingTradesService.acceptPendingTradeById(user, id);

return this.mapper.map<AcceptedTradeEntity, AcceptedTradeOutputDTO>(
return this.mapper.map(
acceptedTrade,
'AcceptedTradeEntity',
'AcceptedTradeOutputDTO',
AcceptedTradeEntity,
AcceptedTradeOutputDTO,
);
}

Expand All @@ -84,10 +85,10 @@ export class TradesController {
) {
const rejectedTrade = await this.pendingTradesService.rejectPendingTradeById(user, id);

return this.mapper.map<RejectedTradeEntity, RejectedTradeOutputDTO>(
return this.mapper.map(
rejectedTrade,
'RejectedTradeEntity',
'RejectedTradeOutputDTO'
RejectedTradeEntity,
RejectedTradeOutputDTO,
);
}
}
30 changes: 11 additions & 19 deletions src/api/controllers/users.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ import { GetUsersInputDTO } from '../dtos/users/get-users.input.dto';
import { UserItemsService } from 'src/core/services/user-items.service';
import { UserItemOutputDTO } from '../dtos/user-items/user-item.output.dto';
import { QuickSoldUserItemOutputDTO } from '../dtos/user-items/quick-sold-user-item.output.dto';
import { QuickSoldUserItemEntity, UserEntity, UserItemEntity } from 'src/infra/postgres/tables';
import { QuickSoldUserItemEntity } from 'src/core/entities/quick-sold-user-item.entity';
import { UserEntity } from 'src/core/entities/user.entity';
import { UserItemEntity } from 'src/core/entities/user-item.entity';

@ApiTags('Users')
@Controller('users')
Expand All @@ -37,25 +39,15 @@ export class UsersController {
): Promise<PaginatedArray<UserOutputDTO>> {
const users = await this.usersService.getUsersWithPagination(dto, paginationDTO);

this.mapper.mapArray
return mapPaginatedArray<UserEntity, UserOutputDTO>(
this.mapper,
users,
'UserEntity',
'UserOutputDTO',
)
return mapPaginatedArray(this.mapper, users, UserEntity, UserOutputDTO);
}

@ApiOkResponse({ type: UserOutputDTO })
@ApiSecurity('AccessToken')
@Get('me')
@UseGuards(AccessTokenAuthGuard)
public async getMe(@User() user: UserEntity): Promise<UserOutputDTO> {
return this.mapper.map<UserEntity, UserOutputDTO>(
user,
'UserEntity',
'UserOutputDTO',
);
return this.mapper.map(user, UserEntity, UserOutputDTO);
}

@ApiOkResponseWithPagination({ type: UserItemOutputDTO })
Expand All @@ -68,11 +60,11 @@ export class UsersController {
): Promise<PaginatedArray<UserItemOutputDTO>> {
const userItemsWithPagination = await this.userItemsService.getUserItemsWithPaginationByUser(user, paginationDto);

return mapPaginatedArray<UserItemEntity, UserItemOutputDTO>(
return mapPaginatedArray(
this.mapper,
userItemsWithPagination,
'UserItemEntity',
'UserItemOutputDTO',
UserItemEntity,
UserItemOutputDTO,
);
}

Expand All @@ -86,10 +78,10 @@ export class UsersController {
): Promise<QuickSoldUserItemOutputDTO> {
const quickSoldUserItem = await this.userItemsService.quickSellUserItemById(user, id);

return this.mapper.map<QuickSoldUserItemEntity, QuickSoldUserItemOutputDTO>(
return this.mapper.map(
quickSoldUserItem,
'QuickSoldUserItemEntity',
'QuickSoldUserItemOutputDTO',
QuickSoldUserItemEntity,
QuickSoldUserItemOutputDTO,
);
}
}
2 changes: 2 additions & 0 deletions src/api/dtos/accepted-trades/accepted-trade.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ApiProperty, OmitType } from '@nestjs/swagger';
import { TradeOutputDTO } from '../trades/trade.output.dto';
import { AutoMap } from '@automapper/classes';

export class AcceptedTradeOutputDTO extends OmitType(TradeOutputDTO, [
'status',
]) {
@ApiProperty()
@AutoMap()
status: 'ACCEPTED';
}
2 changes: 2 additions & 0 deletions src/api/dtos/cancelled-trades/cancelled-trade.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ApiProperty, OmitType } from '@nestjs/swagger';
import { TradeOutputDTO } from '../trades/trade.output.dto';
import { AutoMap } from '@automapper/classes';

export class CancelledTradeOuputDTO extends OmitType(TradeOutputDTO, [
'status',
]) {
@ApiProperty()
@AutoMap()
status: 'CANCELLED';
}
6 changes: 6 additions & 0 deletions src/api/dtos/packs/opened-pack.output.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,26 @@ import { UUIDv4 } from 'src/common/types';
import { PokemonOutputDTO } from '../pokemons/pokemon.output.dto';
import { UserOutputDTO } from '../users/user.output.dto';
import { PackOutputDTO } from './pack.output.dto';
import { AutoMap } from '@automapper/classes';

export class OpenedPackOutputDTO {
@ApiProperty()
@AutoMap()
public readonly id: UUIDv4;

@ApiProperty()
@AutoMap()
public readonly openedAt: Date;

@ApiProperty({ type: UserOutputDTO })
@AutoMap(() => UserOutputDTO)
public readonly user: UserOutputDTO;

@ApiProperty({ type: PackOutputDTO })
@AutoMap(() => PackOutputDTO)
public readonly pack: PackOutputDTO;

@ApiProperty({ type: PokemonOutputDTO })
@AutoMap(() => PokemonOutputDTO)
public readonly pokemon: PokemonOutputDTO;
}
2 changes: 2 additions & 0 deletions src/api/dtos/packs/pack-with-pokemons.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { ApiProperty } from '@nestjs/swagger';
import { PokemonOutputDTO } from '../pokemons/pokemon.output.dto';
import { PackOutputDTO } from './pack.output.dto';
import { AutoMap } from '@automapper/classes';

export class PackWithPokemonsOutputDTO extends PackOutputDTO {
@ApiProperty({ type: PokemonOutputDTO, isArray: true })
@AutoMap(() => [PokemonOutputDTO])
public readonly pokemons: Array<PokemonOutputDTO>;
}
6 changes: 6 additions & 0 deletions src/api/dtos/packs/pack.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
import { AutoMap } from "@automapper/classes";
import { ApiProperty } from "@nestjs/swagger";
import { UUIDv4 } from "src/common/types";

export class PackOutputDTO {
@ApiProperty()
@AutoMap()
public readonly id: UUIDv4;

@ApiProperty()
@AutoMap()
public readonly name: string;

@ApiProperty()
@AutoMap()
public readonly description: string;

@ApiProperty()
@AutoMap()
public readonly price: number;

// NOTE: URL
@ApiProperty()
@AutoMap()
public readonly image: string;
}
2 changes: 2 additions & 0 deletions src/api/dtos/pending-trades/pending-trade.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ApiProperty, OmitType } from '@nestjs/swagger';
import { TradeOutputDTO } from '../trades/trade.output.dto';
import { AutoMap } from '@automapper/classes';

export class PendingTradeOutputDTO extends OmitType(TradeOutputDTO, [
'status',
]) {
@ApiProperty()
@AutoMap()
status: 'PENDING';
}
7 changes: 7 additions & 0 deletions src/api/dtos/pokemons/pokemon.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
import { AutoMap } from '@automapper/classes';
import { ApiProperty } from '@nestjs/swagger';

export class PokemonOutputDTO {
@ApiProperty()
@AutoMap()
public readonly id: number;

@ApiProperty()
@AutoMap()
public readonly name: string;

@ApiProperty()
@AutoMap()
public readonly worth: number;

@ApiProperty()
@AutoMap()
public readonly height: number;

@ApiProperty()
@AutoMap()
public readonly weight: number;

@ApiProperty()
@AutoMap()
public readonly image: string;
}
2 changes: 2 additions & 0 deletions src/api/dtos/rejected-trades/rejected-trade.output.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ApiProperty, OmitType } from '@nestjs/swagger';
import { TradeOutputDTO } from '../trades/trade.output.dto';
import { AutoMap } from '@automapper/classes';

export class RejectedTradeOutputDTO extends OmitType(TradeOutputDTO, [
'status',
]) {
@ApiProperty()
@AutoMap()
status: 'REJECTED';
}
Loading

0 comments on commit c6dd6ea

Please sign in to comment.