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.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<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" });
|
||||
|
||||
return Ok(materials);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user