Example #1
0
        public ActionResult Post([FromBody] DtoProductListing obj)
        {
            var repo      = new DapperProductRepository();
            var adminRepo = new DapperAdminRepository();

            var srv = new SrvProductListingV1(repo, adminRepo, cache);
            var ret = new DtoProductListingResult();

            if (!srv.Exec(network, obj, ref ret))
            {
                return(BadRequest(srv.Error));
            }

            return(Ok(ret));
        }
        bool ValidadeRequest(DtoProductListing dto)
        {
            #region - code -

            if (dto.page == null)
            {
                Error = new DtoServiceError {
                    message = getLanguage(dto._language, 1)
                };
                return(false);
            }

            if (dto.page < 0)
            {
                Error = new DtoServiceError {
                    message = getLanguage(dto._language, 1)
                };
                return(false);
            }

            if (dto.pageSize == null)
            {
                Error = new DtoServiceError {
                    message = getLanguage(dto._language, 1)
                };
                return(false);
            }

            if (dto.pageSize <= 20)
            {
                Error = new DtoServiceError {
                    message = getLanguage(dto._language, 1)
                };
                return(false);
            }

            if (dto.orderBy == null || dto.orderBy > 2 || dto.orderBy < 1)
            {
                Error = new DtoServiceError {
                    message = getLanguage(dto._language, 1)
                };
                return(false);
            }

            return(true);

            #endregion
        }
        public bool Exec(LocalNetwork network, DtoProductListing request, ref DtoProductListingResult ret)
        {
            try
            {
                if (!ValidadeRequest(request))
                {
                    return(false);
                }

                using (var db = GetConnection(network))
                {
                    var tagCache = GetCacheTag(request);
                    var cacheOn  = !string.IsNullOrEmpty(network.cacheServer);

                    if (cacheOn)
                    {
                        var result = GetCachedData(tagCache, network.cacheServer, 1);
                        if (result != null)
                        {
                            ret = JsonConvert.DeserializeObject <DtoProductListingResult>(result);
                            return(true);
                        }
                    }

                    int total = 0;
                    var lst   = repository.GetProducts(db,
                                                       request.tag,
                                                       request.category,
                                                       (int)request.page,
                                                       (int)request.pageSize,
                                                       (int)request.orderBy,
                                                       ref total);

                    ret.totalRecords = total;
                    ret.results      = new List <DtoProduct>();

                    var threads = new List <int> {
                        1, 2
                    };
                    for (int i = 0; i < lst.Count; i++)
                    {
                        var item = lst[i];

                        var finalProd = new DtoProduct
                        {
                            name   = item.stName,
                            serial = "45445454564456546546"
                        };

                        Parallel.ForEach(threads, th =>
                        {
                            switch (th)
                            {
                            case 1:
                                {
                                    #region - brand -

                                    if (cacheOn)
                                    {
                                        var tagCache_brand = "Brand_" + item.fkBrand;
                                        var result         = GetCachedData(tagCache_brand, network.cacheServer, 10);

                                        if (result != null)
                                        {
                                            var brandCache  = JsonConvert.DeserializeObject <Brand>(result);
                                            finalProd.brand = brandCache.stName;
                                        }
                                        else
                                        {
                                            using (var db_brand = GetConnection(network))
                                            {
                                                var brandCache  = adminRepository.GetBrand(db_brand, item.fkBrand);
                                                finalProd.brand = brandCache.stName;

                                                var retStr = System.Text.Json.JsonSerializer.Serialize(brandCache);
                                                UpdateCachedData(tagCache_brand, retStr, network.cacheServer, 10);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        using (var db_brand = GetConnection(network))
                                        {
                                            var brandDB     = adminRepository.GetBrand(db_brand, item.fkBrand);
                                            finalProd.brand = brandDB.stName;
                                        }
                                    }

                                    #endregion

                                    break;
                                }

                            case 2:
                                {
                                    #region - category -

                                    if (cacheOn)
                                    {
                                        var tagCache_Categ = "Category_" + item.fkCategory;
                                        var result         = GetCachedData(tagCache_Categ, network.cacheServer, 10);

                                        if (result != null)
                                        {
                                            var brandCache  = JsonConvert.DeserializeObject <Category>(result);
                                            finalProd.brand = brandCache.stName;
                                        }
                                        else
                                        {
                                            using (var db_categ = GetConnection(network))
                                            {
                                                var categoryCache  = adminRepository.GetCategory(db_categ, item.fkCategory);
                                                finalProd.category = categoryCache.stName;

                                                var retStr = System.Text.Json.JsonSerializer.Serialize(categoryCache);
                                                UpdateCachedData(tagCache_Categ, retStr, network.cacheServer, 10);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        using (var db_categ = GetConnection(network))
                                        {
                                            var categoryCache  = adminRepository.GetCategory(db_categ, item.fkCategory);
                                            finalProd.category = categoryCache.stName;
                                        }
                                    }

                                    #endregion

                                    break;
                                }
                            }
                        });

                        ret.results.Add(finalProd);
                    }

                    if (cacheOn)
                    {
                        var retStr = System.Text.Json.JsonSerializer.Serialize(ret);
                        UpdateCachedData(tagCache, retStr, network.cacheServer, 1);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                Error = new DtoServiceError
                {
                    message   = getLanguage(0, 0),
                    debugInfo = ex.ToString()
                };

                return(false);
            }
        }
 public string GetCacheTag(DtoProductListing request)
 {
     return("ProductListing_" + (request.tag ?? "") + "_" + (request.category?.ToString() ?? "") + "_" + request.page + "_" + request.pageSize + "_" + request.orderBy);
 }