generated from noisedestroyers/claude
104 lines
3.5 KiB
C#
104 lines
3.5 KiB
C#
|
|
using System.ComponentModel.DataAnnotations;
|
||
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
||
|
|
|
||
|
|
namespace Database.Models
|
||
|
|
{
|
||
|
|
public class PublishingStep : BaseEntity
|
||
|
|
{
|
||
|
|
public int PublicationId { get; set; }
|
||
|
|
|
||
|
|
[Required]
|
||
|
|
[MaxLength(200)]
|
||
|
|
public string StepName { get; set; } = string.Empty;
|
||
|
|
|
||
|
|
[Required]
|
||
|
|
[MaxLength(50)]
|
||
|
|
public string Status { get; set; } = "Pending"; // Pending, InProgress, Completed, Failed, Skipped
|
||
|
|
|
||
|
|
public string? Details { get; set; }
|
||
|
|
|
||
|
|
public DateTime? StartedAt { get; set; }
|
||
|
|
|
||
|
|
public DateTime? CompletedAt { get; set; }
|
||
|
|
|
||
|
|
[Range(0, 100)]
|
||
|
|
public int ProgressPercent { get; set; } = 0;
|
||
|
|
|
||
|
|
public string? ErrorMessage { get; set; }
|
||
|
|
|
||
|
|
public int StepOrder { get; set; }
|
||
|
|
|
||
|
|
// Navigation properties
|
||
|
|
[ForeignKey(nameof(PublicationId))]
|
||
|
|
public Publication Publication { get; set; } = null!;
|
||
|
|
|
||
|
|
// Helper properties
|
||
|
|
public TimeSpan? Duration => CompletedAt?.Subtract(StartedAt ?? CreatedAt);
|
||
|
|
|
||
|
|
public bool IsCompleted => Status == "Completed" && CompletedAt.HasValue;
|
||
|
|
|
||
|
|
public bool IsFailed => Status == "Failed";
|
||
|
|
|
||
|
|
public bool IsInProgress => Status == "InProgress";
|
||
|
|
|
||
|
|
public bool IsPending => Status == "Pending";
|
||
|
|
|
||
|
|
public void Start()
|
||
|
|
{
|
||
|
|
Status = "InProgress";
|
||
|
|
StartedAt = DateTime.UtcNow;
|
||
|
|
UpdateTimestamp("System");
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Complete(string? details = null)
|
||
|
|
{
|
||
|
|
Status = "Completed";
|
||
|
|
CompletedAt = DateTime.UtcNow;
|
||
|
|
ProgressPercent = 100;
|
||
|
|
if (details != null)
|
||
|
|
Details = details;
|
||
|
|
UpdateTimestamp("System");
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Fail(string errorMessage, string? details = null)
|
||
|
|
{
|
||
|
|
Status = "Failed";
|
||
|
|
CompletedAt = DateTime.UtcNow;
|
||
|
|
ErrorMessage = errorMessage;
|
||
|
|
if (details != null)
|
||
|
|
Details = details;
|
||
|
|
UpdateTimestamp("System");
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Skip(string reason)
|
||
|
|
{
|
||
|
|
Status = "Skipped";
|
||
|
|
CompletedAt = DateTime.UtcNow;
|
||
|
|
Details = reason;
|
||
|
|
ProgressPercent = 100;
|
||
|
|
UpdateTimestamp("System");
|
||
|
|
}
|
||
|
|
|
||
|
|
public void UpdateProgress(int percent, string? details = null)
|
||
|
|
{
|
||
|
|
ProgressPercent = Math.Max(0, Math.Min(100, percent));
|
||
|
|
if (details != null)
|
||
|
|
Details = details;
|
||
|
|
UpdateTimestamp("System");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class PublishingStepNames
|
||
|
|
{
|
||
|
|
public const string ValidateConfiguration = "Validate Configuration";
|
||
|
|
public const string CollectBuildData = "Collect Build Data";
|
||
|
|
public const string QueryFogBugz = "Query FogBugz Data";
|
||
|
|
public const string GenerateReleaseNotes = "Generate Release Notes";
|
||
|
|
public const string CompressFiles = "Compress Files";
|
||
|
|
public const string UploadToStorage = "Upload to Storage";
|
||
|
|
public const string CleanupOldVersions = "Cleanup Old Versions";
|
||
|
|
public const string UpdateHelpCenter = "Update Help Center";
|
||
|
|
public const string UpdatePackageStatus = "Update Package Status";
|
||
|
|
public const string SendNotification = "Send Notification";
|
||
|
|
}
|
||
|
|
}
|