using MediatR; using ReC.Application.Common.Exceptions; using ReC.Application.Common.Interfaces; using ReC.Application.RecActions.Commands; using ReC.Application.Results.Commands; using ReC.Domain.Constants; using System.Text.Json; namespace ReC.Application.Common.Behaviors.InvokeAction; public class PostprocessingBehavior(IRecDbContext context, ISender sender) : IPipelineBehavior { public async Task Handle(InvokeRecActionViewCommand request, RequestHandlerDelegate next, CancellationToken cancel) { await next(cancel); try { if (request.Action.PostprocessingQuery is string query) { var result = await context.ExecuteDynamicSqlAsync(query, cancel); var info = JsonSerializer.Serialize(result); await sender.Send(new InsertResultCommand() { ActionId = request.Action.Id, Info = info, Type = ResultType.Post }, cancel); } } catch (Exception ex) { var error = ex.ToString(); await sender.Send(new InsertResultCommand() { ActionId = request.Action.Id, Error = error, Type = ResultType.Post }, cancel); if (request.Action.ErrorAction == ErrorAction.Stop) throw new RecActionException(request.Action.Id, request.Action.ProfileId, ex); } return Unit.Value; } }