169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| // backend/Controllers/MemoriasRamController.cs
 | |
| 
 | |
| using Dapper;
 | |
| using Inventario.API.Data;
 | |
| using Inventario.API.Models;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| 
 | |
| namespace Inventario.API.Controllers
 | |
| {
 | |
|   [ApiController]
 | |
|   [Route("api/[controller]")]
 | |
|   public class MemoriasRamController : ControllerBase
 | |
|   {
 | |
|     private readonly DapperContext _context;
 | |
| 
 | |
|     public MemoriasRamController(DapperContext context)
 | |
|     {
 | |
|       _context = context;
 | |
|     }
 | |
| 
 | |
|     [HttpGet]
 | |
|     public async Task<IActionResult> Consultar()
 | |
|     {
 | |
|       var query = @"
 | |
|             SELECT
 | |
|                 MIN(Id) as Id,
 | |
|                 MIN(part_number) as PartNumber,
 | |
|                 Fabricante,
 | |
|                 Tamano,
 | |
|                 Velocidad
 | |
|             FROM
 | |
|                 dbo.memorias_ram
 | |
|             WHERE
 | |
|                 Fabricante IS NOT NULL AND Fabricante != ''
 | |
|             GROUP BY
 | |
|                 Fabricante,
 | |
|                 Tamano,
 | |
|                 Velocidad
 | |
|             ORDER BY
 | |
|                 Fabricante, Tamano, Velocidad;";
 | |
| 
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         var memorias = await connection.QueryAsync<MemoriaRam>(query);
 | |
|         return Ok(memorias);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     [HttpGet("{id}")]
 | |
|     public async Task<IActionResult> ConsultarDetalle(int id)
 | |
|     {
 | |
|       var query = "SELECT Id, part_number as PartNumber, Fabricante, Tamano, Velocidad FROM dbo.memorias_ram WHERE Id = @Id;";
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         var memoria = await connection.QuerySingleOrDefaultAsync<MemoriaRam>(query, new { Id = id });
 | |
|         if (memoria == null)
 | |
|         {
 | |
|           return NotFound("Módulo de memoria RAM no encontrado.");
 | |
|         }
 | |
|         return Ok(memoria);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     [HttpPost]
 | |
|     public async Task<IActionResult> Ingresar([FromBody] List<MemoriaRam> memorias)
 | |
|     {
 | |
|       var queryCheck = @"SELECT * FROM dbo.memorias_ram WHERE 
 | |
|                                     (part_number = @PartNumber OR (part_number IS NULL AND @PartNumber IS NULL)) AND
 | |
|                                     (fabricante = @Fabricante OR (fabricante IS NULL AND @Fabricante IS NULL)) AND
 | |
|                                     tamano = @Tamano AND
 | |
|                                     (velocidad = @Velocidad OR (velocidad IS NULL AND @Velocidad IS NULL));";
 | |
| 
 | |
|       var queryInsert = @"INSERT INTO dbo.memorias_ram (part_number, fabricante, tamano, velocidad) 
 | |
|                                 VALUES (@PartNumber, @Fabricante, @Tamano, @Velocidad); 
 | |
|                                 SELECT CAST(SCOPE_IDENTITY() as int);";
 | |
| 
 | |
|       var resultados = new List<object>();
 | |
| 
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         foreach (var memoria in memorias)
 | |
|         {
 | |
|           var existente = await connection.QuerySingleOrDefaultAsync<MemoriaRam>(queryCheck, memoria);
 | |
| 
 | |
|           if (existente == null)
 | |
|           {
 | |
|             var nuevoId = await connection.ExecuteScalarAsync<int>(queryInsert, memoria);
 | |
|             memoria.Id = nuevoId;
 | |
|             resultados.Add(new { action = "created", registro = memoria });
 | |
|           }
 | |
|           else
 | |
|           {
 | |
|             resultados.Add(new { action = "exists", registro = existente });
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       return Ok(resultados);
 | |
|     }
 | |
| 
 | |
|     [HttpPut("{id}")]
 | |
|     public async Task<IActionResult> Actualizar(int id, [FromBody] MemoriaRam memoria)
 | |
|     {
 | |
|       var query = @"UPDATE dbo.memorias_ram SET 
 | |
|                                 part_number = @PartNumber, 
 | |
|                                 fabricante = @Fabricante, 
 | |
|                                 tamano = @Tamano, 
 | |
|                                 velocidad = @Velocidad 
 | |
|                             WHERE Id = @Id;";
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         var filasAfectadas = await connection.ExecuteAsync(query, new { memoria.PartNumber, memoria.Fabricante, memoria.Tamano, memoria.Velocidad, Id = id });
 | |
|         if (filasAfectadas == 0)
 | |
|         {
 | |
|           return NotFound("Módulo de memoria RAM no encontrado.");
 | |
|         }
 | |
| 
 | |
|         memoria.Id = id;
 | |
|         return Ok(memoria);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     [HttpDelete("{id}")]
 | |
|     public async Task<IActionResult> Borrar(int id)
 | |
|     {
 | |
|       var deleteAssociationsQuery = "DELETE FROM dbo.equipos_memorias_ram WHERE memoria_ram_id = @Id;";
 | |
|       var deleteRamQuery = "DELETE FROM dbo.memorias_ram WHERE Id = @Id;";
 | |
| 
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         connection.Open();
 | |
|         using (var transaction = connection.BeginTransaction())
 | |
|         {
 | |
|           try
 | |
|           {
 | |
|             await connection.ExecuteAsync(deleteAssociationsQuery, new { Id = id }, transaction: transaction);
 | |
|             var filasAfectadas = await connection.ExecuteAsync(deleteRamQuery, new { Id = id }, transaction: transaction);
 | |
|             if (filasAfectadas == 0)
 | |
|             {
 | |
|               transaction.Rollback();
 | |
|               return NotFound("Módulo de memoria RAM no encontrado.");
 | |
|             }
 | |
|             transaction.Commit();
 | |
|             return NoContent();
 | |
|           }
 | |
|           catch
 | |
|           {
 | |
|             transaction.Rollback();
 | |
|             throw;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     [HttpGet("buscar/{termino}")]
 | |
|     public async Task<IActionResult> BuscarMemoriasRam(string termino)
 | |
|     {
 | |
|       var query = @"SELECT Id, part_number as PartNumber, Fabricante, Tamano, Velocidad 
 | |
|                       FROM dbo.memorias_ram 
 | |
|                       WHERE Fabricante LIKE @SearchTerm OR part_number LIKE @SearchTerm
 | |
|                       ORDER BY Fabricante, Tamano;";
 | |
| 
 | |
|       using (var connection = _context.CreateConnection())
 | |
|       {
 | |
|         var memorias = await connection.QueryAsync<MemoriaRam>(query, new { SearchTerm = $"%{termino}%" });
 | |
|         return Ok(memorias);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| } |