85 lines
2.7 KiB
C#
85 lines
2.7 KiB
C#
// backend/src/Titulares.Api/Data/TitularRepositorio.cs
|
|
|
|
using Dapper;
|
|
using Microsoft.Data.SqlClient;
|
|
using Titulares.Api.Models;
|
|
|
|
namespace Titulares.Api.Data;
|
|
|
|
public class TitularRepositorio
|
|
{
|
|
private readonly string _connectionString;
|
|
|
|
public TitularRepositorio(IConfiguration configuration)
|
|
{
|
|
_connectionString = configuration.GetConnectionString("DefaultConnection")!;
|
|
}
|
|
|
|
private SqlConnection CreateConnection() => new SqlConnection(_connectionString);
|
|
|
|
public async Task<IEnumerable<Titular>> ObtenerTodosAsync()
|
|
{
|
|
using var connection = CreateConnection();
|
|
// Siempre los obtenemos en el orden correcto
|
|
return await connection.QueryAsync<Titular>("SELECT * FROM Titulares ORDER BY OrdenVisual");
|
|
}
|
|
|
|
public async Task<int> CrearManualAsync(CrearTitularDto titularDto)
|
|
{
|
|
using var connection = CreateConnection();
|
|
// Obtenemos el OrdenVisual más bajo (el primero) y restamos 1 para ponerlo al inicio.
|
|
var minOrdenVisual = await connection.ExecuteScalarAsync<int?>("SELECT MIN(OrdenVisual) FROM Titulares") ?? 1;
|
|
var nuevoOrden = minOrdenVisual - 1;
|
|
|
|
var sql = @"
|
|
INSERT INTO Titulares (Texto, ModificadoPorUsuario, EsEntradaManual, OrdenVisual, Tipo, Fuente)
|
|
VALUES (@Texto, 0, 1, @OrdenVisual, 'Manual', 'Usuario');
|
|
SELECT CAST(SCOPE_IDENTITY() as int);
|
|
";
|
|
return await connection.ExecuteScalarAsync<int>(sql, new { titularDto.Texto, OrdenVisual = nuevoOrden });
|
|
}
|
|
|
|
public async Task<bool> ActualizarTextoAsync(int id, ActualizarTitularDto titularDto)
|
|
{
|
|
using var connection = CreateConnection();
|
|
var sql = @"
|
|
UPDATE Titulares
|
|
SET Texto = @Texto, ModificadoPorUsuario = 1, Tipo = 'Edited'
|
|
WHERE Id = @Id;
|
|
";
|
|
var affectedRows = await connection.ExecuteAsync(sql, new { titularDto.Texto, Id = id });
|
|
return affectedRows > 0;
|
|
}
|
|
|
|
public async Task<bool> EliminarAsync(int id)
|
|
{
|
|
using var connection = CreateConnection();
|
|
var affectedRows = await connection.ExecuteAsync("DELETE FROM Titulares WHERE Id = @Id", new { Id = id });
|
|
return affectedRows > 0;
|
|
}
|
|
|
|
public async Task<bool> ActualizarOrdenAsync(List<ReordenarTitularDto> ordenes)
|
|
{
|
|
using var connection = CreateConnection();
|
|
await connection.OpenAsync();
|
|
using var transaction = connection.BeginTransaction();
|
|
|
|
try
|
|
{
|
|
foreach (var item in ordenes)
|
|
{
|
|
await connection.ExecuteAsync(
|
|
"UPDATE Titulares SET OrdenVisual = @NuevoOrden WHERE Id = @Id",
|
|
item,
|
|
transaction: transaction);
|
|
}
|
|
transaction.Commit();
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
transaction.Rollback();
|
|
return false;
|
|
}
|
|
}
|
|
} |