using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using WebApplication3.Models; using WebApplication3.Clases; namespace WebApplication3.Controllers { [Route("api/[controller]")] [ApiController] public class PiezometerController : ControllerBase { private readonly AquiferContext _context; private TsPiezometerController tsPiezometerController; public PiezometerController(AquiferContext context) { _context = context; tsPiezometerController = new TsPiezometerController(context); } // GET: api/Piezometer [HttpGet] public async Task>> GetPiezmeters() { return await _context.Piezometers.ToListAsync(); } // GET: api/Piezometer/5 [HttpGet("{id}")] public async Task> GetPiezometer(uint id) { var piezometer = await _context.Piezometers.FindAsync(id); if (piezometer == null) { return NotFound(); } return piezometer; } [HttpPost("Import")] public async Task> ImportPiezometersFromCSV(DatosPostSimulacion data) { Parser parser = new(); string file = Constants.PathExtract + data.Fichero.Nombre; bool result = true; //Saving the file into hard drive try { byte[] tempBytes = Convert.FromBase64String(data.Fichero.Base64); System.IO.File.WriteAllBytes(file, tempBytes); } catch (Exception ex) { return Problem(ex.Message); } //parsing the information from the file we've just saved PiezometerData[] piezometers = parser.parsePiezometerCSV(file); try { foreach (PiezometerData p in piezometers) { Piezometer piezometer = p.ToPiezometer(); await this.PostPiezometer(piezometer); foreach (TimeSerieInterno tsi in p.Rates) { TsPiezometer tsp = new(); tsp.PiezometerId = piezometer.Id; tsp.Date = tsi.DateIn; tsp.Day = tsi.Hora; tsp.Quote = tsi.Valor; await tsPiezometerController.PostTsPiezometer(tsp); } } } catch(Exception ex) { Logger.WriteLog("Error while importing piezometers"); Logger.WriteLog(ex.Message); Logger.WriteLog(ex.InnerException.Message); } return result; } // POST: api/Piezometer // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [NonAction] public async Task> PostPiezometer(Piezometer piezometer) { _context.Piezometers.Add(piezometer); try { Logger.WriteLog("Guardar cambios async"); await _context.SaveChangesAsync(); } catch (DbUpdateException ex) { if (PiezometerExists(piezometer.Id)) { return Conflict(); } else { Logger.WriteLog("FALLO AL GUARDAR PIEZOMETRO"); Logger.WriteLog(ex.Message); Logger.WriteLog(ex.InnerException.Message); throw; } } return CreatedAtAction("GetPiezometria", new { id = piezometer.Id }, piezometer); } // DELETE: api/Pozo/5 [HttpDelete("{id}")] public async Task DeletePiezometer(uint id) { var piezometer = await _context.Piezometers.FindAsync(id); if (piezometer == null) { return NotFound(); } _context.Piezometers.Remove(piezometer); await _context.SaveChangesAsync(); return NoContent(); } private bool PiezometerExists(uint id) { return _context.Piezometers.Any(e => e.Id == id); } } }