using Dapper; using DealerSelection.Common.Data.Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Net; using System.Text; using System.Net.Http.Headers; using DealerSelection.Common.Interfaces.HttpClient; using static System.Net.Mime.MediaTypeNames; using System.Net.Http; using Microsoft.VisualBasic; using Microsoft.Extensions.Configuration; namespace WebJobService; public class ServiceBackUp : RepositoryBaseDapperAsync, IService { private ILogger _logger; private IHttpClientHandler ClientHandler { get; } public ServiceBackUp(string cxnName, IHttpClientHandler clientHandler,ILogger logger) : base(cxnName) { _logger = logger; ClientHandler = clientHandler; } public void Run() { Console.WriteLine($"Service Started: {DateTime.Now}."); _logger.LogInformation($"Service Started: {DateTime.Now}."); GetRecordToProcess().Wait(); Console.WriteLine($"Service Completed: {DateTime.Now}."); _logger.LogInformation($"Service Completed: {DateTime.Now}."); } private async Task GetRecordToProcess() { try { using (SqlConnection cxn = await OpenCxnAsync()) { IEnumerable recordsToProcess = await cxn.QueryAsync("DealerSelection.usp_get_dealer_selection_for_job", commandType: CommandType.StoredProcedure); var recordList = recordsToProcess.ToList(); Console.WriteLine($"Records to Process: {recordList.Count}."); //_logger.LogInformation($"DS Api:-($"Records to Process: {recordList.Count}."); foreach (var item in recordList) { HitDeleareSelectionApi(item); } Console.WriteLine($"Records processed sucessfully: {recordList.Count}."); } } catch (Exception exp) { throw exp; } } private async Task HitDeleareSelectionApi(SelectedData item) { var builder = new ConfigurationBuilder().AddJsonFile($"appsettings.json", true, true); var config = builder.Build(); var baseApiUrl = config["BaseApiUrl"]; string jwtToken = GenerateToken(baseApiUrl, config["ClientId"], config["ClientSecret"]); string url = string.Format($"{baseApiUrl}/DealerSelection?buId={item.BuId}&recordId={item.RecordId}"); try { Console.WriteLine($"Deler Selection URl Request: {url}."); HttpClient request = ClientHandler.GetHttpClient(); Uri requestUri = new(url); var httpContent = new MultipartFormDataContent(); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); request.DefaultRequestHeaders.Add("Authorization", "Bearer " + jwtToken); HttpResponseMessage response = request.PostAsync(url, null).Result; var contents = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Deler Selection URl Response: {contents}"); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } private string GenerateToken(string baseApiUrl, string client_Id, string client_secret) { Console.WriteLine($"GenerateToken Started: {DateAndTime.Now}"); string jwtTokenApiUrl = string.Format($"{baseApiUrl}/jwtauth/gettoken"); var requestBody = new { client_id = client_Id, client_secret = client_secret }; string requestJson = JsonConvert.SerializeObject(requestBody); byte[] bodyBytes = Encoding.UTF8.GetBytes(requestJson); HttpWebRequest request = WebRequest.Create(jwtTokenApiUrl) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = bodyBytes.Length; string jwtToken = string.Empty; try { using (var dataStream = request.GetRequestStream()) { dataStream.Write(bodyBytes, 0, bodyBytes.Length); dataStream.Close(); } HttpWebResponse response = request.GetResponse() as HttpWebResponse; Stream responseStream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(responseStream)) { jwtToken = reader.ReadToEnd(); } Console.WriteLine($"GenerateToken End: {DateAndTime.Now} - Token :{jwtToken}"); } catch (Exception ex) { Console.WriteLine($"Exception at GenerateToken :- {ex.StackTrace}"); } return jwtToken; } }