using Microsoft.AspNetCore.Mvc; using OI.Metrology.Shared.Models; using OI.Metrology.Shared.Models.Stateless; using System.Collections.Specialized; using System.Text.Json; using System.Web; namespace OI.Metrology.Wafer.Counter.ApiControllers; [Route("api/v1/file-share")] public class FileShareController : Controller, IFileShareController { private readonly IFileShareRepository _FileShareRepository; public FileShareController(IFileShareRepository fileShareRepository) => _FileShareRepository = fileShareRepository; [HttpGet("copy-file")] public IResult CopyFile(string from, string to) { _FileShareRepository.CopyFile(from, to); return Results.Ok(); } [HttpGet("move-file")] public IResult MoveFile(string from, string to) { _FileShareRepository.MoveFile(from, to); return Results.Ok(); } [HttpGet("file-write")] public IResult FileWrite(string path, string contents) { _FileShareRepository.FileWrite(path, contents); return Results.Ok(); } private static Dictionary GetKeyValuePairs(QueryString queryString) { Dictionary results = []; if (queryString.HasValue) { NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString.Value); foreach (string? key in nameValueCollection.AllKeys) { if (key is null) continue; results.Add(key, nameValueCollection[key]); } } return results; } private static CharacterizationParameters? GetCharacterizationParameters(QueryString queryString) { CharacterizationParameters? result; Dictionary keyValuePairs = GetKeyValuePairs(queryString); string json = JsonSerializer.Serialize(keyValuePairs); result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, CharacterizationParametersSourceGenerationContext.Default.CharacterizationParameters); return result; } [HttpGet("archive-data")] public IActionResult ArchiveData() { List results; CharacterizationParameters? characterizationParameters = GetCharacterizationParameters(Request.QueryString); ArgumentNullException.ThrowIfNull(characterizationParameters); results = _FileShareRepository.GetArchiveData(characterizationParameters); return Json(results); } }