Fase 1: Inicialización del Backend .NET 10, Configuración de Dapper, Autenticación JWT y Entidades Base

This commit is contained in:
2025-12-17 13:08:21 -03:00
parent 15305c681c
commit eda016f93f
33 changed files with 819 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
using Dapper;
using SIGCM.Domain.Entities;
using SIGCM.Domain.Interfaces;
using SIGCM.Infrastructure.Data;
namespace SIGCM.Infrastructure.Repositories;
public class CategoryRepository : ICategoryRepository
{
private readonly IDbConnectionFactory _connectionFactory;
public CategoryRepository(IDbConnectionFactory connectionFactory)
{
_connectionFactory = connectionFactory;
}
public async Task<IEnumerable<Category>> GetAllAsync()
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QueryAsync<Category>("SELECT * FROM Categories");
}
public async Task<Category?> GetByIdAsync(int id)
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QueryFirstOrDefaultAsync<Category>("SELECT * FROM Categories WHERE Id = @Id", new { Id = id });
}
public async Task<int> AddAsync(Category category)
{
using var conn = _connectionFactory.CreateConnection();
var sql = @"
INSERT INTO Categories (ParentId, Name, Slug, Active)
VALUES (@ParentId, @Name, @Slug, @Active);
SELECT CAST(SCOPE_IDENTITY() as int);";
return await conn.QuerySingleAsync<int>(sql, category);
}
public async Task UpdateAsync(Category category)
{
using var conn = _connectionFactory.CreateConnection();
var sql = @"
UPDATE Categories
SET ParentId = @ParentId, Name = @Name, Slug = @Slug, Active = @Active
WHERE Id = @Id";
await conn.ExecuteAsync(sql, category);
}
public async Task DeleteAsync(int id)
{
using var conn = _connectionFactory.CreateConnection();
await conn.ExecuteAsync("DELETE FROM Categories WHERE Id = @Id", new { Id = id });
}
public async Task<IEnumerable<Category>> GetSubCategoriesAsync(int parentId)
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QueryAsync<Category>("SELECT * FROM Categories WHERE ParentId = @ParentId", new { ParentId = parentId });
}
}

View File

@@ -0,0 +1,44 @@
using Dapper;
using SIGCM.Domain.Entities;
using SIGCM.Domain.Interfaces;
using SIGCM.Infrastructure.Data;
namespace SIGCM.Infrastructure.Repositories;
public class OperationRepository : IOperationRepository
{
private readonly IDbConnectionFactory _connectionFactory;
public OperationRepository(IDbConnectionFactory connectionFactory)
{
_connectionFactory = connectionFactory;
}
public async Task<IEnumerable<Operation>> GetAllAsync()
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QueryAsync<Operation>("SELECT * FROM Operations");
}
public async Task<Operation?> GetByIdAsync(int id)
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QueryFirstOrDefaultAsync<Operation>("SELECT * FROM Operations WHERE Id = @Id", new { Id = id });
}
public async Task<int> AddAsync(Operation operation)
{
using var conn = _connectionFactory.CreateConnection();
var sql = @"
INSERT INTO Operations (Name)
VALUES (@Name);
SELECT CAST(SCOPE_IDENTITY() as int);";
return await conn.QuerySingleAsync<int>(sql, operation);
}
public async Task DeleteAsync(int id)
{
using var conn = _connectionFactory.CreateConnection();
await conn.ExecuteAsync("DELETE FROM Operations WHERE Id = @Id", new { Id = id });
}
}

View File

@@ -0,0 +1,34 @@
using Dapper;
using SIGCM.Domain.Entities;
using SIGCM.Domain.Interfaces;
using SIGCM.Infrastructure.Data;
namespace SIGCM.Infrastructure.Repositories;
public class UserRepository : IUserRepository
{
private readonly IDbConnectionFactory _connectionFactory;
public UserRepository(IDbConnectionFactory connectionFactory)
{
_connectionFactory = connectionFactory;
}
public async Task<User?> GetByUsernameAsync(string username)
{
using var conn = _connectionFactory.CreateConnection();
return await conn.QuerySingleOrDefaultAsync<User>(
"SELECT * FROM Users WHERE Username = @Username",
new { Username = username });
}
public async Task<int> CreateAsync(User user)
{
using var conn = _connectionFactory.CreateConnection();
var sql = @"
INSERT INTO Users (Username, PasswordHash, Role, Email)
VALUES (@Username, @PasswordHash, @Role, @Email);
SELECT CAST(SCOPE_IDENTITY() as int);";
return await conn.QuerySingleAsync<int>(sql, user);
}
}