< Summary - Syki

Information
Class: Syki.Back.Filters.DbContextTransactionFilter
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Filters/DbContextTransactionFilter.cs
Tag: 4_16869239191
Line coverage
58%
Covered lines: 10
Uncovered lines: 7
Coverable lines: 17
Total lines: 44
Line coverage: 58.8%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
.ctor(...)100%11100%
OnActionExecutionAsync()87.5%15853.33%

File(s)

/home/runner/work/syki/syki/Back/Filters/DbContextTransactionFilter.cs

#LineLine coverage
 1using ILogger = Serilog.ILogger;
 2using Microsoft.AspNetCore.Mvc.Filters;
 3
 4namespace Syki.Back.Filters;
 5
 6public class DbContextTransactionFilter : TypeFilterAttribute
 7{
 408    public DbContextTransactionFilter() : base(typeof(DbContextTransactionFilterImpl)) { }
 9
 202810    private class DbContextTransactionFilterImpl(SykiDbContext sykiDbContext, ILogger logger) : IAsyncActionFilter
 11    {
 12        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
 13        {
 202814            sykiDbContext.Database.AutoSavepointsEnabled = false;
 202815            await using var transaction = await sykiDbContext.Database.BeginTransactionAsync();
 16
 17            try
 18            {
 202819                var actionExecuted = await next();
 202820                if (actionExecuted.Result is BadRequestObjectResult || (actionExecuted.Exception != null && !actionExecu
 21                {
 6422                    await transaction.RollbackAsync();
 23                }
 24                else
 25                {
 196426                    await transaction.CommitAsync();
 27                }
 202828            }
 029            catch (Exception)
 30            {
 31                try
 32                {
 033                    await transaction.RollbackAsync();
 034                }
 035                catch (Exception ex)
 36                {
 037                    logger.Error("Rollback Error -> {Message}", ex.Message);
 038                }
 39
 040                throw;
 41            }
 202842        }
 43    }
 44}