/// <summary>
        /// Updates the story.
        /// </summary>
        /// <param name="details">The details.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <APIResponse> UpdateStory(StoryIdDetails details, UpdateStoryRequest request)
        {
            try
            {
                string filename   = "";
                var    folderName = Path.Combine("EventStories");
                var    pathToSave = Path.Combine("D:", "HappyWedding", folderName);

                if (request.CoverPhotoVideo.Length > 0)
                {
                    string format = System.IO.Path.GetExtension(request.CoverPhotoVideo.FileName);
                    filename = request.VendorId + "_Event_" + DateTime.Now + format;
                    string filenme  = filename.Replace(":", ".");
                    var    filePath = Path.Combine(pathToSave, filenme);
                    using var fileStream = new FileStream(filePath, FileMode.Create);
                    request.CoverPhotoVideo.CopyTo(fileStream);
                    request.CoverPhotoOrVideo = filePath;
                    request.CoverPhotoOrVideo = null;
                }
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                var         param       = JsonConvert.SerializeObject(request);
                HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json");

                var response = await client.PutAsync(servicesConfig.Blog + BlogServiceOperation.UpdateStory(details.StoryId), contentPost);

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'UpdateStory()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Gets the story.
        /// </summary>
        /// <param name="details">The details.</param>
        /// <returns></returns>
        public async Task <APIResponse> GetStory(StoryIdDetails details)
        {
            try
            {
                var client   = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);
                var response = await client.GetAsync(servicesConfig.Blog + BlogServiceOperation.GetStory(details.StoryId));

                if (response.IsSuccessStatusCode)
                {
                    var story = JsonConvert.DeserializeObject <List <StoryResponseDetails> >(await response.Content.ReadAsStringAsync());
                    foreach (var item1 in story)
                    {
                        byte[] b = System.IO.File.ReadAllBytes(item1.CoverPhotoOrVideo);
                        item1.CoverPhotoOrVideo = Convert.ToBase64String(b);
                    }
                    return(new APIResponse(story, HttpStatusCode.OK));
                }

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'GetStory()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Gets the TaggedData.
        /// </summary>
        /// <param name="details">The details.</param>
        /// <returns></returns>
        public async Task <APIResponse> GetTaggedDataByStoryId(StoryIdDetails details)
        {
            try
            {
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                var response = await client.GetAsync(servicesConfig.Blog + BlogServiceOperation.GetTaggedDataByStoryId(details.StoryId));

                if (response.IsSuccessStatusCode)
                {
                    var story      = JsonConvert.DeserializeObject <StoryResponseDetails>(await response.Content.ReadAsStringAsync());
                    var taggedData = story.TaggedData;

                    return(new APIResponse(taggedData, HttpStatusCode.OK));
                }

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'GetTaggedDataByStoryId()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Creates the story.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <APIResponse> CreateStory(CreateStoryRequest request)
        {
            try
            {
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                var         param       = JsonConvert.SerializeObject(request);
                HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json");

                var response = await client.PostAsync(servicesConfig.Blog + BlogServiceOperation.CreateStory(), contentPost);

                if (response.IsSuccessStatusCode)
                {
                    var story = JsonConvert.DeserializeObject <StoryResponse>(await response.Content.ReadAsStringAsync());
                    return(new APIResponse(story, HttpStatusCode.Created));
                }

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'CreateStory()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Gets the Multidetail.
        /// </summary>
        /// <param name="multidetailParameter">The Multidetail parameter request.</param>
        /// <returns></returns>
        public async Task <APIResponse> GetAllMultiDetails(MultidetailParameter multidetailParameter)
        {
            try
            {
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                UriBuilder url = new UriBuilder(servicesConfig.Blog + BlogServiceOperation.GetAllMultiDetails());
                url.Query = QueryStringHelper.ConvertToQueryString(multidetailParameter);
                var response = await client.GetAsync(url.ToString());

                if (response.IsSuccessStatusCode)
                {
                    var multidetail = JsonConvert.DeserializeObject <List <MultidetailResponse> >(await response.Content.ReadAsStringAsync());
                    return(new APIResponse(multidetail, HttpStatusCode.OK));
                }

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'GetAllMultiDetails()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Adds the health checks.
        /// </summary>
        /// <param name="services">The services.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns></returns>
        public static IServiceCollection AddHealthChecks(this IServiceCollection services,
                                                         IConfiguration configuration)
        {
            var servicesConfig = configuration.GetSection("ServicesConfig").Get <ServicesConfig>();

            services.AddHealthChecks()
            .AddUrlGroup(new Uri(servicesConfig.Identity + IdentityServiceOperation.GetHealth()), name: "Identity Service")
            .AddUrlGroup(new Uri(servicesConfig.Blog + BlogServiceOperation.GetHealth()), name: "Blogs Service");

            return(services);
        }
        /// <summary>
        /// Deletes the story.
        /// </summary>
        /// <param name="details">The details.</param>
        /// <returns></returns>
        public async Task <APIResponse> DeleteStory(StoryIdDetails details)
        {
            try
            {
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                var response = await client.DeleteAsync(servicesConfig.Blog + BlogServiceOperation.DeleteStory(details.StoryId));

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'DeleteStory()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Gets the stories.
        /// </summary>
        /// <param name="storyParametersRequest">The story parameters request.</param>
        /// <returns></returns>
        public async Task <APIResponse> GetStories(StoryParametersRequest storyParametersRequest)
        {
            try
            {
                string serializedStories;
                List <StoryResponse> stories;

                var encodedStories = await distributedCache.GetAsync(BlogServiceOperation.GetStoriesCacheName);

                if (encodedStories != null)
                {
                    serializedStories = Encoding.UTF8.GetString(encodedStories);
                    stories           = JsonConvert.DeserializeObject <List <StoryResponse> >(serializedStories);
                }
                else
                {
                    var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                    UriBuilder url = new UriBuilder(servicesConfig.Blog + BlogServiceOperation.GetStories());
                    url.Query = QueryStringHelper.ConvertToQueryString(storyParametersRequest);

                    var response = await client.GetAsync(url.ToString());

                    stories = JsonConvert.DeserializeObject <List <StoryResponse> >(await response.Content.ReadAsStringAsync());

                    serializedStories = JsonConvert.SerializeObject(stories);
                    encodedStories    = Encoding.UTF8.GetBytes(serializedStories);
                    var options = new DistributedCacheEntryOptions()
                                  .SetSlidingExpiration(TimeSpan.FromMinutes(1))
                                  .SetAbsoluteExpiration(DateTime.Now.AddHours(1));

                    await distributedCache.SetAsync(BlogServiceOperation.GetStoriesCacheName, encodedStories, options);
                }

                return(new APIResponse(stories, HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'GetStories()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Updates the story.
        /// </summary>
        /// <param name="details">The details.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <APIResponse> UpdateStory(StoryIdDetails details, UpdateStoryRequest request)
        {
            try
            {
                var client = httpClientFactory.CreateClient(BlogServiceOperation.serviceName);

                var         param       = JsonConvert.SerializeObject(request);
                HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json");

                var response = await client.PutAsync(servicesConfig.Blog + BlogServiceOperation.UpdateStory(details.StoryId), contentPost);

                return(new APIResponse(response.StatusCode));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'UpdateStory()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }