Problemi con la creazione di un post e il blocco dell'argomento tramite API

Sto bloccando un argomento tramite l’API (gem) e riesco a bloccarlo e sbloccarlo se questo è l’unico comando nella catena, ma quando creo un post nell’argomento in precedenza e il comando successivo è bloccarlo, il post viene creato, poi l’argomento viene bloccato, ma immediatamente dopo viene sbloccato!

È davvero strano. Se creo solo il post, o blocco solo l’argomento, funziona correttamente. Ma se provo a fare entrambe le cose, alla fine l’argomento viene sbloccato spontaneamente!

Per ora ho deciso di non bloccare l’argomento, ma ho pensato di pubblicare qui nel caso sia qualcosa che vale la pena investigare.

3 Mi Piace

Lo blocchi immediatamente dopo aver creato un post nell’argomento? Se sì, prova ad aspettare un minuto, poi riprova a bloccarlo e vedi se rimane bloccato. Solo un’idea.

1 Mi Piace

Ottima scoperta, lo esaminerò appena avrò la possibilità. Unire queste due chiamate API in un’unica richiesta non segue esattamente come viene fatto nell’interfaccia utente (non è possibile creare un nuovo argomento bloccato), quindi è probabile che quell’endpoint API non stia cercando il flag di blocco o che lo imposti di default su sbloccato durante la creazione dell’argomento.

3 Mi Piace

Ho esaminato la questione oggi per vedere se fosse una modifica rapida, ma molte delle azioni che puoi applicare ai topic vengono eseguite al meglio dopo che il topic è stato creato. Un motivo è che dovremmo davvero utilizzare TopicStatusUpdater per chiudere il topic invece di aggiornarlo direttamente nel database, ma quando aggiorniamo lo stato durante la creazione del topic sembra che il topic venga chiuso prima che il primo post venga creato, causando questo comportamento strano:

Per ora dovrai effettuare due richieste API separate: una richiesta POST a /posts.json e, se questa ha successo, una richiesta PUT a /t/{id}/status.json.

2 Mi Piace

Ciao Blake, il topic per cui stavo provando esiste già :slight_smile:

Questo è stato il mio processo:

  bot.create_post(topic_id, post_content)
  bot.switch_to_master_bot!("system")
  bot.lock_topic("", topic_id)

  def create_post(topic_id, post_content)
    @client.create_post(
      topic_id: "#{topic_id}",
      raw: "#{post_content}",
    )
  end

  def lock_topic(slug, topic_id)
    params = { status: 'closed', enabled: true }
    @client.change_topic_status(slug, topic_id, params)
  end

Sto usando il Discourse API Gem.

Stai dicendo che quanto sopra dovrebbe funzionare (o sta funzionando per te)?

1 Mi Piace

Ah, capisco, ho frainteso esattamente cosa stavi facendo. Pensavo stessi cercando di creare un argomento e chiuderlo contemporaneamente. Tuttavia, la mia risposta precedente rimane valida quando si crea un post in un argomento esistente e lo si chiude nello stesso momento. Dovresti semplicemente utilizzare i due endpoint separati.

3 Mi Piace

L’API Gem utilizza gli endpoint corretti/separati, Blake? (Pensavo che lo facessero?)

I metodi client.create_post e client.change_topic_status fanno parte dell’API Gem :slight_smile:

2 Mi Piace

Sì, quei metodi utilizzano gli endpoint corretti :slightly_smiling_face:

3 Mi Piace

Dovrebbe funzionare allora? (Ma non funziona :sob:)

1 Mi Piace

Ho appena testato il tuo codice in locale e funziona correttamente per me. Cosa non funziona? Presumo che il post venga creato, ma l’argomento non venga chiuso? Se è così, potresti usare puts e stampare il risultato di @client.change_topic_status(slug, topic_id, params)?

Come nota a margine, guardando il codice nella gemma API, non stiamo utilizzando affatto la variabile slug, quindi aggiornerò il codice per rimuoverla.

2 Mi Piace