Hi guys,
I would like to implement a scheduled task which checks an API for every hour and insert data into a database if data is not in the database already. I read some articles and came out with this. I wonder if you can guide me to insert data into a SQL table if it is not already there.
 (By the way, most probably I will not use the Polly retry mechanism in 
my code.) I prefer to use raw SQL, it is much simpler for me.
 
Here is the Program.cs
 
- using System;  
- using System.IO;  
- using System.Net.Http;  
- using System.Threading.Tasks;  
- using Microsoft.Extensions.Configuration;  
- using Microsoft.Extensions.DependencyInjection;  
- using Microsoft.Extensions.Hosting;  
- using Polly;  
- using Polly.Extensions.Http;  
- using Polly.Registry;  
-   
- namespace TrendyolGamePurchase  
- {  
-     class Program  
-     {  
-         static async Task Main(string[] args)  
-         {  
-               
-             var build = new ConfigurationBuilder();  
-             BuildConfig(build);  
-   
-             var config = build.Build();  
-             
-             Console.Write(config["ConnectionStrings:Development"]);  
-             
-               
-             var builder = new HostBuilder()  
-                 .ConfigureServices((hostContext, services) =>  
-                 {  
-                     IPolicyRegistry<string> registry = services.AddPolicyRegistry();  
-   
-                       
-                     IAsyncPolicy<HttpResponseMessage> httpWaitAndRetryPolicy =  
-                         Policy.HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode)  
-                             .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(3, retryAttempt)));  
-   
-                     registry.Add("SimpleWaitAndRetryPolicy", httpWaitAndRetryPolicy);  
-   
-                       
-                     IAsyncPolicy<HttpResponseMessage> noOpPolicy = Policy.NoOpAsync()  
-                         .AsAsyncPolicy<HttpResponseMessage>();  
-   
-                     registry.Add("NoOpPolicy", noOpPolicy);  
-   
-                       
-                     var timeOutPolicy = Policy.TimeoutAsync(TimeSpan.FromSeconds(10));  
-                           
-                     registry.Add("timeOutPolicy", timeOutPolicy);  
-   
-                     services.AddHttpClient("TestClient", client =>  
-                     {  
-                         client.BaseAddress = new Uri("http://test//api/v2/web/game/purchase");  
-                         client.DefaultRequestHeaders.Add("Accept", "application/json");  
-                     }).AddPolicyHandlerFromRegistry((policyRegistry, httpRequestMessage) =>  
-                     {  
-                         if (httpRequestMessage.Method == HttpMethod.Post)  
-                         {  
-                             Console.WriteLine(DateTime.Now);  
-                             return policyRegistry.Get<IAsyncPolicy<HttpResponseMessage>>("SimpleWaitAndRetryPolicy");  
-                         }  
-                         return policyRegistry.Get<IAsyncPolicy<HttpResponseMessage>>("NoOpPolicy");  
-                     });  
-   
-                     services.AddSingleton<IHostedService, BusinessService>();  
-                 });  
-   
-             await builder.RunConsoleAsync();  
-         }  
-         static void BuildConfig(IConfigurationBuilder builder)  
-         {  
-             builder.SetBasePath(Directory.GetCurrentDirectory())  
-                 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);  
-   
-   
-         }  
-     }  
- }  
 
 And here is the BusinessService.cs
- using System;  
- using System.Collections.Generic;  
- using System.Net.Http;  
- using System.Net.Http.Headers;  
- using System.Text;  
- using System.Threading;  
- using System.Threading.Tasks;  
- using Microsoft.Extensions.Hosting;  
-   
- namespace TrendyolGamePurchase  
- {  
-     public class BusinessService : IHostedService  
-     {  
-         private IHttpClientFactory _httpClientFactory;  
-         public BusinessService(IHttpClientFactory httpClientFactory)  
-         {  
-             _httpClientFactory = httpClientFactory;  
-         }  
-   
-         public async Task StartAsync(CancellationToken cancellationToken)  
-         {  
-             await MakeTestRequestsToRemoteService();  
-         }  
-   
-         public async Task MakeTestRequestsToRemoteService()  
-         {  
-             HttpClient httpClient = _httpClientFactory.CreateClient("TestClient");  
-   
-             var authenticationBytes = Encoding.ASCII.GetBytes("Test:12345");  
-   
-             httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",  
-                 Convert.ToBase64String(authenticationBytes));  
-             httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));  
-   
-             var content = new FormUrlEncodedContent(new[]  
-             {  
-                 new KeyValuePair<string, string>("productCode", "1"),  
-                 new KeyValuePair<string, string>("quantity","1"),  
-                 new KeyValuePair<string, string>("shopNo","Palas"),  
-                 new KeyValuePair<string, string>("safeNo","Palas"),  
-                 new KeyValuePair<string, string>("cashierNo","Palas")  
-   
-             });  
-             var response = await httpClient.PostAsync("http://test//api/v2/web/game/purchase", content);  
-               
-   
-         }  
-   
-         public Task StopAsync(CancellationToken cancellationToken)  
-         {  
-             return Task.CompletedTask;  
-         }  
-     }  
- }