Stiamo utilizzando la funzionalità external_id per la creazione automatica di argomenti nella nostra integrazione (https://github.com/linuxdojo/catalogbot). Noto tuttavia che se eliminiamo un argomento, non possiamo crearne uno nuovo con lo stesso external_id e invece riceviamo l’errore:
{'action': 'create_post', 'errors': ['External has already been taken']}
È in qualche modo possibile riutilizzare lo stesso external_id dopo che un argomento che lo utilizzava è stato eliminato?
Sono a conoscenza di una soluzione alternativa discussa altrove che utilizza campi personalizzati sugli oggetti Utente, tuttavia gli oggetti Argomento non sembrano supportare campi personalizzati. Esiste un modo?
Questo perché gli argomenti eliminati vengono contrassegnati come eliminati e non rimossi dal database. Voler riassociare un ID a un altro argomento sembra una cattiva idea (ma non l’hai chiesto). Puoi forzare l’effettiva eliminazione dell’argomento (potrebbe essere il modo Introduzione alla funzionalità di eliminazione permanente dei post).
La sfida è che il valore che stiamo utilizzando per external_id dell’Argomento è difficile da modificare (operazione manuale) a causa di una limitazione nell’app con cui ci stiamo integrando (CatalogIt - espone un’API di sola lettura). Spesso eliminiamo manualmente e ricreiamo automaticamente gli Argomenti durante lo sviluppo (questo è tutto ciò che fa l’integrazione - crea argomenti di discussione per gli elementi in CatalogIt quando un utente fa clic su un link “discuti questo elemento”), costringendoci a modificare questo valore ogni volta. Se il valore non viene modificato dopo l’eliminazione dell’argomento e un utente fa clic in seguito sul link “discuti questo elemento”, si verifica l’errore “external already taken”.
Forse archiviare invece di eliminare è un’idea migliore, o forse esiste un meccanismo di nascondi/mostra a cui possiamo appoggiarci. Non ho familiarità con Discourse, è necessaria un po’ di ricerca, approfondirò e vedrò cosa riesco a trovare.