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.

This commit is contained in:
AJ
2025-10-27 20:08:15 -04:00
committed by AJ Isaacs
parent 44a2af7429
commit 2f56a542a8

View File

@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.EntityFrameworkCore;
using PepApi.Core.Configuration; using PepLib.Data;
using PepLib.IO; using PepLib.IO;
namespace PepApi.Core.Controllers; namespace PepApi.Core.Controllers;
@@ -9,33 +9,57 @@ namespace PepApi.Core.Controllers;
[Route("materials")] [Route("materials")]
public class MaterialsController : ControllerBase public class MaterialsController : ControllerBase
{ {
private readonly string _materialsFile; private readonly PepDB _db;
public MaterialsController(IOptions<PepSettings> settings) public MaterialsController(PepDB db)
{ {
_materialsFile = settings.Value.MaterialsFile; _db = db;
} }
[HttpGet] [HttpGet]
public async Task<ActionResult<List<MaterialData>>> GetMaterials() public async Task<ActionResult<List<MaterialData>>> GetMaterials()
{ {
var reader = new MaterialDataReader(); var headers = await _db.MaterialHeaders
await Task.Run(() => reader.Read(_materialsFile)); .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}")] [HttpGet("{materialNo:int}")]
public async Task<ActionResult<List<MaterialData>>> GetMaterial(int materialNo) public async Task<ActionResult<List<MaterialData>>> GetMaterial(int materialNo)
{ {
var reader = new MaterialDataReader(); var headers = await _db.MaterialHeaders
await Task.Run(() => reader.Read(_materialsFile)); .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()) if (!materials.Any())
return NotFound(new { message = $"Material {materialNo} not found" }); return NotFound(new { message = $"Material {materialNo} not found" });
return Ok(materials); return Ok(materials);
} }
} }