Гнездо JS: добавить поле в DTO, в котором отсутствует сущность - PullRequest
0 голосов
/ 14 апреля 2020

Мой контроллер возвращает класс 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();
    }
}

Есть ли какое-нибудь решение для этого? Надеюсь, я достаточно четко это описал :)

...