< Summary

Information
Class: LGDXRobotCloud.API.Services.Automation.TriggerRetryService
Assembly: LGDXRobotCloud.API
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Services/Automation/TriggerRetryService.cs
Line coverage
69%
Covered lines: 69
Uncovered lines: 30
Coverable lines: 99
Total lines: 140
Line coverage: 69.6%
Branch coverage
50%
Covered branches: 10
Total branches: 20
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%66100%
GetTriggerRetriesAsync()100%11100%
GetTriggerRetryAsync()100%22100%
DeleteTriggerRetryAsync()100%210%
RetryTriggerRetryAsync()62.5%8885.71%
RetryAllFailedTriggerAsync()0%2040%

File(s)

/builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Services/Automation/TriggerRetryService.cs

#LineLine coverage
 1using LGDXRobotCloud.API.Exceptions;
 2using LGDXRobotCloud.API.Services.Administration;
 3using LGDXRobotCloud.Data.DbContexts;
 4using LGDXRobotCloud.Data.Entities;
 5using LGDXRobotCloud.Data.Models.Business.Administration;
 6using LGDXRobotCloud.Data.Models.Business.Automation;
 7using LGDXRobotCloud.Utilities.Enums;
 8using LGDXRobotCloud.Utilities.Helpers;
 9using Microsoft.EntityFrameworkCore;
 10
 11namespace LGDXRobotCloud.API.Services.Automation;
 12
 13public interface ITriggerRetryService
 14{
 15  Task<(IEnumerable<TriggerRetryListBusinessModel>, PaginationHelper)> GetTriggerRetriesAsync(int pageNumber, int pageSi
 16  Task<TriggerRetryBusinessModel> GetTriggerRetryAsync(int triggerRetryId);
 17  Task<bool> DeleteTriggerRetryAsync(int triggerRetryId);
 18  Task RetryTriggerRetryAsync(int triggerRetryId);
 19  Task RetryAllFailedTriggerAsync(int triggerId);
 20}
 21
 522public class TriggerRetryService (
 523  IActivityLogService activityService,
 524  ITriggerService triggerService,
 525  LgdxContext context
 526) : ITriggerRetryService
 27{
 528  private readonly IActivityLogService _activityService = activityService ?? throw new ArgumentNullException(nameof(acti
 529  private readonly ITriggerService _triggerService = triggerService ?? throw new ArgumentNullException(nameof(triggerSer
 530  private readonly LgdxContext _context = context ?? throw new ArgumentNullException(nameof(context));
 31
 32  public async Task<(IEnumerable<TriggerRetryListBusinessModel>, PaginationHelper)> GetTriggerRetriesAsync(int pageNumbe
 133  {
 134    var triggerRetries = await _context.TriggerRetries.AsNoTracking()
 135      .Include(tr => tr.Trigger)
 136      .Include(tr => tr.AutoTask)
 137      .AsSplitQuery()
 138      .Select(tr => new TriggerRetryListBusinessModel {
 139        Id = tr.Id,
 140        TriggerId = tr.TriggerId,
 141        TriggerName = tr.Trigger.Name,
 142        AutoTaskId = tr.AutoTaskId,
 143        AutoTaskName = tr.AutoTask.Name,
 144        CreatedAt = tr.CreatedAt
 145      })
 146      .OrderBy(t => t.Id)
 147      .Skip(pageSize * (pageNumber - 1))
 148      .Take(pageSize)
 149      .ToListAsync();
 150      var itemCount = triggerRetries.Count;
 151      var PaginationHelper = new PaginationHelper(itemCount, pageNumber, pageSize);
 152      return (triggerRetries, PaginationHelper);
 153  }
 54
 55  public async Task<TriggerRetryBusinessModel> GetTriggerRetryAsync(int triggerRetryId)
 256  {
 257    TriggerRetry triggerRetry = await _context.TriggerRetries.AsNoTracking()
 258      .Where(tr => tr.Id == triggerRetryId)
 259      .Include(tr => tr.Trigger)
 260      .Include(tr => tr.AutoTask)
 261      .FirstOrDefaultAsync() ?? throw new LgdxNotFound404Exception();
 62
 163    int SameTriggerFailed = await _context.TriggerRetries.AsNoTracking()
 164      .Where(tr => tr.TriggerId == triggerRetry.TriggerId)
 165      .CountAsync();
 66
 167    return new TriggerRetryBusinessModel {
 168      Id = triggerRetry.Id,
 169      TriggerId = triggerRetry.TriggerId,
 170      TriggerName = triggerRetry.Trigger.Name,
 171      TriggerUrl = triggerRetry.Trigger.Url,
 172      TriggerHttpMethodId = triggerRetry.Trigger.HttpMethodId,
 173      AutoTaskId = triggerRetry.AutoTaskId,
 174      AutoTaskName = triggerRetry.AutoTask.Name,
 175      Body = triggerRetry.Body,
 176      SameTriggerFailed = SameTriggerFailed,
 177      CreatedAt = triggerRetry.CreatedAt
 178    };
 179  }
 80
 81  public async Task<bool> DeleteTriggerRetryAsync(int triggerRetryId)
 082  {
 083    return await _context.TriggerRetries.Where(tr => tr.Id == triggerRetryId)
 084      .ExecuteDeleteAsync() >= 1;
 085  }
 86
 87  public async Task RetryTriggerRetryAsync(int triggerRetryId)
 288  {
 289    var triggerRetry = await _context.TriggerRetries.AsNoTracking()
 290      .Where(tr => tr.Id == triggerRetryId)
 291      .FirstOrDefaultAsync() ?? throw new LgdxNotFound404Exception();
 92
 193    var autoTask = await _context.AutoTasks.AsNoTracking()
 194      .Where(at => at.Id == triggerRetry.AutoTaskId)
 195      .FirstOrDefaultAsync() ?? throw new LgdxValidation400Expection(nameof(triggerRetry.AutoTaskId), "AutoTask ID is in
 96
 197    var trigger = await _context.Triggers.AsNoTracking()
 198      .Where(t => t.Id == triggerRetry.TriggerId)
 199      .FirstOrDefaultAsync() ?? throw new LgdxValidation400Expection(nameof(triggerRetry.TriggerId), "Trigger ID is inva
 100
 1101    if (await _triggerService.RetryTriggerAsync(autoTask, trigger, triggerRetry.Body))
 0102    {
 0103      await DeleteTriggerRetryAsync(triggerRetryId);
 0104    }
 105
 1106    await _activityService.CreateActivityLogAsync(new ActivityLogCreateBusinessModel
 1107    {
 1108      EntityName = nameof(Trigger),
 1109      EntityId = trigger.Id.ToString(),
 1110      Action = ActivityAction.TriggerRetry,
 1111    });
 1112  }
 113
 114  public async Task RetryAllFailedTriggerAsync(int triggerId)
 0115  {
 0116    var triggerRetries = await _context.TriggerRetries
 0117      .Where(tr => tr.TriggerId == triggerId)
 0118      .Include(tr => tr.Trigger)
 0119      .Include(tr => tr.AutoTask)
 0120      .AsSplitQuery()
 0121      .ToListAsync();
 122
 0123    foreach (var tr in triggerRetries)
 0124    {
 0125      if (await _triggerService.RetryTriggerAsync(tr.AutoTask, tr.Trigger, tr.Body))
 0126      {
 0127        _context.TriggerRetries.Remove(tr);
 0128      }
 0129    }
 0130    _context.SaveChanges();
 131
 0132    await _activityService.CreateActivityLogAsync(new ActivityLogCreateBusinessModel
 0133    {
 0134      EntityName = nameof(Trigger),
 0135      EntityId = triggerId.ToString(),
 0136      Action = ActivityAction.TriggerRetry,
 0137      Note = $"Batch retry for {triggerRetries.Count} requests."
 0138    });
 0139  }
 140}