Skip to content

test - #15

Closed
AlejoRau wants to merge 1 commit into
mainfrom
testings
Closed

test#15
AlejoRau wants to merge 1 commit into
mainfrom
testings

Conversation

@AlejoRau

Copy link
Copy Markdown
Owner

No description provided.

@github-actions

Copy link
Copy Markdown

1 Sección: CODIGO CORREGIDO

class UserController {
  constructor() {
    this.users = [];
  }

  addUser(req, res) {
    const { id, name, email } = req.body;
    if (!id || !name || !email) {
      return res.status(400).json({ error: "Los campos id, name y email son obligatorios." });
    }
    this.users.push({ id, name, email });
    res.status(201).json({ message: "Usuario creado exitosamente.", user: req.body });
  }

  getAllUsers(req, res) {
    res.status(200).json(this.users);
  }

  getUserById(req, res) {
    const user = this.users.find(u => u.id == req.params.id);
    if (user) {
      res.status(200).json(user);
    } else {
      res.status(404).json({ error: "Usuario no encontrado." });
    }
  }

  updateUser(req, res) {
    const index = this.users.findIndex(u => u.id == req.params.id);
    if (index !== -1) {
      // Validacion basica para el cuerpo de la peticion
      const { id, name, email } = req.body;
      if (!id || !name || !email) {
        return res.status(400).json({ error: "El cuerpo de la solicitud debe contener id, name y email." });
      }
      this.users[index] = req.body;
      res.status(200).json({ message: "Usuario actualizado exitosamente." });
    } else {
      res.status(404).json({ error: "Usuario no encontrado." });
    }
  }

  deleteUser(req, res) {
    const initialLength = this.users.length;
    this.users = this.users.filter(u => u.id != req.params.id);
    if (this.users.length < initialLength) {
        res.status(200).json({ message: "Usuario eliminado." });
    } else {
        res.status(404).json({ error: "Usuario no encontrado para eliminar." });
    }
  }
}

2 Sección: PROBLEMAS DETECTADOS
🔴 (GRAVE): El formato de respuesta de los metodos no es JSON. Los metodos updateUser y deleteUser usan res.send() con una cadena de texto, lo que devuelve una respuesta de tipo text/plain. Esto viola la regla interna #3 ("Los métodos deben retornar JSON siempre").

🔴 (GRAVE): Falta de validacion de datos en los metodos POST y PUT. El metodo addUser y updateUser aceptan cualquier objeto en req.body sin verificar que contenga los campos minimos necesarios (ej. id, nombre, email). Esto puede llevar a la creacion de registros corruptos o incompletos y viola la regla #4.

🟡 (MEDIA): Codigo duplicado y nomenclatura incorrecta. Se agrego un metodo deletepERSON que es identico en funcionalidad a deleteUser. El nombre no sigue las convenciones de camelCase y es redundante. Deberia ser eliminado.

🟡 (MEDIA): Uso incorrecto de estados HTTP y manejo de errores. Los metodos no utilizan codigos de estado HTTP para informar sobre el resultado de la operacion (ej. 201 para creacion, 404 para no encontrado, 400 para datos invalidos). Se devuelve el mismo tipo de respuesta para exito y para error, lo que dificulta la integracion con clientes.

🟡 (MEDIA): Documentacion degradada en README.md. Se elimino un diagrama de flujo util (mermaid) y se reemplazo por texto sin valor ("FLUJO DISTINTO .SAS"). Esto reduce la calidad de la documentacion del proyecto.

🟡 (MEDIA): Potencial falta de pruebas unitarias. La regla #5 exige un metodo de prueba unitario. Aunque no se proporciona el archivo de pruebas, la baja calidad del codigo sugiere que no se han ejecutado o escrito pruebas.

🟢 (BUENA): La nomenclatura de la clase (UserController) cumple con la regla #1.

🟢 (BUENA): Los nombres de los endpoints (/users) son en plural, cumpliendo con la regla #2.

3 Sección: DOCUMENTACION PROPUESTA

/**
 * @class UserController
 * Gestiona las operaciones CRUD para los usuarios.
 */
class UserController {
  constructor() {
    /** @private */
    this.users = [];
  }

  /**
   * Agrega un nuevo usuario a la lista.
   * Requiere 'id', 'name' y 'email' en el cuerpo de la solicitud.
   * @param {object} req - El objeto de solicitud de Express.
   * @param {object} res - El objeto de respuesta de Express.
   */
  addUser(req, res) {
    // ... implementacion
  }

  /**
   * Obtiene la lista completa de usuarios.
   * @param {object} req - El objeto de solicitud de Express.
   * @param {object} res - El objeto de respuesta de Express.
   */
  getAllUsers(req, res) {
    // ... implementacion
  }

  /**
   * Obtiene un usuario especifico por su ID.
   * @param {object} req - El objeto de solicitud de Express, con el ID en los parametros.
   * @param {object} res - El objeto de respuesta de Express.
   */
  getUserById(req, res) {
    // ... implementacion
  }

  /**
   * Actualiza un usuario existente identificado por su ID.
   * @param {object} req - El objeto de solicitud de Express, con el ID en los parametros y los nuevos datos en el cuerpo.
   * @param {object} res - El objeto de respuesta de Express.
   */
  updateUser(req, res) {
    // ... implementacion
  }

  /**
   * Elimina un usuario de la lista por su ID.
   * @param {object} req - El objeto de solicitud de Express, con el ID en los parametros.
   * @param {object} res - El objeto de respuesta de Express.
   */
  deleteUser(req, res) {
    // ... implementacion
  }
}
```��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
 Análisis completado. Resultado guardado en pull_request.log


<!-- Sticky Pull Request Comment -->

@AlejoRau AlejoRau closed this Nov 11, 2025
@AlejoRau
AlejoRau deleted the testings branch November 11, 2025 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant