Estamos utilizando la función external_id para la autocreación de Temas en nuestra integración. Sin embargo, he notado que si eliminamos un Tema, no podemos crear uno nuevo con el mismo external_id y en su lugar recibimos el error:
{'action': 'create_post', 'errors': ['External has already been taken']}
¿Es posible reutilizar el mismo external_id después de que se elimina un Tema que lo utilizó?
Soy consciente de una solución alternativa discutida en otros lugares que utiliza campos personalizados en objetos de Usuario, sin embargo, los objetos de Tema no parecen admitir campos personalizados. ¿Hay alguna manera?
Eso se debe a que los temas eliminados se marcan como eliminados y no se eliminan de la base de datos. Querer reasociar un ID con otro tema parece una mala idea (pero no lo preguntaste). Puedes forzar la eliminación real del tema (puede que Introducing permanently delete post functionality sea la forma).
El desafío es que el valor que estamos utilizando para el external_id del Tema es difícil de cambiar (operación manual) debido a una limitación en la aplicación con la que nos estamos integrando (CatalogIt, que expone una API de solo lectura). A menudo eliminamos y recreamos automáticamente los Temas mientras desarrollamos (esto es todo lo que hace la integración: crea temas de discusión para elementos en CatalogIt cuando un usuario hace clic en un enlace de “discutir este elemento”), lo que nos obliga a cambiar este valor cada vez. Si el valor no se cambia después de eliminar el tema y un usuario hace clic en el enlace “discutir este elemento” más tarde, nos encontramos con el error “external already taken”.
Quizás archivar en lugar de eliminar sea una mejor idea, o quizás exista un mecanismo de ocultar/mostrar en el que podamos apoyarnos. No estoy familiarizado con Discourse, se necesita investigar, profundizaré y veré qué puedo encontrar.