PiezometerController.cs 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.EntityFrameworkCore;
  8. using WebApplication3.Models;
  9. using WebApplication3.Clases;
  10. namespace WebApplication3.Controllers
  11. {
  12. [Route("api/[controller]")]
  13. [ApiController]
  14. public class PiezometerController : ControllerBase
  15. {
  16. private readonly AquiferContext _context;
  17. private TsPiezometerController tsPiezometerController;
  18. public PiezometerController(AquiferContext context)
  19. {
  20. _context = context;
  21. tsPiezometerController = new TsPiezometerController(context);
  22. }
  23. // GET: api/Piezometer
  24. [HttpGet]
  25. public async Task<ActionResult<IEnumerable<Piezometer>>> GetPiezmeters()
  26. {
  27. return await _context.Piezometers.ToListAsync();
  28. }
  29. // GET: api/Piezometer/5
  30. [HttpGet("{id}")]
  31. public async Task<ActionResult<Piezometer>> GetPiezometer(uint id)
  32. {
  33. var piezometer = await _context.Piezometers.FindAsync(id);
  34. if (piezometer == null)
  35. {
  36. return NotFound();
  37. }
  38. return piezometer;
  39. }
  40. [HttpPost("Import")]
  41. public async Task<ActionResult<bool>> ImportPiezometersFromCSV(DatosPostSimulacion data)
  42. {
  43. Parser parser = new();
  44. string file = Constants.PathExtract + data.Fichero.Nombre;
  45. bool result = true;
  46. //Saving the file into hard drive
  47. try
  48. {
  49. byte[] tempBytes = Convert.FromBase64String(data.Fichero.Base64);
  50. System.IO.File.WriteAllBytes(file, tempBytes);
  51. }
  52. catch (Exception ex)
  53. {
  54. return Problem(ex.Message);
  55. }
  56. //parsing the information from the file we've just saved
  57. PiezometerData[] piezometers = parser.parsePiezometerCSV(file);
  58. try
  59. {
  60. foreach (PiezometerData p in piezometers)
  61. {
  62. Piezometer piezometer = p.ToPiezometer();
  63. await this.PostPiezometer(piezometer);
  64. foreach (TimeSerieInterno tsi in p.Rates)
  65. {
  66. TsPiezometer tsp = new();
  67. tsp.PiezometerId = piezometer.Id;
  68. tsp.Date = tsi.DateIn;
  69. tsp.Day = tsi.Hora;
  70. tsp.Quote = tsi.Valor;
  71. await tsPiezometerController.PostTsPiezometer(tsp);
  72. }
  73. }
  74. }
  75. catch(Exception ex)
  76. {
  77. Logger.WriteLog("Error while importing piezometers");
  78. Logger.WriteLog(ex.Message);
  79. Logger.WriteLog(ex.InnerException.Message);
  80. }
  81. return result;
  82. }
  83. // POST: api/Piezometer
  84. // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
  85. [NonAction]
  86. public async Task<ActionResult<Piezometer>> PostPiezometer(Piezometer piezometer)
  87. {
  88. _context.Piezometers.Add(piezometer);
  89. try
  90. {
  91. Logger.WriteLog("Guardar cambios async");
  92. await _context.SaveChangesAsync();
  93. }
  94. catch (DbUpdateException ex)
  95. {
  96. if (PiezometerExists(piezometer.Id))
  97. {
  98. return Conflict();
  99. }
  100. else
  101. {
  102. Logger.WriteLog("FALLO AL GUARDAR PIEZOMETRO");
  103. Logger.WriteLog(ex.Message);
  104. Logger.WriteLog(ex.InnerException.Message);
  105. throw;
  106. }
  107. }
  108. return CreatedAtAction("GetPiezometria", new { id = piezometer.Id }, piezometer);
  109. }
  110. // DELETE: api/Pozo/5
  111. [HttpDelete("{id}")]
  112. public async Task<IActionResult> DeletePiezometer(uint id)
  113. {
  114. var piezometer = await _context.Piezometers.FindAsync(id);
  115. if (piezometer == null)
  116. {
  117. return NotFound();
  118. }
  119. _context.Piezometers.Remove(piezometer);
  120. await _context.SaveChangesAsync();
  121. return NoContent();
  122. }
  123. private bool PiezometerExists(uint id)
  124. {
  125. return _context.Piezometers.Any(e => e.Id == id);
  126. }
  127. }
  128. }