/// <summary>
        /// Add site banner
        /// </summary>
        /// <param name="imageStream"></param>
        /// <param name="fileName"></param>
        /// <param name="alternateText"></param>
        /// <param name="targetUrl"></param>
        /// <param name="active"></param>
        /// <returns></returns>
        public async Task <RServiceResult <GanjoorSiteBannerViewModel> > AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active)
        {
            RServiceResult <RImage> image = await _imageFileService.Add(null, imageStream, fileName, "SiteBanners");

            if (!string.IsNullOrEmpty(image.ExceptionString))
            {
                return(new RServiceResult <GanjoorSiteBannerViewModel>(null, image.ExceptionString));
            }

            GanjoorSiteBanner banner = new GanjoorSiteBanner()
            {
                RImage        = image.Result,
                AlternateText = alternateText,
                TargetUrl     = targetUrl,
                Active        = active
            };

            _context.GanjoorSiteBanners.Add(banner);
            await _context.SaveChangesAsync();

            await CleanBannersCache();

            return(new RServiceResult <GanjoorSiteBannerViewModel>
                   (
                       new GanjoorSiteBannerViewModel()
            {
                Id = banner.Id,
                ImageUrl = $"api/rimages/{banner.RImageId}.jpg",
                AlternateText = banner.AlternateText,
                TargetUrl = banner.TargetUrl,
                Active = banner.Active
            }
                   ));
        }
        /// <summary>
        /// delete site banner
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <RServiceResult <bool> > DeleteSiteBanner(int id)
        {
            GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();

            if (target == null)
            {
                return(new RServiceResult <bool>(false));//not found
            }
            _context.GanjoorSiteBanners.Remove(target);

            await _context.SaveChangesAsync();

            await CleanBannersCache();

            return(new RServiceResult <bool>(true));
        }
        /// <summary>
        /// modify site banner
        /// </summary>
        /// <param name="id"></param>
        /// <param name="alternateText"></param>
        /// <param name="targetUrl"></param>
        /// <param name="active"></param>
        /// <returns></returns>
        public async Task <RServiceResult <bool> > ModifySiteBanner(int id, string alternateText, string targetUrl, bool active)
        {
            GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();

            if (target == null)
            {
                return(new RServiceResult <bool>(false));//not found
            }
            target.AlternateText = alternateText;
            target.TargetUrl     = targetUrl;
            target.Active        = active;

            _context.GanjoorSiteBanners.Update(target);

            await _context.SaveChangesAsync();

            await CleanBannersCache();

            return(new RServiceResult <bool>(true));
        }