From dac2833dd1b8d65a45c2e8a34cd84376481c8465 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Mon, 16 Feb 2026 01:01:22 -0500 Subject: [PATCH] chore: Remove ExportData script Co-Authored-By: Claude Opus 4.6 --- scripts/ExportData/ExportData.csproj | 14 -- scripts/ExportData/Program.cs | 191 --------------------------- 2 files changed, 205 deletions(-) delete mode 100644 scripts/ExportData/ExportData.csproj delete mode 100644 scripts/ExportData/Program.cs diff --git a/scripts/ExportData/ExportData.csproj b/scripts/ExportData/ExportData.csproj deleted file mode 100644 index a4eb1de..0000000 --- a/scripts/ExportData/ExportData.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - diff --git a/scripts/ExportData/Program.cs b/scripts/ExportData/Program.cs deleted file mode 100644 index 4ae6f94..0000000 --- a/scripts/ExportData/Program.cs +++ /dev/null @@ -1,191 +0,0 @@ -using System.Text.Encodings.Web; -using System.Text.Json; -using System.Text.Json.Serialization; -using CutList.Web.Data; -using CutList.Web.Data.Entities; -using Microsoft.EntityFrameworkCore; - -// Build DbContext with the same connection string -var connectionString = "Server=localhost\\SQLEXPRESS;Database=CutListDb;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True"; - -var options = new DbContextOptionsBuilder() - .UseSqlServer(connectionString) - .Options; - -using var db = new ApplicationDbContext(options); - -// Load all catalog data -var materials = await db.Materials - .Include(m => m.Dimensions) - .Include(m => m.StockItems.Where(s => s.IsActive)) - .ThenInclude(s => s.SupplierOfferings.Where(o => o.IsActive)) - .Where(m => m.IsActive) - .OrderBy(m => m.Shape).ThenBy(m => m.SortOrder) - .AsNoTracking() - .ToListAsync(); - -var suppliers = await db.Suppliers - .Where(s => s.IsActive) - .OrderBy(s => s.Name) - .AsNoTracking() - .ToListAsync(); - -var cuttingTools = await db.CuttingTools - .Where(t => t.IsActive) - .OrderBy(t => t.Name) - .AsNoTracking() - .ToListAsync(); - -// Build export DTOs to avoid circular references and keep it clean -var export = new ExportData -{ - ExportedAt = DateTime.UtcNow, - Suppliers = suppliers.Select(s => new SupplierDto - { - Name = s.Name, - ContactInfo = s.ContactInfo, - Notes = s.Notes - }).ToList(), - CuttingTools = cuttingTools.Select(t => new CuttingToolDto - { - Name = t.Name, - KerfInches = t.KerfInches, - IsDefault = t.IsDefault - }).ToList(), - Materials = materials.Select(m => new MaterialDto - { - Shape = m.Shape.ToString(), - Type = m.Type.ToString(), - Grade = m.Grade, - Size = m.Size, - Description = m.Description, - Dimensions = MapDimensions(m.Dimensions), - StockItems = m.StockItems.OrderBy(s => s.LengthInches).Select(s => new StockItemDto - { - LengthInches = s.LengthInches, - Name = s.Name, - QuantityOnHand = s.QuantityOnHand, - Notes = s.Notes, - SupplierOfferings = s.SupplierOfferings.Select(o => new SupplierOfferingDto - { - SupplierName = suppliers.FirstOrDefault(sup => sup.Id == o.SupplierId)?.Name ?? "Unknown", - PartNumber = o.PartNumber, - SupplierDescription = o.SupplierDescription, - Price = o.Price, - Notes = o.Notes - }).ToList() - }).ToList() - }).ToList() -}; - -// Serialize to JSON -var jsonOptions = new JsonSerializerOptions -{ - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping -}; - -var json = JsonSerializer.Serialize(export, jsonOptions); - -// Determine output path - default to CutList.Web/Data/SeedData/ -var repoRoot = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..")); -var outputPath = args.Length > 0 - ? args[0] - : Path.Combine(repoRoot, "CutList.Web", "Data", "SeedData", "oneals-catalog.json"); - -var outputDir = Path.GetDirectoryName(Path.GetFullPath(outputPath))!; -Directory.CreateDirectory(outputDir); - -await File.WriteAllTextAsync(outputPath, json); - -var fullPath = Path.GetFullPath(outputPath); -Console.WriteLine($"Exported {export.Materials.Count} materials, {export.Materials.Sum(m => m.StockItems.Count)} stock items, {export.Suppliers.Count} suppliers"); -Console.WriteLine($"Written to: {fullPath}"); - -// --- Helper --- -static DimensionsDto? MapDimensions(MaterialDimensions? dim) => dim switch -{ - RoundBarDimensions d => new DimensionsDto { Diameter = d.Diameter }, - RoundTubeDimensions d => new DimensionsDto { OuterDiameter = d.OuterDiameter, Wall = d.Wall }, - FlatBarDimensions d => new DimensionsDto { Width = d.Width, Thickness = d.Thickness }, - SquareBarDimensions d => new DimensionsDto { Size = d.Size }, - SquareTubeDimensions d => new DimensionsDto { Size = d.Size, Wall = d.Wall }, - RectangularTubeDimensions d => new DimensionsDto { Width = d.Width, Height = d.Height, Wall = d.Wall }, - AngleDimensions d => new DimensionsDto { Leg1 = d.Leg1, Leg2 = d.Leg2, Thickness = d.Thickness }, - ChannelDimensions d => new DimensionsDto { Height = d.Height, Flange = d.Flange, Web = d.Web }, - IBeamDimensions d => new DimensionsDto { Height = d.Height, WeightPerFoot = d.WeightPerFoot }, - PipeDimensions d => new DimensionsDto { NominalSize = d.NominalSize, Wall = d.Wall, Schedule = d.Schedule }, - _ => null -}; - -// --- DTOs --- -class ExportData -{ - public DateTime ExportedAt { get; set; } - public List Suppliers { get; set; } = []; - public List CuttingTools { get; set; } = []; - public List Materials { get; set; } = []; -} - -class SupplierDto -{ - public string Name { get; set; } = ""; - public string? ContactInfo { get; set; } - public string? Notes { get; set; } -} - -class CuttingToolDto -{ - public string Name { get; set; } = ""; - public decimal KerfInches { get; set; } - public bool IsDefault { get; set; } -} - -class MaterialDto -{ - public string Shape { get; set; } = ""; - public string Type { get; set; } = ""; - public string? Grade { get; set; } - public string Size { get; set; } = ""; - public string? Description { get; set; } - public DimensionsDto? Dimensions { get; set; } - public List StockItems { get; set; } = []; -} - -class DimensionsDto -{ - public decimal? Diameter { get; set; } - public decimal? OuterDiameter { get; set; } - public decimal? Width { get; set; } - public decimal? Height { get; set; } - public decimal? Thickness { get; set; } - public decimal? Wall { get; set; } - public decimal? Size { get; set; } - public decimal? Leg1 { get; set; } - public decimal? Leg2 { get; set; } - public decimal? Flange { get; set; } - public decimal? Web { get; set; } - public decimal? WeightPerFoot { get; set; } - public decimal? NominalSize { get; set; } - public string? Schedule { get; set; } -} - -class StockItemDto -{ - public decimal LengthInches { get; set; } - public string? Name { get; set; } - public int QuantityOnHand { get; set; } - public string? Notes { get; set; } - public List SupplierOfferings { get; set; } = []; -} - -class SupplierOfferingDto -{ - public string SupplierName { get; set; } = ""; - public string? PartNumber { get; set; } - public string? SupplierDescription { get; set; } - public decimal? Price { get; set; } - public string? Notes { get; set; } -}