using Microsoft.AspNetCore.Mvc; namespace OI.Metrology.Server.ApiControllers; using OI.Metrology.Shared.DataModels; using OI.Metrology.Shared.Models.Stateless; using System.Data; using System.Text.Json; [Route("api/[controller]")] public class ExportController : Controller, IExportController { private readonly IExportRepository _ExportRepository; private readonly IMetrologyRepository _MetrologyRepository; public ExportController(IExportRepository exportRepository, IMetrologyRepository metrologyRepository) { _ExportRepository = exportRepository; _MetrologyRepository = metrologyRepository; } private static string? GetJson(Stream stream) { string? result; if (!stream.CanRead) result = null; else { Task task = new StreamReader(stream).ReadToEndAsync(); result = task.Result; } return result; } private static HeaderCommon GetHeaderCommon(Stream stream) { HeaderCommon? result; string? json = GetJson(stream); result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json); result ??= new(); return result; } [HttpGet] [Route("export")] public IActionResult GetExport() => Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body))); [HttpGet] [Route("headers")] public IActionResult GetHeaders() => Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); [HttpGet] [Route("logistics")] public IActionResult GetLogistics() => Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); [HttpGet] [Route("pdsf")] [Route("processDataStandardFormat")] public IActionResult GetProcessDataStandardFormat() => Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body))); [HttpPost] [Route("export")] public IActionResult PostExport() => Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body))); [HttpPost] [Route("headers")] public IActionResult PostHeaders() => Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); [HttpPost] [Route("logistics")] public IActionResult PostLogistics() => Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); [HttpPost] [Route("pdsf")] [Route("processDataStandardFormat")] public IActionResult PostProcessDataStandardFormat() => Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body))); [HttpGet] [Route("{toolTypeId}/export")] public IActionResult GetExportData(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend) { Result r = _ExportRepository.GetExportData(_MetrologyRepository, toolTypeId, datebegin, dateend); string json = Newtonsoft.Json.JsonConvert.SerializeObject(r); return Content(json); } [HttpGet] [Route("{toolTypeId}/csv")] public IActionResult GetCSVExport(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend, [FromQuery] string? filename) { string r = _ExportRepository.GetCSVExport(_MetrologyRepository, toolTypeId, datebegin, dateend); return Content(r); } }