feat: Sistema de Usuarios - Backend CRUD + JWT Auth (Issue #1)

Implementación fundacional del proyecto PruebaGentle:
- Arquitectura Clean/Hexagonal: Core, Infrastructure, API
- 6 Stored Procedures para CRUD + autenticación
- JWT authentication con BCrypt password hashing
- Docker Compose (SQL Server + Backend)
- Solución .NET 10 con Dapper + SqlClient

Closes #1
This commit is contained in:
2026-03-31 17:36:04 -03:00
commit 21e7e7b044
34 changed files with 795 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
CREATE TABLE Users (
Id INT IDENTITY(1,1) PRIMARY KEY,
Username NVARCHAR(50) NOT NULL UNIQUE,
PasswordHash NVARCHAR(255) NOT NULL,
Email NVARCHAR(100) NOT NULL UNIQUE,
NombreCompleto NVARCHAR(100) NOT NULL,
FechaCreacion DATETIME NOT NULL DEFAULT GETDATE()
);

View File

@@ -0,0 +1,13 @@
CREATE OR ALTER PROCEDURE sp_User_Create
@Username NVARCHAR(50),
@PasswordHash NVARCHAR(255),
@Email NVARCHAR(100),
@NombreCompleto NVARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Users (Username, PasswordHash, Email, NombreCompleto)
OUTPUT INSERTED.Id, INSERTED.Username, INSERTED.Email, INSERTED.NombreCompleto, INSERTED.FechaCreacion
VALUES (@Username, @PasswordHash, @Email, @NombreCompleto);
END

View File

@@ -0,0 +1,9 @@
CREATE OR ALTER PROCEDURE sp_User_Delete
@Id INT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Users
WHERE Id = @Id;
END

View File

@@ -0,0 +1,9 @@
CREATE OR ALTER PROCEDURE sp_User_GetAll
AS
BEGIN
SET NOCOUNT ON;
SELECT Id, Username, Email, NombreCompleto, FechaCreacion
FROM Users
ORDER BY FechaCreacion DESC;
END

View File

@@ -0,0 +1,10 @@
CREATE OR ALTER PROCEDURE sp_User_GetById
@Id INT
AS
BEGIN
SET NOCOUNT ON;
SELECT Id, Username, Email, NombreCompleto, FechaCreacion
FROM Users
WHERE Id = @Id;
END

View File

@@ -0,0 +1,10 @@
CREATE OR ALTER PROCEDURE sp_User_GetByUsername
@Username NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT Id, Username, PasswordHash, Email, NombreCompleto, FechaCreacion
FROM Users
WHERE Username = @Username;
END

View File

@@ -0,0 +1,16 @@
CREATE OR ALTER PROCEDURE sp_User_Update
@Id INT,
@Username NVARCHAR(50),
@Email NVARCHAR(100),
@NombreCompleto NVARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
UPDATE Users
SET Username = @Username,
Email = @Email,
NombreCompleto = @NombreCompleto
OUTPUT INSERTED.Id, INSERTED.Username, INSERTED.Email, INSERTED.NombreCompleto, INSERTED.FechaCreacion
WHERE Id = @Id;
END