Skip to content

Resource/DTO Mappers

  • import: @azure-net/kit/infra
  • Preferred location: src/app/contexts/{ContextName}/infrastructure/http/dto

Базовый класс для наследования при создании ресурсов и DTO-мапперов. Имеет встроенный метод toPlainObject, исключающий методы из класса. Для использования таких методов, как mapCollectionUsing и mapUsing у ResponseBuilder, вам требуется наследоваться от этого класса и выполнять все трансформации и вызовы методов в конструкторе. Само преобразование с помощью этого метода ResponseBuilder выполняет самостоятельно

DTOMapper

typescript
import { DTOMapper } from '@azure-net/kit/infra';

interface IUser {
    id: number;
    name: string;
    email: string;
}

interface IMappedUser {
    id: number;
    firstName: string;
    lastName: string;
    email: string;
    status: number;
    fullName: string;
}

// Вы можете не передавать интерфейс в DTOMapper, но тогда toPlainObject вернет PlainObject<UserDTO>
// PlainObject<UserDTO> будет просто состоять из ключей вашего класса без методов.
class UserDTO extends DTOMapper<IMappedUser> {
    id: number;
    name: string;
    lastName: string;
    email: string;
    status: number;
    fullName: string;

    constructor(data: IUser) {
        super();
        this.id = data.id;
        this.name = data.name;
        this.lastName = 'SomeTestLastname';
        this.email = data.email;
        this.status = 1;
        // все обработки вызываем в конструкторе
        this.fullName = this.getFullName();
    }

    getFullName() {
        return `${this.name} ${this.lastName}`;
    }
}

const userDto = new UserDTO(userData); // Наш DTO
const plain = userDto.toPlainObject(); // getFullName не включается в PlainObject, так как это метод