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:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user