using System.ComponentModel.DataAnnotations.Schema; using System.Security.Cryptography; using System.Text; namespace Microsoft.SelfService.Portal.Core.API.Models { public class TemplateVersionModel : BaseModel { [Column(Order = 1)] public Guid TemplateId { get; set; } [Column(Order = 2)] public string Version { get; set; } = "1.0.0"; [Column(Order = 3)] public string JsonData { get; set; } = "{}"; [Column(Order = 4)] public string JsonHash { get; set; } = string.Empty; [Column(Order = 5)] public string SchemaVersion { get; set; } = "1.0"; [Column(Order = 6)] public bool IsPublished { get; set; } [Column(Order = 7)] public DateTime? PublishedAt { get; set; } [Column(Order = 8)] public string? PublishedBy { get; set; } public TemplateModel Template { get; set; } = null!; public ICollection TemplateRevisions { get; set; } = new List(); public void SetJsonData(string jsonData) { JsonData = string.IsNullOrWhiteSpace(jsonData) ? "{}" : jsonData; JsonHash = ComputeSha256(JsonData); } public static string ComputeSha256(string value) { var bytes = SHA256.HashData(Encoding.UTF8.GetBytes(value ?? string.Empty)); return Convert.ToHexString(bytes); } } }