Estou travando um tópico via API (gem) e consigo travá-lo e destravá-lo se esse for o único comando na cadeia. No entanto, quando crio uma postagem no tópico antes e o próximo comando é travá-lo, ele cria a postagem, travá-lo, mas imediatamente o destrava!
Isso é realmente estranho. Se eu apenas criar a postagem ou apenas travar o tópico, funciona perfeitamente. Mas se tentar fazer os dois, o tópico acaba sendo destravado no final, por conta própria!
Por enquanto, decidi apenas não travar o tópico, mas achei por bem postar aqui caso seja algo que mereça investigação.
Você está travando o tópico imediatamente após criar uma postagem? Se sim, tente esperar um minuto e depois tentar travá-lo novamente para ver se ele permanece travado. Apenas uma sugestão.
Bom achado. Vou investigar isso assim que tiver oportunidade. Combinar essas duas chamadas de API em uma única solicitação não segue estritamente como é feito na interface (não é possível criar um novo tópico bloqueado), então é provável que esse endpoint de API não esteja verificando a flag de bloqueio ou esteja definindo-a como desbloqueado por padrão ao criar o tópico.
Verifiquei isso um pouco hoje apenas para ver se seria uma mudança rápida, mas muitas das ações que você pode aplicar a tópicos são melhor executadas após a criação do tópico. Uma razão é que deveríamos realmente usar o TopicStatusUpdater para fechar o tópico, em vez de atualizá-lo diretamente no banco de dados. No entanto, quando atualizamos o status durante a criação do tópico, parece que o tópico é fechado antes que a primeira postagem seja criada, resultando nesse comportamento estranho:
Por enquanto, você precisará fazer duas solicitações de API separadas: uma solicitação POST para /posts.json e, se isso for bem-sucedido, uma solicitação PUT para /t/{id}/status.json.
Ah, entendi, eu entendi errado exatamente o que você estava fazendo. Eu achei que você estava tentando criar um tópico e fechá-lo ao mesmo tempo. No entanto, minha resposta anterior ainda vale ao criar uma postagem em um tópico existente e, em seguida, fechá-lo ao mesmo tempo. Você deve apenas usar os dois endpoints separados.
Acabei de testar seu código localmente e está funcionando bem para mim. O que não está funcionando? Estou assumindo que o post está sendo criado, mas o tópico simplesmente não está sendo fechado? Se for esse o caso, você poderia usar puts e exibir o resultado de @client.change_topic_status(slug, topic_id, params)?
Como observação lateral, ao analisar o código no gem da API, não estamos usando a variável slug de forma alguma, então farei uma atualização para removê-la.