Skip to content

Commit

Permalink
Merge pull request #13 from steroids/datamapper-array-support
Browse files Browse the repository at this point in the history
Поддержка массивов в DataMapper.create
  • Loading branch information
vkoktashev authored Jul 30, 2024
2 parents d772bb4 + a47cfcf commit feb7724
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/infrastructure/repositories/CrudRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ export class CrudRepository<TModel> implements ICrudRepository<TModel>, OnModule
throw new Error('Property modelClass is not set in repository: ' + this.constructor.name);
}

return DataMapper.create(this.modelClass, obj, TRANSFORM_TYPE_FROM_DB, true);
return DataMapper.create<TModel>(this.modelClass, obj as Partial<TModel>, TRANSFORM_TYPE_FROM_DB, true);
}

/**
Expand Down
29 changes: 26 additions & 3 deletions src/usecases/helpers/DataMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {isObject as _isObject} from 'lodash';
import {getFieldOptions, getMetaFields, isMetaClass} from '../../infrastructure/decorators/fields/BaseField';
import {IRelationFieldOptions} from '../../infrastructure/decorators/fields/RelationField';
import {DECORATORS} from '@nestjs/swagger/dist/constants';
import {DeepPartial} from '@steroidsjs/typeorm';
import {
getTransformCallbacks,
ITransformType,
Expand All @@ -11,15 +12,37 @@ import {
} from '../../infrastructure/decorators/Transform';
import {getModelBuilder} from '../../infrastructure/decorators/TableFromModel';
import {IType} from '../interfaces/IType';
import {DeepPartial} from "@steroidsjs/typeorm";

export class DataMapper {

static create<T>(MetaClass: IType<T>, values: DeepPartial<T>, transformType: ITransformType = TRANSFORM_TYPE_DEFAULT, skipBuilder = false): T {
static create<T>(
MetaClass: IType<T>,
values: Array<DeepPartial<T> | Partial<T>>,
transformType?: ITransformType,
skipBuilder?: boolean,
): T[];

static create<T>(
MetaClass: IType<T>,
values: DeepPartial<T> | Partial<T>,
transformType?: ITransformType,
skipBuilder?: boolean,
): T;

static create<T>(
MetaClass: IType<T>,
values: DeepPartial<T> | DeepPartial<T>[],
transformType: ITransformType = TRANSFORM_TYPE_DEFAULT,
skipBuilder = false,
): T | T[] {
// Check empty
if (values === null) {
return null;
}
if (Array.isArray(values)) {
return values.map((value) => (
this.create(MetaClass, value, transformType, skipBuilder)
));
}

const builder = !skipBuilder && getModelBuilder(MetaClass);
if (builder) {
Expand Down
2 changes: 1 addition & 1 deletion src/usecases/services/CrudService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,6 @@ export class CrudService<
if (!this.modelClass) {
throw new Error('Property modelClass is not set in service: ' + this.constructor.name);
}
return DataMapper.create(this.modelClass, dto as any);
return DataMapper.create(this.modelClass, dto);
}
}

0 comments on commit feb7724

Please sign in to comment.