feat(client): add ViewModelMappingExtensions for Core<->Client mapping
Add extension methods to convert between Core and Client view models: - SearchViewModel: Core (enum Status) <-> Client (string Status) - SearchCriteria: Core (primitive lists) <-> Client (full ViewModels) - JdeUserViewModel -> OperatorViewModel Handles structural differences in criteria where Core uses primitive lists (List<long>, List<string>) and Client uses full objects.
This commit is contained in:
@@ -0,0 +1,140 @@
|
|||||||
|
using JdeScoping.Client.Models;
|
||||||
|
using JdeScoping.Core.Models.Enums;
|
||||||
|
using JdeScoping.Core.Models.Search;
|
||||||
|
using CoreSearch = JdeScoping.Core.ViewModels.SearchViewModel;
|
||||||
|
using CoreItem = JdeScoping.Core.ViewModels.ItemViewModel;
|
||||||
|
using CoreWorkOrder = JdeScoping.Core.ViewModels.WorkOrderViewModel;
|
||||||
|
using CoreProfitCenter = JdeScoping.Core.ViewModels.ProfitCenterViewModel;
|
||||||
|
using CoreWorkCenter = JdeScoping.Core.ViewModels.WorkCenterViewModel;
|
||||||
|
using CoreLot = JdeScoping.Core.ViewModels.LotViewModel;
|
||||||
|
using CorePartOp = JdeScoping.Core.ViewModels.PartOperationViewModel;
|
||||||
|
using CoreJdeUser = JdeScoping.Core.ViewModels.JdeUserViewModel;
|
||||||
|
|
||||||
|
namespace JdeScoping.Client.Extensions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extension methods for mapping between Core and Client view models.
|
||||||
|
/// </summary>
|
||||||
|
public static class ViewModelMappingExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Maps Core SearchViewModel to Client SearchViewModel.
|
||||||
|
/// </summary>
|
||||||
|
public static SearchViewModel ToClient(this CoreSearch vm) => new()
|
||||||
|
{
|
||||||
|
Id = vm.Id,
|
||||||
|
Name = vm.Name,
|
||||||
|
UserName = vm.UserName,
|
||||||
|
Status = vm.Status.ToString(),
|
||||||
|
SubmitDt = vm.SubmitDt,
|
||||||
|
StartDt = vm.StartDt,
|
||||||
|
EndDt = vm.EndDt,
|
||||||
|
Criteria = vm.Criteria?.ToClientCriteria() ?? new()
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps Client SearchViewModel to Core SearchViewModel.
|
||||||
|
/// </summary>
|
||||||
|
public static CoreSearch ToCore(this SearchViewModel vm) => new()
|
||||||
|
{
|
||||||
|
Id = vm.Id,
|
||||||
|
Name = vm.Name,
|
||||||
|
UserName = vm.UserName,
|
||||||
|
Status = Enum.TryParse<SearchStatus>(vm.Status, out var status) ? status : SearchStatus.New,
|
||||||
|
SubmitDt = vm.SubmitDt,
|
||||||
|
StartDt = vm.StartDt,
|
||||||
|
EndDt = vm.EndDt,
|
||||||
|
Criteria = vm.Criteria.ToCoreCriteria()
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps Core SearchCriteria to Client SearchCriteriaViewModel.
|
||||||
|
/// Core uses primitive lists; Client uses full view model objects.
|
||||||
|
/// </summary>
|
||||||
|
public static SearchCriteriaViewModel ToClientCriteria(this SearchCriteria criteria)
|
||||||
|
{
|
||||||
|
var client = new SearchCriteriaViewModel
|
||||||
|
{
|
||||||
|
MinimumDt = criteria.MinimumDt,
|
||||||
|
MaximumDt = criteria.MaximumDt,
|
||||||
|
ExtractMisData = criteria.ExtractMisData
|
||||||
|
};
|
||||||
|
|
||||||
|
// Map work orders (Core has just numbers, Client has full WorkOrderViewModel)
|
||||||
|
client.WorkOrders = criteria.WorkOrderNumbers
|
||||||
|
.Select(n => new CoreWorkOrder { WorkOrderNumber = n })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map items (Core has just item number strings, Client has full ItemViewModel)
|
||||||
|
client.Items = criteria.ItemNumbers
|
||||||
|
.Select(n => new CoreItem { ItemNumber = n })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map profit centers (Core has just code strings, Client has full ProfitCenterViewModel)
|
||||||
|
client.ProfitCenters = criteria.ProfitCenters
|
||||||
|
.Select(pc => new CoreProfitCenter { Code = pc })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map work centers (Core has just code strings, Client has full WorkCenterViewModel)
|
||||||
|
client.WorkCenters = criteria.WorkCenters
|
||||||
|
.Select(wc => new CoreWorkCenter { Code = wc })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map operators (Core has just user ID strings, Client has full OperatorViewModel)
|
||||||
|
client.Operators = criteria.OperatorIDs
|
||||||
|
.Select(id => new OperatorViewModel { UserId = id })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map component lots (Core uses LotViewModel, Client uses ComponentLotViewModel)
|
||||||
|
client.ComponentLots = criteria.ComponentLotNumbers
|
||||||
|
.Select(l => new ComponentLotViewModel { LotNumber = l.LotNumber, ItemNumber = l.ItemNumber })
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Map part operations (both use PartOperationViewModel from Core)
|
||||||
|
client.PartOperations = criteria.PartOperations.ToList();
|
||||||
|
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps Client SearchCriteriaViewModel to Core SearchCriteria.
|
||||||
|
/// Client uses full view model objects; Core uses primitive lists.
|
||||||
|
/// </summary>
|
||||||
|
public static SearchCriteria ToCoreCriteria(this SearchCriteriaViewModel criteria) => new()
|
||||||
|
{
|
||||||
|
MinimumDt = criteria.MinimumDt,
|
||||||
|
MaximumDt = criteria.MaximumDt,
|
||||||
|
ExtractMisData = criteria.ExtractMisData,
|
||||||
|
WorkOrderNumbers = criteria.WorkOrders.Select(wo => wo.WorkOrderNumber).ToList(),
|
||||||
|
ItemNumbers = criteria.Items.Select(i => i.ItemNumber).ToList(),
|
||||||
|
ProfitCenters = criteria.ProfitCenters.Select(pc => pc.Code).ToList(),
|
||||||
|
WorkCenters = criteria.WorkCenters.Select(wc => wc.Code).ToList(),
|
||||||
|
OperatorIDs = criteria.Operators.Select(o => o.UserId).ToList(),
|
||||||
|
ComponentLotNumbers = criteria.ComponentLots
|
||||||
|
.Select(l => new CoreLot { LotNumber = l.LotNumber, ItemNumber = l.ItemNumber })
|
||||||
|
.ToList(),
|
||||||
|
PartOperations = criteria.PartOperations.ToList()
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps Core JdeUserViewModel to Client OperatorViewModel.
|
||||||
|
/// </summary>
|
||||||
|
public static OperatorViewModel ToClientOperator(this CoreJdeUser vm) => new()
|
||||||
|
{
|
||||||
|
AddressNumber = (int)vm.AddressNumber,
|
||||||
|
UserId = vm.UserId,
|
||||||
|
FullName = vm.FullName
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps a collection of Core SearchViewModels to Client SearchViewModels.
|
||||||
|
/// </summary>
|
||||||
|
public static List<SearchViewModel> ToClientList(this IEnumerable<CoreSearch> list) =>
|
||||||
|
list.Select(s => s.ToClient()).ToList();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maps a collection of Core JdeUserViewModels to Client OperatorViewModels.
|
||||||
|
/// </summary>
|
||||||
|
public static List<OperatorViewModel> ToClientOperatorList(this IEnumerable<CoreJdeUser> list) =>
|
||||||
|
list.Select(u => u.ToClientOperator()).ToList();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user