Entrada 8

Fecha: 24/03/2025

Inicio: [13:30] | Fin: [14:30] y Inicio: [18:30] | Fin: [21:25] || Total: [4 horas]

 Presentes: Matías Benavides Sandoval y Sebastián Ramírez Abarca

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
¿QUÉ HICIMOS HOY?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sesión de cierre: 
Ajuste de SPs según estándares de la rúbrica y revisión del documento de análisis. 
1. Reescribimos ambos SPs con todos los estándares que exige la rúbrica: 
- Parámetros con prefijos @in y @out 
- BEGIN TRY / END TRY + BEGIN CATCH / END CATCH 
- Códigos de error semánticos (0 = éxito, 50001 = duplicado, 50099 = error inesperado) 
- SET NOCOUNT ON / OFF 
- Alias para tablas (AS e) 
- Una declaración por línea 
- Palabras reservadas en MAYÚSCULAS 
- Comentarios internos explicando cada bloque 

2. Actualizamos empleadoController.ts para que use los nuevos nombres de parámetros: 
- @inNombre, @inSalario, @outResultCode 
- Manejo de los tres códigos de retorno posibles 

3. Revisamos el documento de análisis de resultados contra la rúbrica del profesor. Se identificaron los pendientes: llenar la tabla de resultados, agregar los diagramas de arquitectura y completar las métricas.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROBLEMAS ENCONTRADOS Y CÓMO SE RESOLVIERON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Problema 1:
Descripción: Error de sintaxis en sp_InsertEmpleado y sp_GetEmpleados

"message": "Incorrect syntax near 'ERROR_MESSAGE'.",
"message": "Incorrect syntax near ')'.  Expecting '(', or SELECT.",

Es exactamente el mismo en ambos

Solucion: Lo que importa es SSMS, donde no salta ningun error al ser ejecutado y el SP se ve bien. Ignorár esos errores rojos en VS Code, no afectan nada.

Causa: Son falsos positivos de VS Code no entiende bien la sintaxis de RAISEERROR con variables

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DUDAS Y DIVERGENCIAS DE CRITERIO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Discutimos si el sp_GetEmpleados necesitaba el parámetro @outResultCode dado que solo hace un SELECT. Decidimos mantenerlo para seguir el mismo estándar que el SP de inserción y demostrar manejo consistente de códigos de retorno.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AVANCE DEL CÓDIGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
USE EmpleadosDB;
GO

-- =====================================================
-- SP 1: Obtiene la lista de empleados ordenada por
--      nombre de forma ascendente
-- =====================================================
DROP PROCEDURE IF EXISTS dbo.sp_GetEmpleados;
GO

CREATE PROCEDURE dbo.sp_GetEmpleados
    @outResultCode INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN TRY

        -- Retorna todos los empleados en orden alfabético
        SELECT
            e.Id
            , e.Nombre
            , e.Salario
        FROM dbo.Empleado AS e
        ORDER BY e.Nombre ASC;

        SET @outResultCode = 0;

    END TRY
    BEGIN CATCH

        DECLARE @ErrorMsg NVARCHAR(4000);
        SET @ErrorMsg = ERROR_MESSAGE();

        SET @outResultCode = 50099;

        RAISERROR(
            'Error en sp_GetEmpleados: %s',
            16,
            1,
            @ErrorMsg
        );

    END CATCH;

    SET NOCOUNT OFF;
END;
GO
USE EmpleadosDB;
GO

-- =====================================================
-- SP 2: Inserta un nuevo empleado validando que el
--      nombre no esté duplicado en la BD
-- =====================================================
DROP PROCEDURE IF EXISTS dbo.sp_InsertEmpleado;
GO

CREATE PROCEDURE dbo.sp_InsertEmpleado
    @inNombre      VARCHAR(128)
    , @inSalario     MONEY
    , @outResultCode INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE
        @ERROR_EXITO      INT = 0
        , @ERROR_DUPLICADO INT = 50001
        , @ERROR_INESPERADO INT = 50099;

    BEGIN TRY

        -- Validar duplicado (sin distinguir mayúsculas/minúsculas o espacios extra)
        IF (
            EXISTS (
                SELECT 1
                FROM dbo.Empleado AS e
                WHERE (LOWER(LTRIM(RTRIM(e.Nombre))) = LOWER(LTRIM(RTRIM(@inNombre))))
            )
        )
        BEGIN
            SET @outResultCode = @ERROR_DUPLICADO;
            RETURN;
        END

        -- Insertar el nuevo empleado
        INSERT INTO dbo.Empleado
            ( Nombre
            , Salario )
        VALUES
            ( @inNombre
            , @inSalario );

        SET @outResultCode = @ERROR_EXITO;

    END TRY
    BEGIN CATCH

        DECLARE @ErrorMsg NVARCHAR(4000);
        SET @ErrorMsg = ERROR_MESSAGE();

        SET @outResultCode = @ERROR_INESPERADO;

        RAISERROR(
            'Error en sp_InsertEmpleado: %s',
            16,
            1,
            @ErrorMsg
        );

    END CATCH;

    SET NOCOUNT OFF;
END;
GO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MORALEJAS / BUENAS PRÁCTICAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Usar códigos de error semánticos (50001, 50099)  hace el código más mantenible y autodocumentado. Ademas de seguir los estandares
- No siempre lo que es un error en VS Code es un error, a veces son falsos positivos, y hay que verificar que en el SMSS no salten los errores

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRÓXIMA SESIÓN: ¿QUÉ SIGUE?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Sebastián termina index.html e index.js con la tabla de empleados funcionando. 
- Llenar la tabla de resultados del documento con los porcentajes reales de cada ítem.
- Agregar los diagramas de arquitectura al documento. 
- Completar las métricas finales (horas totales, commits, líneas de código). 


Comentarios

Entradas más populares de este blog

Entrada 4