using AutoMapper; using EnvelopeGenerator.Domain.Interfaces.Auditing; using System; namespace EnvelopeGenerator.Application.Common.Extensions; /// /// Extension methods for applying auditing timestamps during AutoMapper mappings. /// public static class AutoMapperAuditingExtensions { /// /// Maps to the current UTC time. /// public static IMappingExpression MapAddedWhen(this IMappingExpression expression) where TDestination : IHasAddedWhen => expression.ForMember(dest => dest.AddedWhen, opt => opt.MapFrom(_ => DateTime.Now)); /// /// Maps to the current UTC time. /// public static IMappingExpression MapChangedWhen(this IMappingExpression expression) where TDestination : IHasChangedWhen => expression.ForMember(dest => dest.ChangedWhen, opt => opt.MapFrom(_ => DateTime.Now)); /// /// Converts a base64 data URL string to a byte array. /// Handles data URLs in the format: "data:image/png;base64,iVBORw0KG..." /// /// The base64 data URL string from Canvas.toDataURL() /// The decoded byte array, or null if the input is null or empty public static byte[]? MapDataUrlToRequiredBytes(this string dataUrl) { // Remove data URL prefix (e.g., "data:image/png;base64,") var base64Index = dataUrl.IndexOf(',', StringComparison.Ordinal); if (base64Index == -1) throw new ArgumentException("Invalid data URL format. Unable to extract base64 data.", nameof(dataUrl)); var base64Data = dataUrl[(base64Index + 1)..]; return Convert.FromBase64String(base64Data); } }