Files
DiunaBI/WebAPI/dataProcessors/t3.MultiSourceCopySelectedCodes.processor.cs

114 lines
4.4 KiB
C#
Raw Normal View History

using DiunaBIWebAPI.dataProcessors;
using Google.Apis.Sheets.v4;
2023-12-28 14:26:29 +01:00
using Google.Apis.Sheets.v4.Data;
using Microsoft.EntityFrameworkCore;
using WebAPI.Controllers;
using WebAPI.Models;
namespace WebAPI.dataProcessors
{
public class T3MultiSourceCopySelectedCodesProcessor
{
private readonly AppDbContext db;
private readonly SpreadsheetsResource.ValuesResource googleSheetValues;
private readonly LayersController controller;
public T3MultiSourceCopySelectedCodesProcessor(
AppDbContext _db,
SpreadsheetsResource.ValuesResource _googleSheetValues,
LayersController _controller)
{
db = _db;
googleSheetValues = _googleSheetValues;
controller = _controller;
}
2024-06-18 19:53:52 +02:00
public void Process(Layer processWorker)
{
2024-06-18 19:53:52 +02:00
var year = int.Parse(processWorker!.Records?.SingleOrDefault(x => x.Code == "Year")?.Desc1!);
var month = int.Parse(processWorker!.Records?.SingleOrDefault(x => x.Code == "Month")?.Desc1!);
var sources = processWorker.Records?.Where(x => x.Code == "Source").ToList();
if (!sources!.Any())
{
throw new Exception("Source record not found");
}
2024-06-18 19:53:52 +02:00
var codes = processWorker.Records?.SingleOrDefault(x => x.Code == "Codes")?.Desc1;
if (codes == null)
{
throw new Exception("Codes record not found");
}
2024-06-18 19:53:52 +02:00
var codesList = ProcessHelper.ParseCodes(codes);
var processedLayer = db.Layers
.Where(x => x.ParentId == processWorker!.Id
&& !x.IsDeleted)
.OrderByDescending(x => x.CreatedAt)
.FirstOrDefault();
2024-06-18 19:53:52 +02:00
var isNew = false;
if (processedLayer == null)
{
isNew = true;
processedLayer = new Layer
{
Id = Guid.NewGuid(),
Source = "",
Type = LayerType.processed,
ParentId = processWorker!.Id,
2024-06-18 19:53:52 +02:00
Number = db.Layers.Count() + 1
};
processedLayer.Name = $"L{processedLayer.Number}-P-{year}/{month}-AB-T3";
processedLayer.CreatedById = Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D");
processedLayer.ModifiedById = Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D");
processedLayer.CreatedAt = DateTime.UtcNow;
processedLayer.ModifiedAt = DateTime.UtcNow;
}
processedLayer.Sources = new List<ProcessSource>();
processedLayer.ModifiedById = Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D");
processedLayer.ModifiedAt = DateTime.UtcNow;
2024-06-18 19:53:52 +02:00
var dataSources = sources!.Select(source => db.Layers.Where(x => x.Type == LayerType.processed && !x.IsDeleted && x.Name != null && x.Name.Contains($"{year}/{month}-{source.Desc1}-T3"))
.Include(x => x.Records)
2024-06-18 19:53:52 +02:00
.FirstOrDefault())
.OfType<Layer>()
.ToList();
if (dataSources.Count == 0)
{
throw new Exception($"DataSources are empty");
}
2024-06-18 19:53:52 +02:00
var newRecords = dataSources
.SelectMany(x => x.Records!)
.Where(x => codesList.Contains(int.Parse(x.Code!)))
.Select(x =>
{
2024-06-18 19:53:52 +02:00
var newRecord = new Record
{
Id = Guid.NewGuid(),
Code = x.Code,
CreatedAt = DateTime.UtcNow,
ModifiedAt = DateTime.UtcNow
};
2023-12-28 14:26:29 +01:00
for (var i = 1; i < 33; i++)
{
2024-06-18 19:53:52 +02:00
ProcessHelper.SetValue(newRecord, i, ProcessHelper.GetValue(x, i));
}
return newRecord;
})
.ToList();
if (isNew)
{
db.Layers.Add(processedLayer);
}
else
{
db.Layers.Update(processedLayer);
}
controller.SaveRecords(processedLayer.Id, newRecords, Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D"));
db.SaveChanges();
}
}
}