using BackOffice.BFF.Application.CommissionCQ.Queries.GetWeeklyPool; using BackOffice.BFF.Application.CommissionCQ.Queries.GetAllWeeklyPools; using BackOffice.BFF.Application.CommissionCQ.Queries.GetUserWeeklyBalances; using BackOffice.BFF.Application.CommissionCQ.Queries.GetAvailableWeeks; using BackOffice.BFF.Application.CommissionCQ.Queries.GetUserPayouts; using Foursat.BackOffice.BFF.Commission.Protos; using System.Collections.Generic; namespace BackOffice.BFF.WebApi.Common.Mappings; public class CommissionProfile : IRegister { void IRegister.Register(TypeAdapterConfig config) { // GetUserCommissionPayoutsRequest -> GetUserPayoutsQuery config.NewConfig() .MapWith(src => new GetUserPayoutsQuery { PaginationState = src.PaginationState != null ? new BackOffice.BFF.Application.Common.Models.PaginationState { PageNumber = src.PaginationState.PageNumber, PageSize = src.PaginationState.PageSize } : null, Filter = src.Filter != null ? new BackOffice.BFF.Application.CommissionCQ.Queries.GetUserPayouts.GetUserPayoutsFilter { UserId = src.Filter.UserId, WeekNumber = src.Filter.WeekNumber, Status = src.Filter.Status } : null }); // GetWeeklyPoolResponseDto -> GetWeeklyCommissionPoolResponse config.NewConfig() .MapWith(src => new GetWeeklyCommissionPoolResponse { Id = src.Id, WeekNumber = src.WeekNumber ?? string.Empty, TotalBalances = (int)src.TotalBalances, TotalPoolAmount = src.TotalPoolAmount, IsCalculated = src.IsCalculated, CalculatedAt = src.CalculatedAt.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(src.CalculatedAt.Value, DateTimeKind.Utc)) : null, Created = Timestamp.FromDateTime(DateTime.SpecifyKind(src.Created.DateTime, DateTimeKind.Utc)), ValuePerBalance = (long)src.ValuePerBalance }); // GetUserPayoutsResponseDto -> GetUserCommissionPayoutsResponse // config.NewConfig() // .MapWith(src => new GetUserCommissionPayoutsResponse // { // MetaData = new BackOffice.BFF.Protobuf.Common.MetaData // { // CurrentPage = src.MetaData.CurrentPage, // PageSize = src.MetaData.PageSize, // TotalCount = src.MetaData.TotalCount, // TotalPage = src.MetaData.TotalPage // }, // Models = { (src.Models ?? new List()).Select(m => new UserCommissionPayoutModel // { // Id = m.Id, // UserId = m.UserId, // UserName = m.UserName, // WeekNumber = m.WeekNumber, // BalancesEarned = m.BalancesEarned, // ValuePerBalance = m.ValuePerBalance, // TotalAmount = m.TotalAmount, // Status = m.Status, // WithdrawalMethod = m.WithdrawalMethod, // IbanNumber = m.IbanNumber, // Created = Timestamp.FromDateTime(DateTime.SpecifyKind(m.Created, DateTimeKind.Utc)), // LastModified = m.LastModified.HasValue // ? Timestamp.FromDateTime(DateTime.SpecifyKind(m.LastModified.Value, DateTimeKind.Utc)) // : null // }) } // }); // GetAllWeeklyPoolsResponseDto -> GetAllWeeklyPoolsResponse config.NewConfig() .MapWith(src => new GetAllWeeklyPoolsResponse { MetaData = new BackOffice.BFF.Protobuf.Common.MetaData { CurrentPage = src.MetaData.CurrentPage, PageSize = src.MetaData.PageSize, TotalCount = src.MetaData.TotalCount, TotalPage = src.MetaData.TotalPages }, Models = { src.Models.Select(m => new WeeklyCommissionPoolModel { Id = m.Id, WeekNumber = m.WeekNumber ?? string.Empty, TotalPoolAmount = m.TotalPoolAmount, TotalBalances = m.TotalBalances, ValuePerBalance = m.ValuePerBalance, IsCalculated = m.IsCalculated, CalculatedAt = m.CalculatedAt.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(m.CalculatedAt.Value, DateTimeKind.Utc)) : null, Created = Timestamp.FromDateTime(DateTime.SpecifyKind(m.Created, DateTimeKind.Utc)) }) } }); // GetUserWeeklyBalancesResponseDto -> GetUserWeeklyBalancesResponse config.NewConfig() .MapWith(src => new GetUserWeeklyBalancesResponse { MetaData = new BackOffice.BFF.Protobuf.Common.MetaData { CurrentPage = src.MetaData.CurrentPage, PageSize = src.MetaData.PageSize, TotalCount = src.MetaData.TotalCount, TotalPage = src.MetaData.TotalPages }, Models = { src.Models.Select(m => new UserWeeklyBalanceModel { Id = m.Id, UserId = m.UserId, WeekNumber = m.WeekNumber ?? string.Empty, LeftLegBalances = m.LeftLegBalances, RightLegBalances = m.RightLegBalances, TotalBalances = m.TotalBalances, WeeklyPoolContribution = m.WeeklyPoolContribution, CalculatedAt = m.CalculatedAt.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(m.CalculatedAt.Value, DateTimeKind.Utc)) : null, IsExpired = m.IsExpired, Created = Timestamp.FromDateTime(DateTime.SpecifyKind(m.Created, DateTimeKind.Utc)) }) } }); // GetWithdrawalRequestsResponseDto -> GetWithdrawalRequestsResponse // config.NewConfig() // .MapWith(src => new GetWithdrawalRequestsResponse // { // MetaData = new BackOffice.BFF.Protobuf.Common.MetaData // { // CurrentPage = src.MetaData.CurrentPage, // PageSize = src.MetaData.PageSize, // TotalCount = src.MetaData.TotalCount, // TotalPage = src.MetaData.TotalPages // }, // Models = { src.Models.Select(m => new WithdrawalRequestModel // { // Id = m.Id, // UserId = m.UserId, // UserName = m.UserName ?? string.Empty, // Amount = m.Amount, // Status = m.Status, // StatusDisplay = m.StatusDisplay ?? string.Empty, // RequestedAt = Timestamp.FromDateTime(DateTime.SpecifyKind(m.RequestedAt, DateTimeKind.Utc)), // ProcessedAt = m.ProcessedAt.HasValue // ? Timestamp.FromDateTime(DateTime.SpecifyKind(m.ProcessedAt.Value, DateTimeKind.Utc)) // : null, // ProcessedBy = m.ProcessedBy, // ProcessedByName = m.ProcessedByName ?? string.Empty, // RejectionReason = m.RejectionReason ?? string.Empty // }) } // }); // GetWithdrawalReportsResponseDto -> GetWithdrawalReportsResponse // config.NewConfig() // .MapWith(src => new GetWithdrawalReportsResponse // { // TotalRequests = src.TotalRequests, // PendingCount = src.PendingCount, // ApprovedCount = src.ApprovedCount, // RejectedCount = src.RejectedCount, // ProcessedCount = src.ProcessedCount, // TotalAmount = src.TotalAmount, // PendingAmount = src.PendingAmount, // ApprovedAmount = src.ApprovedAmount, // ProcessedAmount = src.ProcessedAmount, // Reports = { src.Reports.Select(r => new WithdrawalReportModel // { // UserId = r.UserId, // UserName = r.UserName ?? string.Empty, // TotalRequests = r.TotalRequests, // TotalAmount = r.TotalAmount, // ApprovedAmount = r.ApprovedAmount, // LastRequestDate = r.LastRequestDate.HasValue // ? Timestamp.FromDateTime(DateTime.SpecifyKind(r.LastRequestDate.Value, DateTimeKind.Utc)) // : null // }) } // }); // GetAvailableWeeksResponseDto -> GetAvailableWeeksResponse config.NewConfig() .MapWith(src => new GetAvailableWeeksResponse { CurrentWeek = MapWeekInfo(src.CurrentWeek), CalculatedWeeks = { src.CalculatedWeeks.Select(MapWeekInfo) }, PendingWeeks = { src.PendingWeeks.Select(MapWeekInfo) }, FutureWeeks = { src.FutureWeeks.Select(MapWeekInfo) } }); } private static WeekInfo MapWeekInfo(WeekInfoDto dto) { return new WeekInfo { WeekNumber = dto.WeekNumber, StartDate = Timestamp.FromDateTime(dto.StartDate.ToUniversalTime()), EndDate = Timestamp.FromDateTime(dto.EndDate.ToUniversalTime()), IsCalculated = dto.IsCalculated, CalculatedAt = dto.CalculatedAt.HasValue ? Timestamp.FromDateTime(dto.CalculatedAt.Value.ToUniversalTime()) : null, LastExecutionStatus = dto.LastExecutionStatus ?? string.Empty, TotalPoolAmount = dto.TotalPoolAmount ?? 0, EligibleUsersCount = dto.EligibleUsersCount ?? 0, DisplayText = dto.DisplayText }; } }