< Summary

Information
Class: OzonDomains.Models.OrderReturnSyncRun
Assembly: OzonDomains
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonDomains/Models/OrderReturnSyncRun.cs
Line coverage
100%
Covered lines: 16
Uncovered lines: 0
Coverable lines: 16
Total lines: 83
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Id()100%11100%
get_TriggerType()100%11100%
get_Status()100%11100%
get_OzonClientId()100%11100%
get_FromDate()100%11100%
get_ToDate()100%11100%
get_Incremental()100%11100%
get_Processed()100%11100%
get_Inserted()100%11100%
get_StatusChanged()100%11100%
get_LinkedOrders()100%11100%
get_ErrorCount()100%11100%
get_ErrorMessage()100%11100%
get_StartedAtUtc()100%11100%
get_CompletedAtUtc()100%11100%
get_DurationMs()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonDomains/Models/OrderReturnSyncRun.cs

#LineLine coverage
 1using System.ComponentModel.DataAnnotations;
 2using System.ComponentModel.DataAnnotations.Schema;
 3
 4namespace OzonDomains.Models;
 5
 6/// <summary>
 7/// История прогонов загрузки возвратов Ozon. До её появления единственным следом прогона была
 8/// строка результата в Hangfire и сообщение в Telegram: ответить на вопрос «когда возвраты
 9/// грузились последний раз и что тогда пришло» было нечем.
 10/// </summary>
 11[Table("OrderReturnSyncRuns")]
 12public class OrderReturnSyncRun
 13{
 14    [Key]
 15    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 516    public long Id { get; set; }
 17
 18    /// <summary>Что запустило прогон: <see cref="OrderReturnSyncTrigger"/>.</summary>
 19    [Required]
 20    [MaxLength(32)]
 2221    public string TriggerType { get; set; } = OrderReturnSyncTrigger.Incremental;
 22
 23    /// <summary>Состояние прогона: <see cref="OrderReturnSyncRunStatus"/>.</summary>
 24    [Required]
 25    [MaxLength(32)]
 3226    public string Status { get; set; } = OrderReturnSyncRunStatus.Running;
 27
 28    /// <summary>Клиент Ozon или 0 — «все клиенты».</summary>
 529    public int OzonClientId { get; set; }
 30
 31    /// <summary>Запрошенная нижняя граница периода (до подъёма по watermark).</summary>
 532    public DateTime FromDate { get; set; }
 33
 534    public DateTime ToDate { get; set; }
 35
 36    /// <summary>Инкрементальный режим — читалось только изменившееся с прошлого прогона.</summary>
 637    public bool Incremental { get; set; }
 38
 39    /// <summary>Сколько записей пришло из API.</summary>
 340    public int Processed { get; set; }
 41
 42    /// <summary>Из них создано впервые.</summary>
 343    public int Inserted { get; set; }
 44
 45    /// <summary>У скольких изменился статус возврата или компенсации.</summary>
 346    public int StatusChanged { get; set; }
 47
 48    /// <summary>Сколько заказов сопоставлено с возвратами.</summary>
 349    public int LinkedOrders { get; set; }
 50
 51    /// <summary>Количество ошибок по клиентам за прогон.</summary>
 1052    public int ErrorCount { get; set; }
 53
 54    [Column(TypeName = "text")]
 1055    public string? ErrorMessage { get; set; }
 56
 3057    public DateTime StartedAtUtc { get; set; } = DateTime.UtcNow;
 58
 659    public DateTime? CompletedAtUtc { get; set; }
 60
 561    public long? DurationMs { get; set; }
 62}
 63
 64public static class OrderReturnSyncRunStatus
 65{
 66    public const string Running = "Running";
 67    public const string Success = "Success";
 68
 69    /// <summary>Часть клиентов загрузилась, часть упала.</summary>
 70    public const string PartialSuccess = "PartialSuccess";
 71
 72    public const string Failed = "Failed";
 73
 74    /// <summary>Тик пропущен: предыдущий прогон ещё держит лок.</summary>
 75    public const string Skipped = "Skipped";
 76}
 77
 78public static class OrderReturnSyncTrigger
 79{
 80    public const string Incremental = "Incremental";
 81    public const string FullWindow = "FullWindow";
 82    public const string Manual = "Manual";
 83}