ObjectClass

Classe utilitária para requests, responses e entidades com factory from().

ObjectClass é uma classe base leve usada em requests de create, em ReadManyPersonResponse e em entidades (EntityBase). Ela oferece o método estático from() para construir instâncias a partir de objetos literais.

typescript
// src/core/base/object-class.ts
export type ObjectClassProps<T> = {
  [K in keyof T as T[K] extends Function ? never : K]: T[K];
};

export abstract class ObjectClass<T = object> {
  declare protected readonly _propsType?: ObjectClassProps<T>;

  static from<This extends new () => object>(
    this: This,
    props: ObjectClassProps<InstanceType<This>>,
  ): InstanceType<This> {
    return Object.assign(new this(), props) as InstanceType<This>;
  }
}

Requests de criação estendem ObjectClass e combinam decoradores @AutoMap() e @ApiProperty():

typescript
export class CreatePersonRequest extends ObjectClass<CreatePersonRequest> {
  @ApiProperty({ example: 'John Doe' })
  @AutoMap()
  name: string;

  @ApiProperty({ type: CreatePersonAddressRequest })
  @AutoMap()
  address: CreatePersonAddressRequest;

  @ApiProperty({ type: CreatePersonContactRequest, isArray: true })
  @AutoMap({ type: () => CreatePersonContactRequest })
  contacts: CreatePersonContactRequest[];
}

Responses de listagem usam ListResponseBase (já traz items/count e o factory from()):

typescript
export class ReadManyPersonResponse extends ListResponseBase<ReadManyPersonResponseItem> {}

No handler, a resposta é montada com:

typescript
return ReadManyPersonResponse.from({
  items: result.items.map((item) =>
    AutoMapper.map(item, Person, ReadManyPersonResponseItem),
  ),
  count: result.count,
});

Entidades de domínio estendem EntityBase<T>, que herda de ObjectClass<T>. Isso mantém consistência entre camadas sem acoplar entidades TypeORM a requests HTTP.