UNPKG

kapix-typegraphql-prisma

Version:

![integration logo](https://raw.githubusercontent.com/MichalLytek/typegraphql-prisma/main/img/integration.png)

143 lines 7.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCrudResolverClassMethodDeclaration = void 0; const ts_morph_1 = require("ts-morph"); const types_1 = require("../dmmf/types"); const imports_1 = require("../imports"); function generateCrudResolverClassMethodDeclaration(action, mapping, dmmfDocument, generatorOptions, hasGeom) { const isFindMany = action.kind === types_1.DMMF.ModelAction.findMany; const listResultName = (0, imports_1.getListResultTypeName)(mapping.modelTypeName); return { name: action.name, isAsync: true, returnType: `Promise<${isFindMany ? listResultName : action.returnTSType}>`, decorators: [ { name: `TypeGraphQL.${action.operation}`, arguments: [ `_returns => ${isFindMany ? listResultName : action.typeGraphQLType}`, ts_morph_1.Writers.object({ nullable: `${!action.method.isRequired}`, }), ], }, ], parameters: [ { name: "ctx", // TODO: import custom `ContextType` type: "any", decorators: [{ name: "TypeGraphQL.Ctx", arguments: [] }], }, { name: "info", type: "GraphQLResolveInfo", decorators: [{ name: "TypeGraphQL.Info", arguments: [] }], }, ...(!action.argsTypeName ? [] : [ { name: "args", type: action.argsTypeName, decorators: [ { name: "TypeGraphQL.Args", arguments: generatorOptions.emitRedundantTypesInfo ? [`_type => ${action.argsTypeName}`] : [], }, ], }, ]), ], statements: action.kind === types_1.DMMF.ModelAction.aggregate ? [ /* ts */ ` await onIntercept('${mapping.modelName}', '${action.name}', 'onBefore', '${action.prismaMethod}', ctx, args) const prisma = getPrismaFromContext(ctx) const result = prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...transformInfoIntoPrismaArgs(info) }) const afterInterceptResult = await onIntercept('${mapping.modelName}', '${action.name}', 'onAfter', '${action.prismaMethod}', ctx, args, result) return afterInterceptResult ?? result`, ] : action.kind === types_1.DMMF.ModelAction.groupBy ? [ /* ts */ ` const { _count, _avg, _sum, _min, _max } = transformInfoIntoPrismaArgs(info) await onIntercept('${mapping.modelName}', '${action.name}', 'onBefore', '${action.prismaMethod}', ctx, args) const prisma = getPrismaFromContext(ctx) const result = prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...Object.fromEntries( Object.entries({ _count, _avg, _sum, _min, _max }).filter(([_, v]) => v != null) ) }) const afterInterceptResult = await onIntercept('${mapping.modelName}', '${action.name}', 'onAfter', '${action.prismaMethod}', ctx, args, result) return afterInterceptResult ?? result`, ] : isFindMany ? [ /* ts */ ` const selector = transformInfoIntoPrismaArgs(info) const { items, count } = selector await onIntercept('${mapping.modelName}', '${action.name}', 'onBefore', '${action.prismaMethod}', ctx, args) const prisma = getPrismaFromContext(ctx) let result, countResult ${hasGeom ? `const [idWithDistance, take] = await applyGeomPointFilter(geomFieldsList, args, '${mapping.modelName}', 'id', prisma)` : ""} if (items && count) { [result, countResult] = await prisma.$transaction([ prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...(items._count && transformCountFieldIntoSelectRelationsCount(items._count)) }), prisma.${mapping.collectionName}.count({ where: args.where }) ]); } ${hasGeom ? `else if (count && idWithDistance) { [result, countResult] = await prisma.$transaction([ prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...(selector._count && transformCountFieldIntoSelectRelationsCount(selector._count)) }), prisma.${mapping.collectionName}.count({ where: args.where }) ]); }` : ""} else if (items) { result = await prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...(items._count && transformCountFieldIntoSelectRelationsCount(items._count)) }) } else if (count) { countResult = await prisma.${mapping.collectionName}.count({ where: args.where }) } ${hasGeom ? "result = filterGeomByIds(idWithDistance, result, args, take);" : ""} const afterInterceptResult = await onIntercept('${mapping.modelName}', '${action.name}', 'onAfter', '${action.prismaMethod}', ctx, args, result) return { items: afterInterceptResult ?? result, count: countResult }`, ] : [ /* ts */ ` const { _count } = transformInfoIntoPrismaArgs(info) await onIntercept('${mapping.modelName}', '${action.name}', 'onBefore', '${action.prismaMethod}', ctx, args) const prisma = getPrismaFromContext(ctx) const result = await prisma.${mapping.collectionName}.${action.prismaMethod}({ ...args, ...(_count && transformCountFieldIntoSelectRelationsCount(_count)) }) ${hasGeom && (action.kind === types_1.DMMF.ModelAction.createOne || action.kind === types_1.DMMF.ModelAction.updateOne) ? `await updateGeomFields(result.id, args, prisma, '${mapping.modelName}', geomFieldsList)` : ""} const afterInterceptResult = await onIntercept('${mapping.modelName}', '${action.name}', 'onAfter', '${action.prismaMethod}', ctx, args, result) return afterInterceptResult ?? result`, ], }; } exports.generateCrudResolverClassMethodDeclaration = generateCrudResolverClassMethodDeclaration; //# sourceMappingURL=helpers.js.map