From 8104f852d82f49c12550b0ea7176bbe6c7f62297 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Fri, 9 Feb 2024 14:05:26 -0700 Subject: [PATCH] added partial export functionality --- Controllers/MigrationController.cs | 189 ++++++++++++++++++++++++++++- Helper/ConfigHelper.cs | 12 +- Views/Migration/Index.cshtml | 2 +- 3 files changed, 194 insertions(+), 9 deletions(-) diff --git a/Controllers/MigrationController.cs b/Controllers/MigrationController.cs index f59ddb8..038a08c 100644 --- a/Controllers/MigrationController.cs +++ b/Controllers/MigrationController.cs @@ -14,19 +14,17 @@ namespace CarCareTracker.Controllers public class MigrationController : Controller { private IConfigHelper _configHelper; - private IConfiguration _serverConfig; private IFileHelper _fileHelper; private readonly ILogger _logger; public MigrationController(IConfigHelper configHelper, IFileHelper fileHelper, IConfiguration serverConfig, ILogger logger) { _configHelper = configHelper; _fileHelper = fileHelper; - _serverConfig = serverConfig; _logger = logger; } public IActionResult Index() { - if (_configHelper.GetServerHasPostgresConnection()) + if (!string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection())) { return View(); } else @@ -63,9 +61,190 @@ namespace CarCareTracker.Controllers } } } + public IActionResult Export() + { + if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection())) + { + return new RedirectResult("/Error/Unauthorized"); + } + var tempPath = $"temp/{Guid.NewGuid}.db"; + var fullFileName = _fileHelper.GetFullFilePath(tempPath, false); + try + { + var pgDataSource = new NpgsqlConnection(_configHelper.GetServerPostgresConnection()); + pgDataSource.Open(); + InitializeTables(pgDataSource); + //pull records + var vehicles = new List(); + var repairrecords = new List(); + var upgraderecords = new List(); + var servicerecords = new List(); + + var gasrecords = new List(); + var noterecords = new List(); + var odometerrecords = new List(); + var reminderrecords = new List(); + + var planrecords = new List(); + var planrecordtemplates = new List(); + var supplyrecords = new List(); + var taxrecords = new List(); + + var userrecords = new List(); + var tokenrecords = new List(); + var userconfigrecords = new List(); + var useraccessrecords = new List(); + #region "Part1" + string cmd = $"SELECT data FROM app.vehicles"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + Vehicle vehicle = System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string); + vehicles.Add(vehicle); + } + } + foreach (var vehicle in vehicles) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("vehicles"); + table.Upsert(vehicle); + }; + } + cmd = $"SELECT data FROM app.collisionrecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + repairrecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in repairrecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("collisionrecords"); + table.Upsert(record); + }; + } + cmd = $"SELECT data FROM app.upgraderecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + upgraderecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in upgraderecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("upgraderecords"); + table.Upsert(record); + }; + } + cmd = $"SELECT data FROM app.servicerecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + servicerecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in servicerecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("servicerecords"); + table.Upsert(record); + }; + } + #endregion + #region "Part2" + cmd = $"SELECT data FROM app.gasrecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + gasrecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in gasrecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("gasrecords"); + table.Upsert(record); + }; + } + cmd = $"SELECT data FROM app.notes"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + noterecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in noterecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("notes"); + table.Upsert(record); + }; + } + cmd = $"SELECT data FROM app.odometerrecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + odometerrecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in odometerrecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("odometerrecords"); + table.Upsert(record); + }; + } + cmd = $"SELECT data FROM app.reminderrecords"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + reminderrecords.Add(System.Text.Json.JsonSerializer.Deserialize(reader["data"] as string)); + } + } + foreach (var record in reminderrecords) + { + using (var db = new LiteDatabase(fullFileName)) + { + var table = db.GetCollection("reminderrecords"); + table.Upsert(record); + }; + } + #endregion + return Json(new OperationResponse { Success = true, Message = $"/{tempPath}" }); + } + catch (Exception ex) + { + return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); + } + } public IActionResult Import(string fileName) { - if (!_configHelper.GetServerHasPostgresConnection()) + if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection())) { return new RedirectResult("/Error/Unauthorized"); } @@ -76,7 +255,7 @@ namespace CarCareTracker.Controllers } try { - var pgDataSource = new NpgsqlConnection(_serverConfig["POSTGRES_CONNECTION"]); + var pgDataSource = new NpgsqlConnection(_configHelper.GetServerPostgresConnection()); pgDataSource.Open(); InitializeTables(pgDataSource); //pull records diff --git a/Helper/ConfigHelper.cs b/Helper/ConfigHelper.cs index cee2a35..be04291 100644 --- a/Helper/ConfigHelper.cs +++ b/Helper/ConfigHelper.cs @@ -12,7 +12,7 @@ namespace CarCareTracker.Helper string GetLogoUrl(); string GetServerLanguage(); bool GetServerEnableShopSupplies(); - bool GetServerHasPostgresConnection(); + string GetServerPostgresConnection(); public bool DeleteUserConfig(int userId); } public class ConfigHelper : IConfigHelper @@ -42,9 +42,15 @@ namespace CarCareTracker.Helper var serverLanguage = _config[nameof(UserConfig.UserLanguage)] ?? "en_US"; return serverLanguage; } - public bool GetServerHasPostgresConnection() + public string GetServerPostgresConnection() { - return !string.IsNullOrWhiteSpace(_config["POSTGRES_CONNECTION"]); + if (!string.IsNullOrWhiteSpace(_config["POSTGRES_CONNECTION"])) + { + return _config["POSTGRES_CONNECTION"]; + } else + { + return string.Empty; + } } public bool GetServerEnableShopSupplies() { diff --git a/Views/Migration/Index.cshtml b/Views/Migration/Index.cshtml index 23ede02..b6d8cbe 100644 --- a/Views/Migration/Index.cshtml +++ b/Views/Migration/Index.cshtml @@ -58,7 +58,7 @@ sloader.hide(); if (data.success) { successToast(data.message); - //setTimeout(function () { window.location.href = '/Home/Index' }, 500); + setTimeout(function () { window.location.href = '/Home/Index' }, 500); } else { errorToast(genericErrorMessage()); }