namespace MyOffice.Web.Models.Account; using AutoMapper; using MyOffice.Services.Account.Domain; using MyOffice.Services.Identity; using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; public class AccountViewModel: IResponseModel { public string? Id { get; set; } [Required] public string Name { get; set; } = null!; public string Type { get; set; } = null!; [Required] public string CurrencyId { get; set; } = null!; public string? CurrencyName { get; set; } public List? Categories { get; set; } [Required] public string CategoryId { get; set; } = null!; #region Permissions public List? AccessRights { get; set; } public bool AllowRead { get; set; } public bool AllowWrite { get; set; } public bool AllowDelete { get; set; } public bool AllowManage { get; set; } #endregion Permissions } public static class AccountViewModelExtensions { public static List ToViewModel(this List accounts, IMapper mapper) { return mapper.Map>(accounts.OrderBy(x => x.Name)); } } public class AccountAccessViewModel { public class AccountAccessItemViewModel { public string UserId { get; set; } = null!; public bool AllowWrite { get; set; } } public string? Email { get; set; } public bool AllowWrite { get; set; } public List Accesses { get; set; } = null!; } public class AccountViewModelProfile : Profile { public AccountViewModelProfile() { CreateMap() .ForMember(x => x.CurrencyId, o => o.MapFrom(x => x.CurrencyGlobalId)) .ForMember(x => x.CurrencyName, o => o.MapFrom(x => x.Currency!.Name)) .AfterMap() ; CreateMap() .AfterMap() ; } } public class AccountViewModelMappingAction : IMappingAction { public void Process(AccountDto source, AccountViewModel destination, ResolutionContext context) { } } public class AccessRightsViewModelMappingAction : IMappingAction { private readonly IContextProvider _contextProvider; public AccessRightsViewModelMappingAction(IContextProvider contextProvider) { _contextProvider = contextProvider; } public void Process(AccountAccessDto source, AccessRightsViewModel destination, ResolutionContext context) { } }