// <---------- Item ---------->


        public async Task <ResponseResult <ItemResponse> > CreateItemAsync(ItemRequest itemRequest, string creatorId)
        {
            var isCategoryExists = await _shopRepository.IsCategoryExistsAsync(itemRequest.CategoryId);

            if (!isCategoryExists)
            {
                return(new ResponseResult <ItemResponse>
                {
                    Errors = new[] { "Item category is not exists" }
                });
            }

            var dateNow = DateTimeOffset.UtcNow;

            var item = _mapper.Map <Item>(itemRequest);

            item.Id        = Guid.NewGuid();
            item.CreatorId = Guid.Parse(creatorId);
            item.CreatedAt = dateNow;
            item.UpdatedAt = dateNow;

            var createdItem = await _shopRepository.CreateItemAsync(item, itemRequest.CategoryId);

            if (createdItem == null)
            {
                return(new ResponseResult <ItemResponse>
                {
                    Errors = new[] { "Item with this name already exists" }
                });
            }

            var itemCategory = new ItemCategory
            {
                ItemId     = item.Id,
                CategoryId = itemRequest.CategoryId
            };

            var createdItemCategory = await _shopRepository.CreateItemCategoryAsync(itemCategory);

            if (createdItemCategory == null)
            {
                return(new ResponseResult <ItemResponse>
                {
                    Errors = new[] { "Item with this category already exists" }
                });
            }

            var mappedItemResponse = _mapper.Map <ItemResponse>(createdItem);

            return(new ResponseResult <ItemResponse>
            {
                Success = true,
                Response = mappedItemResponse
            });
        }