Мой контроллер возвращает класс DTO моей сущности, но я делаю это через queryBuilder, потому что я добавляю еще одно значение (сумму) для выбора. Это выглядит так, и это работает, когда я использую .getRawMany ():
public async getBills(user: UserEntity, pageOptionsDto: BillsPageOptionsDto): Promise<BillsPageDto | undefined> {
const queryBuilder = this._billRepository.createQueryBuilder('bills');
const [bills, billsCount] = await queryBuilder
.leftJoinAndSelect('bills.currency', 'currency')
.where('bills.user = :user', { user: user.id })
.select(
(subQuery) =>
subQuery
.select(...),
'amountMoney',
)
.skip(pageOptionsDto.skip)
.take(pageOptionsDto.take)
.getManyAndCount();
const pageMetaDto = new PageMetaDto({
pageOptionsDto,
itemCount: billsCount,
});
return new BillsPageDto(bills.toDtos(), pageMetaDto);
}
Это значение, когда я возвращаю запрос, все делается правильно. Но я не могу добавить эту сумму к моему dto, потому что я не храню (и не хочу) эту сущность.
Bill.entity.ts:
@Entity({ name: 'bills' })
export class BillEntity extends AbstractEntity<BillDto> {
@Column({ unique: true, length: 26 })
accountBillNumber: string;
@ManyToOne(
() => CurrencyEntity,
(currency: CurrencyEntity) => currency.bill,
{
nullable: false,
onDelete: 'CASCADE',
},
)
currency: CurrencyEntity;
...
dtoClass = BillDto;
}
Bill .dto.ts:
export class BillDto extends AbstractDto {
@ApiProperty()
readonly accountBillNumber: string;
/* I need this:
@ApiProperty()
readonly accountMoney: number;
*/
@ApiProperty({ type: CurrencyDto })
readonly currency: CurrencyDto;
constructor(bill: BillEntity) {
super(bill);
/* i need this: this.accountMoney = ? */
this.accountBillNumber = bill.accountBillNumber;
this.currency = bill.currency.toDto();
}
}
Есть ли какое-нибудь решение для этого? Надеюсь, я достаточно четко это описал :)