Refactor processors
This commit is contained in:
@@ -26,6 +26,10 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
private DateTime? EndDate { get; set; }
|
||||
private bool IsEnabled { get; set; }
|
||||
|
||||
// Cache for sheet data
|
||||
private IList<IList<object>>? _cachedSheetData;
|
||||
private string? _cachedDataKey;
|
||||
|
||||
public MorskaD1Importer(
|
||||
AppDbContext db,
|
||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||
@@ -43,6 +47,10 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
_logger.LogInformation("{ImporterType}: Starting import for {ImportWorkerName} ({ImportWorkerId})",
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
|
||||
// ✅ Clear cache at start
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
|
||||
LoadConfiguration(importWorker);
|
||||
|
||||
if (!ShouldPerformImport(importWorker))
|
||||
@@ -65,6 +73,46 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// ✅ Clear cache after import
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Dodaj metodę cache
|
||||
private IList<IList<object>>? GetSheetData()
|
||||
{
|
||||
var currentDataKey = $"{SheetId}#{SheetTabName}#{DataRange}";
|
||||
|
||||
if (_cachedSheetData != null && _cachedDataKey == currentDataKey)
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Using cached sheet data for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
return _cachedSheetData;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Fetching data from Google Sheets API for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
_cachedSheetData = dataRangeResponse.Values;
|
||||
_cachedDataKey = currentDataKey;
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Cached {RowCount} rows from Google Sheet",
|
||||
ImporterType, _cachedSheetData?.Count ?? 0);
|
||||
|
||||
return _cachedSheetData;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error fetching data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadConfiguration(Layer importWorker)
|
||||
@@ -164,8 +212,8 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
// ✅ Użyj cache zamiast bezpośredniego API
|
||||
var data = GetSheetData();
|
||||
|
||||
if (data == null || data.Count < 2)
|
||||
{
|
||||
@@ -239,10 +287,10 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
// ✅ Użyj cache zamiast bezpośredniego API
|
||||
var data = GetSheetData();
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Retrieved {RowCount} rows from Google Sheet",
|
||||
_logger.LogDebug("{ImporterType}: Using data with {RowCount} rows from cache",
|
||||
ImporterType, data?.Count ?? 0);
|
||||
|
||||
var newRecords = (from t in data
|
||||
@@ -279,8 +327,7 @@ public class MorskaD1Importer : MorskaBaseImporter
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from cached sheet data", ImporterType);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,10 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
private DateTime? EndDate { get; set; }
|
||||
private bool IsEnabled { get; set; }
|
||||
|
||||
// Cache for sheet data
|
||||
private IList<IList<object>>? _cachedSheetData;
|
||||
private string? _cachedDataKey;
|
||||
|
||||
public MorskaFk2Importer(
|
||||
AppDbContext db,
|
||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||
@@ -43,6 +47,10 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
_logger.LogInformation("{ImporterType}: Starting import for {ImportWorkerName} ({ImportWorkerId})",
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
|
||||
// ✅ Clear cache at start
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
|
||||
LoadConfiguration(importWorker);
|
||||
|
||||
if (!ShouldPerformImport(importWorker))
|
||||
@@ -65,6 +73,46 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// ✅ Clear cache after import
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Dodaj metodę cache
|
||||
private IList<IList<object>>? GetSheetData()
|
||||
{
|
||||
var currentDataKey = $"{SheetId}#{SheetTabName}#{DataRange}";
|
||||
|
||||
if (_cachedSheetData != null && _cachedDataKey == currentDataKey)
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Using cached sheet data for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
return _cachedSheetData;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Fetching data from Google Sheets API for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
_cachedSheetData = dataRangeResponse.Values;
|
||||
_cachedDataKey = currentDataKey;
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Cached {RowCount} rows from Google Sheet",
|
||||
ImporterType, _cachedSheetData?.Count ?? 0);
|
||||
|
||||
return _cachedSheetData;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error fetching data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadConfiguration(Layer importWorker)
|
||||
@@ -164,8 +212,8 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
// ✅ Użyj cache zamiast bezpośredniego API
|
||||
var data = GetSheetData();
|
||||
|
||||
if (data == null || data.Count == 0)
|
||||
{
|
||||
@@ -256,10 +304,10 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
// ✅ Użyj cache zamiast bezpośredniego API
|
||||
var data = GetSheetData();
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Retrieved {RowCount} rows from Google Sheet",
|
||||
_logger.LogDebug("{ImporterType}: Using data with {RowCount} rows from cache",
|
||||
ImporterType, data?.Count ?? 0);
|
||||
|
||||
if (data != null)
|
||||
@@ -315,8 +363,7 @@ public class MorskaFk2Importer : MorskaBaseImporter
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from cached sheet data", ImporterType);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@ using DiunaBI.Core.Database.Context;
|
||||
|
||||
namespace DiunaBI.Plugins.Morska.Importers;
|
||||
|
||||
public class MorskaImporter : MorskaBaseImporter
|
||||
public class MorskaStandardImporter : MorskaBaseImporter
|
||||
{
|
||||
public override string ImporterType => "Morska.Import.Standard";
|
||||
|
||||
private readonly AppDbContext _db;
|
||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||
private readonly ILogger<MorskaImporter> _logger;
|
||||
private readonly ILogger<MorskaStandardImporter> _logger;
|
||||
|
||||
// Configuration properties
|
||||
private string? SheetId { get; set; }
|
||||
@@ -26,10 +26,13 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
private DateTime? EndDate { get; set; }
|
||||
private bool IsEnabled { get; set; }
|
||||
|
||||
public MorskaImporter(
|
||||
private IList<IList<object>>? _cachedSheetData;
|
||||
private string? _cachedDataKey;
|
||||
|
||||
public MorskaStandardImporter(
|
||||
AppDbContext db,
|
||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||
ILogger<MorskaImporter> logger)
|
||||
ILogger<MorskaStandardImporter> logger)
|
||||
{
|
||||
_db = db;
|
||||
_googleSheetValues = googleSheetValues;
|
||||
@@ -43,6 +46,10 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
_logger.LogInformation("{ImporterType}: Starting import for {ImportWorkerName} ({ImportWorkerId})",
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
|
||||
// Clear cache before import
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
|
||||
// Load configuration from layer records
|
||||
LoadConfiguration(importWorker);
|
||||
|
||||
@@ -69,6 +76,45 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
ImporterType, importWorker.Name, importWorker.Id);
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Clear cache after import
|
||||
_cachedSheetData = null;
|
||||
_cachedDataKey = null;
|
||||
}
|
||||
}
|
||||
|
||||
private IList<IList<object>>? GetSheetData()
|
||||
{
|
||||
var currentDataKey = $"{SheetId}#{SheetTabName}#{DataRange}";
|
||||
|
||||
if (_cachedSheetData != null && _cachedDataKey == currentDataKey)
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Using cached sheet data for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
return _cachedSheetData;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_logger.LogDebug("{ImporterType}: Fetching data from Google Sheets API for {DataKey}",
|
||||
ImporterType, currentDataKey);
|
||||
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
_cachedSheetData = dataRangeResponse.Values;
|
||||
_cachedDataKey = currentDataKey;
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Cached {RowCount} rows from Google Sheet",
|
||||
ImporterType, _cachedSheetData?.Count ?? 0);
|
||||
|
||||
return _cachedSheetData;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error fetching data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadConfiguration(Layer importWorker)
|
||||
@@ -171,14 +217,13 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(SheetId!, $"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
var data = GetSheetData();
|
||||
|
||||
if (data == null || data.Count < 2)
|
||||
{
|
||||
_logger.LogWarning("{ImporterType}: No data found in sheet for {ImportWorkerName}",
|
||||
ImporterType, importWorker.Name);
|
||||
return true; // Assume up to date if no data
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if the number of columns matches
|
||||
@@ -199,7 +244,6 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if the record exists in the database - add null check
|
||||
var existingRecord = newestLayer.Records?.FirstOrDefault(x => x.Code == data[0][i].ToString());
|
||||
if (existingRecord == null || existingRecord.Value1 != value)
|
||||
{
|
||||
@@ -243,12 +287,9 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
|
||||
try
|
||||
{
|
||||
var dataRangeResponse = _googleSheetValues.Get(
|
||||
SheetId!,
|
||||
$"{SheetTabName}!{DataRange}").Execute();
|
||||
var data = dataRangeResponse.Values;
|
||||
var data = GetSheetData();
|
||||
|
||||
_logger.LogDebug("{ImporterType}: Retrieved {RowCount} rows from Google Sheet",
|
||||
_logger.LogDebug("{ImporterType}: Using data with {RowCount} rows from cache",
|
||||
ImporterType, data?.Count ?? 0);
|
||||
|
||||
if (data != null && data.Count >= 2)
|
||||
@@ -284,8 +325,7 @@ public class MorskaImporter : MorskaBaseImporter
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from Google Sheet {SheetId}",
|
||||
ImporterType, SheetId);
|
||||
_logger.LogError(e, "{ImporterType}: Error importing data from cached sheet data", ImporterType);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user