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.Extensions.Options;
using PepApi.Core.Configuration;
using Microsoft.EntityFrameworkCore;
using PepLib.Data;
using PepLib.IO;
namespace PepApi.Core.Controllers;
@@ -9,29 +9,53 @@ namespace PepApi.Core.Controllers;
[Route("materials")]
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]
public async Task<ActionResult<List<MaterialData>>> 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<ActionResult<List<MaterialData>>> 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" });