id_usuario = $id_usuario; // Asigna el ID (por defecto es null si es un registro nuevo) $this->nombre_usuario = $nombre_usuario; // Asigna el nombre de usuario recibido $this->contrasena = $contrasena; // Asigna la contraseña recibida $this->email = $email; // Asigna el email recibido } // --- GETTERS Y SETTERS (Métodos públicos para acceder y modificar los datos privados de forma segura) --- // Getter para obtener el ID del usuario (es de solo lectura, no tiene setter) public function getIdUsuario(): ?int { return $this->id_usuario; } // Getter para obtener el nombre de usuario public function getNombreUsuario(): string { return $this->nombre_usuario; } // Setter para cambiar el nombre de usuario desde fuera de la clase public function setNombreUsuario(string $nombre_usuario): void { $this->nombre_usuario = $nombre_usuario; } // Getter para obtener la contraseña public function getContrasena(): string { return $this->contrasena; } // Setter para cambiar la contraseña desde fuera de la clase public function setContrasena(string $contrasena): void { $this->contrasena = $contrasena; } // Getter para obtener el correo electrónico public function getEmail(): string { return $this->email; } // Setter para cambiar el correo electrónico desde fuera de la clase public function setEmail(string $email): void { $this->email = $email; } // --- MÉTODOS DE BASE DE DATOS (Lógica de negocio e interacción con SQL) --- // Método para registrar/insertar el usuario actual en la base de datos public function registrar() { // Obtenemos la conexión llamando a tu función unificada del proyecto $conexion = conexionBD(); // Si devuelve un array significa que ocurrió un error controlado al conectar if (is_array($conexion)) { return $conexion; } try { // Preparamos la consulta SQL usando marcadores (:nombre, :pass, :email) para evitar inyecciones SQL $sql = "INSERT INTO usuario (nombre_usuario, contrasena, email) VALUES (:nombre, :pass, :email)"; $stmt = $conexion->prepare($sql); // Prepara la consulta en el servidor de la base de datos // Encriptamos la contraseña con el algoritmo BCRYPT antes de guardarla por seguridad $passHash = password_hash($this->contrasena, PASSWORD_BCRYPT); // Ejecutamos la consulta pasando los valores reales que sustituirán a los marcadores $stmt->execute([ ':nombre' => $this->nombre_usuario, ':pass' => $passHash, // Guardamos la contraseña ya encriptada ':email' => $this->email ]); // Si la inserción fue exitosa, recuperamos el ID generado por la base de datos y lo asignamos al objeto $this->id_usuario = (int)$conexion->lastInsertId(); // Devolvemos una respuesta de éxito idéntica al formato del resto de tus clases return [ 'exito' => 'Usuario registrado correctamente', 'exito_tecnico' => $this->id_usuario ]; } catch (PDOException $error) { // Si ocurre algún fallo en la consulta, capturamos el error y devolvemos la respuesta controlada return [ 'error' => 'Ocurrió un error al registrar el usuario.', 'error_tecnico' => $error->getMessage() ]; } } // Método estático para buscar un usuario por su ID sin necesidad de instanciar el objeto previamente public static function buscarPorId($id) { // Obtenemos la conexión llamando a tu función unificada del proyecto $conexion = conexionBD(); // Si devuelve un array significa que ocurrió un error controlado al conectar if (is_array($conexion)) { return $conexion; } try { // Preparamos la consulta SQL filtrando por el ID recibido $sql = "SELECT * FROM usuario WHERE id_usuario = :id"; $stmt = $conexion->prepare($sql); $stmt->execute([':id' => $id]); // Ejecutamos la consulta // Obtenemos el registro en forma de array asociativo $datos = $stmt->fetch(PDO::FETCH_ASSOC); // Si el usuario existe en la base de datos, creamos y devolvemos un nuevo objeto Usuario con sus datos if ($datos) { return new Usuario($datos['nombre_usuario'], $datos['contrasena'], $datos['email'], $datos['id_usuario']); } // Si la consulta termina pero no encuentra filas, devolvemos un aviso de error controlado return [ 'error' => 'No se encontró ningún usuario con ese ID.' ]; } catch (PDOException $error) { // Si ocurre algún fallo en la consulta SQL, capturamos el error return [ 'error' => 'Ocurrió un error al buscar el usuario.', 'error_tecnico' => $error->getMessage() ]; } } }