Enhance AutoMapper mappings and add base64 decoding
Updated `MappingProfile` to map `Signature.DataUrl` to `DocReceiverElement.Ink` using the new `MapDataUrlToRequiredBytes` extension method. Added `MapDataUrlToRequiredBytes` to handle base64-encoded data URLs, converting them to byte arrays. Introduced a `using System;` directive in `AutoMapperAuditingExtensions.cs` to support `DateTime`. Retained `MapChangedWhen` functionality while extending mapping capabilities for handling base64 data URLs.
This commit is contained in:
@@ -40,7 +40,9 @@ public class MappingProfile : Profile
|
|||||||
// DTO to Entity mappings
|
// DTO to Entity mappings
|
||||||
CreateMap<ConfigDto, Config>();
|
CreateMap<ConfigDto, Config>();
|
||||||
CreateMap<DocReceiverElementDto, DocReceiverElement>();
|
CreateMap<DocReceiverElementDto, DocReceiverElement>();
|
||||||
CreateMap<Signature, DocReceiverElement>().MapChangedWhen();
|
CreateMap<Signature, DocReceiverElement>()
|
||||||
|
.ForMember(dest => dest.Ink, opt => opt.MapFrom(src => src.DataUrl.MapDataUrlToRequiredBytes()))
|
||||||
|
.MapChangedWhen();
|
||||||
CreateMap<DocumentStatusDto, DocumentStatus>();
|
CreateMap<DocumentStatusDto, DocumentStatus>();
|
||||||
CreateMap<EmailTemplateDto, EmailTemplate>();
|
CreateMap<EmailTemplateDto, EmailTemplate>();
|
||||||
CreateMap<EnvelopeDto, Envelope>();
|
CreateMap<EnvelopeDto, Envelope>();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using EnvelopeGenerator.Domain.Interfaces.Auditing;
|
using EnvelopeGenerator.Domain.Interfaces.Auditing;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.Common.Extensions;
|
namespace EnvelopeGenerator.Application.Common.Extensions;
|
||||||
|
|
||||||
@@ -21,4 +22,21 @@ public static class AutoMapperAuditingExtensions
|
|||||||
public static IMappingExpression<TSource, TDestination> MapChangedWhen<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
|
public static IMappingExpression<TSource, TDestination> MapChangedWhen<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
|
||||||
where TDestination : IHasChangedWhen
|
where TDestination : IHasChangedWhen
|
||||||
=> expression.ForMember(dest => dest.ChangedWhen, opt => opt.MapFrom(_ => DateTime.Now));
|
=> expression.ForMember(dest => dest.ChangedWhen, opt => opt.MapFrom(_ => DateTime.Now));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a base64 data URL string to a byte array.
|
||||||
|
/// Handles data URLs in the format: "data:image/png;base64,iVBORw0KG..."
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dataUrl">The base64 data URL string from Canvas.toDataURL()</param>
|
||||||
|
/// <returns>The decoded byte array, or null if the input is null or empty</returns>
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user