261cba40ef
Closes : https://github.com/twentyhq/core-team-issues/issues/1622 To do in other PR : - Add migration command for non nullable text, raw_json & array fields - Add null transformation --------- Co-authored-by: Weiko <corentin@twenty.com>
95 lines
3.1 KiB
TypeScript
95 lines
3.1 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { type ObjectRecord } from 'twenty-shared/types';
|
|
|
|
import { WorkspaceAuthContext } from 'src/engine/api/common/interfaces/workspace-auth-context.interface';
|
|
|
|
import { CommonBaseQueryRunnerService } from 'src/engine/api/common/common-query-runners/common-base-query-runner.service';
|
|
import { CommonCreateManyQueryRunnerService } from 'src/engine/api/common/common-query-runners/common-create-many-query-runner/common-create-many-query-runner.service';
|
|
import { CommonBaseQueryRunnerContext } from 'src/engine/api/common/types/common-base-query-runner-context.type';
|
|
import { CommonExtendedQueryRunnerContext } from 'src/engine/api/common/types/common-extended-query-runner-context.type';
|
|
import {
|
|
CommonExtendedInput,
|
|
CommonInput,
|
|
CommonQueryNames,
|
|
CreateManyQueryArgs,
|
|
CreateOneQueryArgs,
|
|
} from 'src/engine/api/common/types/common-query-args.type';
|
|
import { assertIsValidUuid } from 'src/engine/api/graphql/workspace-query-runner/utils/assert-is-valid-uuid.util';
|
|
import { assertMutationNotOnRemoteObject } from 'src/engine/metadata-modules/object-metadata/utils/assert-mutation-not-on-remote-object.util';
|
|
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
|
|
|
|
@Injectable()
|
|
export class CommonCreateOneQueryRunnerService extends CommonBaseQueryRunnerService<
|
|
CreateOneQueryArgs,
|
|
ObjectRecord
|
|
> {
|
|
constructor(
|
|
private readonly commonCreateManyQueryRunnerService: CommonCreateManyQueryRunnerService,
|
|
) {
|
|
super();
|
|
}
|
|
|
|
protected readonly operationName = CommonQueryNames.CREATE_ONE;
|
|
|
|
async run(
|
|
args: CommonExtendedInput<CreateManyQueryArgs>,
|
|
queryRunnerContext: CommonExtendedQueryRunnerContext,
|
|
): Promise<ObjectRecord> {
|
|
const result = await this.commonCreateManyQueryRunnerService.run(
|
|
{
|
|
...args,
|
|
data: [args.data],
|
|
},
|
|
queryRunnerContext,
|
|
);
|
|
|
|
return result[0];
|
|
}
|
|
|
|
async computeArgs(
|
|
args: CommonInput<CreateOneQueryArgs>,
|
|
queryRunnerContext: CommonBaseQueryRunnerContext,
|
|
): Promise<CommonInput<CreateOneQueryArgs>> {
|
|
const { authContext, objectMetadataItemWithFieldMaps } = queryRunnerContext;
|
|
|
|
const coercedData = await this.dataArgProcessor.process({
|
|
partialRecordInputs: [args.data],
|
|
authContext,
|
|
objectMetadataItemWithFieldMaps,
|
|
});
|
|
|
|
return {
|
|
...args,
|
|
data: coercedData[0],
|
|
};
|
|
}
|
|
|
|
async processQueryResult(
|
|
queryResult: ObjectRecord,
|
|
objectMetadataItemId: string,
|
|
objectMetadataMaps: ObjectMetadataMaps,
|
|
authContext: WorkspaceAuthContext,
|
|
): Promise<ObjectRecord> {
|
|
return this.commonResultGettersService.processRecord(
|
|
queryResult,
|
|
objectMetadataItemId,
|
|
objectMetadataMaps,
|
|
authContext.workspace.id,
|
|
);
|
|
}
|
|
|
|
async validate(
|
|
args: CommonInput<CreateOneQueryArgs>,
|
|
queryRunnerContext: CommonBaseQueryRunnerContext,
|
|
): Promise<void> {
|
|
const { objectMetadataItemWithFieldMaps } = queryRunnerContext;
|
|
|
|
assertMutationNotOnRemoteObject(objectMetadataItemWithFieldMaps);
|
|
|
|
if (args.data?.id) {
|
|
assertIsValidUuid(args.data.id);
|
|
}
|
|
}
|
|
}
|