'No se ha iniciado sesión']); exit(); } $user = Login::get_user(); try { switch ($_SERVER['REQUEST_METHOD']) { case 'GET': // Fetch all puestos $facultad_id = $user->facultad['facultad_id'] ?? -1; $puestos = array_map( fn($p) => array( ...$p, 'materias' => $db->where('puesto_id', $p['puesto_id']) ->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT') ->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]), 'encargado' => $db->where('puesto_id', $p['puesto_id']) ->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT') ->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']), ), $db->orderBy('puesto.nombre', 'desc') ->where('facultad_id', $facultad_id) ->get(tableName: 'puesto', columns: 'puesto_id, nombre'), ); echo json_encode($puestos); break; case 'POST': $raw_input = file_get_contents('php://input'); $input_data = json_decode($raw_input, true); if (!$input_data || !isset($input_data['puesto_nombre'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Datos inválidos']); exit(); } $puesto = $db->insert('puesto', [ 'nombre' => $input_data['puesto_nombre'], 'facultad_id' => $user->facultad['facultad_id'], ], ['puesto_id', 'nombre', 'facultad_id']); echo json_encode( array( ...$puesto, 'materias' => [], 'encargado' => null, ), ); break; case 'PUT': $raw_input = file_get_contents('php://input'); $input_data = json_decode($raw_input, true); if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Datos inválidos']); exit(); } $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia'); $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario'); foreach ($input_data['materias'] as $materia_id) { $db->insert('puesto_materia', [ 'puesto_id' => $input_data['puesto_id'], 'materia_id' => $materia_id, ]); } if (isset($input_data['usuario_id'])) $db->insert('puesto_usuario', [ 'puesto_id' => $input_data['puesto_id'], 'usuario_id' => $input_data['usuario_id'], ]); echo json_encode(['msg' => 'Puesto actualizado exitosamente']); break; case 'DELETE': $raw_input = file_get_contents('php://input'); $input_data = json_decode($raw_input, true); if (!$input_data || !isset($input_data['puesto_id'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Datos inválidos']); exit(); } $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto'); echo json_encode(['msg' => 'Puesto eliminado exitosamente']); break; default: header('HTTP/1.1 405 Method Not Allowed'); echo json_encode(['error' => 'Método no permitido']); break; } } catch (PDOException $e) { echo json_encode([ 'error' => $e->getMessage(), 'query' => $db->getLastQuery(), 'exception' => $e->getTraceAsString() ]); }