From 2f56a542a8353d141c78c5496b89306ab2bdaec2 Mon Sep 17 00:00:00 2001 From: AJ Date: Mon, 27 Oct 2025 20:08:15 -0400 Subject: [PATCH] refactor(materials): query materials from database instead of materials.lfn\n\n- Inject PepDB and project MaterialHeader to API shape (MaterialData).\n- Preserve response shape: Number, Name (from Description), Grade, Density, Thickness.\n- Filter single-material by Material string or ID, then map. --- .../Controllers/MaterialsController.cs | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/PepApi.Core/Controllers/MaterialsController.cs b/PepApi.Core/Controllers/MaterialsController.cs index 4d3f8ca..db75880 100644 --- a/PepApi.Core/Controllers/MaterialsController.cs +++ b/PepApi.Core/Controllers/MaterialsController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; -using PepApi.Core.Configuration; +using Microsoft.EntityFrameworkCore; +using PepLib.Data; using PepLib.IO; namespace PepApi.Core.Controllers; @@ -9,33 +9,57 @@ namespace PepApi.Core.Controllers; [Route("materials")] public class MaterialsController : ControllerBase { - private readonly string _materialsFile; + private readonly PepDB _db; - public MaterialsController(IOptions settings) + public MaterialsController(PepDB db) { - _materialsFile = settings.Value.MaterialsFile; + _db = db; } [HttpGet] public async Task>> GetMaterials() { - var reader = new MaterialDataReader(); - await Task.Run(() => reader.Read(_materialsFile)); + var headers = await _db.MaterialHeaders + .AsNoTracking() + .ToListAsync(); - return Ok(reader.Materials); + var materials = headers + .Select(m => new MaterialData + { + Number = int.TryParse(m.Material, out var num) ? num : m.ID, + Name = m.Description, + Grade = m.MatGrade, + Density = m.Density, + Thickness = m.Thickness + }) + .ToList(); + + return Ok(materials); } [HttpGet("{materialNo:int}")] public async Task>> GetMaterial(int materialNo) { - var reader = new MaterialDataReader(); - await Task.Run(() => reader.Read(_materialsFile)); + var headers = await _db.MaterialHeaders + .AsNoTracking() + .Where(m => m.Material == materialNo.ToString() || m.ID == materialNo) + .ToListAsync(); - var materials = reader.Materials.Where(m => m.Number == materialNo).ToList(); + var materials = headers + .Select(m => new MaterialData + { + Number = int.TryParse(m.Material, out var num) ? num : m.ID, + Name = m.Description, + Grade = m.MatGrade, + Density = m.Density, + Thickness = m.Thickness + }) + .Where(m => m.Number == materialNo) + .ToList(); if (!materials.Any()) return NotFound(new { message = $"Material {materialNo} not found" }); return Ok(materials); } -} \ No newline at end of file +}