From 7c6009abd22d8461039be15d0fd069a460340585 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 20 Sep 2024 16:13:30 +1000 Subject: v0.1 --- Program.cs | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Program.cs (limited to 'Program.cs') diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..ba53ccb --- /dev/null +++ b/Program.cs @@ -0,0 +1,71 @@ +using Microsoft.EntityFrameworkCore; +using System.Text.Json.Serialization; + +namespace PagerParser; + +public class Program { + public static void Main(string[] args) { + var builder = WebApplication.CreateBuilder(args); + + builder.Services.AddDbContext(); + + // This is necessary if we don't want enum values sent as integers in JSON objects + builder.Services.AddControllers().AddJsonOptions(o => { + var converter = new JsonStringEnumConverter(); + o.JsonSerializerOptions.Converters.Add(converter); + }); + + builder.Services.AddCors(); + + // Add our custom services + builder.Services.AddSingleton(); + builder.Services.AddHostedService(); + + var app = builder.Build(); + + // Create a temporary scope so that we can access services during startup + using var scope = app.Services.CreateScope(); + var config = scope.ServiceProvider.GetRequiredService(); + var parser = scope.ServiceProvider.GetRequiredService(); + + // Ensure the database is created and the correct schema is used + // If we did update the database schema, attempt to re-parse all + // messages. + using var db = scope.ServiceProvider.GetRequiredService(); + var needsMigration = db.Database.GetPendingMigrations().Any(); + db.Database.Migrate(); + + if(config.GetValue("PagerParser:ReparseAllOnStartup")) { + db.ParsedPagerMessages.RemoveRange( + db.ParsedPagerMessages.ToArray()); + db.SaveChanges(); + foreach(var message in db.PagerMessages) { + message.ParsedMessage = parser.TryParse(message.Message); + if(message.ParsedMessage is not null) + message.ParsedMessage.GpsPosition = + PositionCalculator.GetGpsPosition(message.ParsedMessage); + } + db.SaveChanges(); + } else if(config.GetValue("PagerParser:ReparseFailedOnStartup")) { + foreach(var message in db.PagerMessages.Where(m => m.ParsedMessage == null)) { + message.ParsedMessage = parser.TryParse(message.Message); + if(message.ParsedMessage is not null) + if(message.ParsedMessage.GpsPosition is null) + message.ParsedMessage.GpsPosition = + PositionCalculator.GetGpsPosition(message.ParsedMessage); + } + db.SaveChanges(); + } + + // Start the server + app.UseCors(p => p + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader()); + app.UseHttpsRedirection(); + app.UseHsts(); + app.UseStaticFiles(); + app.MapControllers(); + app.Run(); + } +} -- cgit v1.3