Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ClientReturnApiService : IClientReturnApiService
- {
- private readonly IV2ReturnService _v2ReturnService;
- private readonly IItemsGateway _itemsGateway;
- private readonly IClientReturnMappingService _mappingService;
- public ClientReturnApiService(
- IV2ReturnService v2ReturnService,
- IItemsGateway itemsGateway,
- IClientReturnMappingService mappingService)
- {
- _mappingService = mappingService;
- _v2ReturnService = v2ReturnService;
- _itemsGateway = itemsGateway;
- }
- public async Task<ClientReturnResponse> GetByNumber(string returnNumber)
- {
- var clientReturn = await _v2ReturnService.GetClientReturn(returnNumber, true, true);
- return clientReturn != null
- ? _mappingService.ToClientReturnResponse(clientReturn)
- : null;
- }
- public async Task<ICollection<ReturnResponse>> GetReturns(long clientId)
- {
- var returns = await _v2ReturnService.GetClientReturns(clientId, true);
- return await Task.WhenAll(returns.Select(ToReturnResponse));
- }
- public async Task<ICollection<ClientReturnResponse>> GetClientReturns(long clientId)
- {
- var returns = await _v2ReturnService.GetClientReturns(clientId, true, true);
- return returns.Select(_mappingService.ToClientReturnResponse).ToArray();
- }
- private async Task<ReturnResponse> ToReturnResponse(ClientReturn clientReturn)
- {
- var items = await GetReturnItemResponses(clientReturn);
- var response = new ReturnResponse
- {
- Id = clientReturn.Id,
- Number = clientReturn.ReturnNumber,
- CreatedAt = clientReturn.Moment,
- Address = clientReturn.Address,
- TimeSlot = new ReturnTimeSlotResponse
- {
- DateFrom = clientReturn.DateFrom,
- DateTo = clientReturn.DateTo
- },
- Items = items,
- Type = clientReturn.Type,
- ClientType = clientReturn.Type.ToNamed(),
- IsDeletable = !_v2ReturnService.ValidateDelete(clientReturn).HasErrors,
- State = clientReturn.State.ToString(),
- ClientState = clientReturn.State.ToNamed(),
- RejectionComment = clientReturn.RejectionComment
- };
- return response;
- }
- private async Task<ReturnItemResponse[]> GetReturnItemResponses(ClientReturn clientReturn)
- {
- var returnItems = clientReturn.Items;
- var itemIds = returnItems.Select(x => x.ItemId).Distinct();
- var photos = returnItems.GroupBy(x => x.ItemId).ToDictionary(x => x.Key, x => x.SelectMany(y => y.Images.Select(z => z.Url)));
- return (await _itemsGateway.GetItemsInfoAndMerchant(itemIds)).Select(x => new ReturnItemResponse
- {
- Id = (int)x.Id,
- ImageUrl = x.Info?.CoverImage,
- Quantity = returnItems.Count(y => y.ItemId == x.Id),
- Photos = photos[x.Id].Distinct()
- }).ToArray();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement