public async Task <IActionResult> Search([FromQuery] ItemTypeSearchRequest request)
 {
     return(await FunctionWrapper.ExecuteFunction(this, async() =>
     {
         return await _itemTypeRepository.Search(request);
     }));
 }
        public async Task<List<ItemType>> Search(ItemTypeSearchRequest request)
        {
            List<FilterDefinition<ItemType>> filters = new List<FilterDefinition<ItemType>>();
            if (!string.IsNullOrEmpty(request.Name))
                filters.Add(Builders<ItemType>.Filter.Eq("Name", request.Name));
            if (request.IsForPysicalItems != null)
                filters.Add(Builders<ItemType>.Filter.Eq("IsForPysicalItems", request.IsForPysicalItems));
            if (request.AllowNestedItems != null)
                filters.Add(Builders<ItemType>.Filter.Eq("AllowNestedItems", request.AllowNestedItems));

            try
            {
                var filterConcat = Builders<ItemType>.Filter.And(filters);
                return await _context.ItemTypes.Find(filterConcat).ToListAsync();
            }
            catch (Exception ex)
            {
                //TODO: log/manage exception
                throw ex;
            }
        }