in src/Epam.GraphQL/Savers/DbContextSaver.cs [26:66]
public static async ValueTask<object?> PerformManualMutationAndGetResult<TExecutionContext>(
SubmitInputTypeRegistry<TExecutionContext> submitInputTypeRegistry,
IEnumerable<object> entities,
Mutation<TExecutionContext> mutation,
IResolveFieldContext context,
ResolveOptions options)
{
var executionContext = (GraphQLContext<TExecutionContext>?)context.UserContext["ctx"];
Guards.AssertIfNull(executionContext);
var profiler = executionContext.Profiler;
using (profiler.Step(nameof(PerformManualMutationAndGetResult)))
{
var results = await SaveChangesAndReload(submitInputTypeRegistry, entities, context, options).ConfigureAwait(false);
var afterSaveEntities = await mutation.DoAfterSave(
context,
results
.SelectMany(result => result.ProcessedItems)
.Where(item => item.Payload != null)
.Select(item => item.Payload!)).ConfigureAwait(false);
var afterSaveResults = afterSaveEntities.Any()
? await SaveChangesAndReload(
submitInputTypeRegistry,
afterSaveEntities,
context,
DefaultOptions).ConfigureAwait(false)
: Enumerable.Empty<ISaveResult<TExecutionContext>>();
using (profiler.Step("Prepare output"))
{
results = results
.Concat(afterSaveResults)
.GroupBy(r => r.EntityType)
.Select(group => group.Aggregate((first, second) => first.Merge(second)));
return mutation.CreateSubmitOutput(ConvertItems(results));
}
}
}