Проблема с созданием темы с external_id

Здравствуйте,

  1. Создал тему (используя REST API) с полем “external_id”.
  2. Удалил эту тему. Я предполагаю, что тема останется в базе данных, но будет скрыта от пользователей.
  3. Попытался создать ту же тему с тем же “external_id”, но получил ошибку: “External has already been taken” (Внешний идентификатор уже занят).

Если тема удалена с точки зрения пользователя, то он должен иметь возможность создать новую тему с теми же данными. Однако этого не происходит, и кажется, что невозможно использовать тот же “external_id”. Похоже на ошибку.

2022/10/12 12:33:32 resp: &{Status:404 Not Found StatusCode:404 Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Content-Type:[application/json; charset=utf-8] Date:[Wed, 12 Oct 2022 10:33:32 GMT] Referrer-Policy:[strict-origin-when-cross-origin] Server:[nginx] Vary:[Accept-Encoding] X-Content-Type-Options:[nosniff] X-Discourse-Route:[topics/show_by_external_id] X-Discourse-Username:[mohan43u] X-Download-Options:[noopen] X-Frame-Options:[SAMEORIGIN] X-Permitted-Cross-Domain-Policies:[none] X-Request-Id:[26b86048-937c-451c-ac0c-b23dbcd3c8ca] X-Runtime:[0.013603] X-Xss-Protection:[0]] Body:0xc000183bc0 ContentLength:-1 TransferEncoding:[] Close:false Uncompressed:true Trailer:map[] Request:0xc00030a800 TLS:0xc0000d22c0}
2022/10/12 12:33:32 req: &{Method:GET URL:https://forums.tamillinuxcommunity.org/t/external_id/7N69MKNwQAs.json Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Api-Key:[] Api-Username:[mohan43u]] Body:<nil> GetBody:<nil> ContentLength:0 TransferEncoding:[] Close:false Host:forums.tamillinuxcommunity.org Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc0000260b8}
2022/10/12 12:33:32 {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
2022/10/12 12:33:32 uploading  https://www.youtube.com/watch?v=7N69MKNwQAs
2022/10/12 12:33:32 {"title":"[Youtube] ஆண்ட்ராய்டுக்கான கட்டற்ற மென்பொருள் | FOSS for Android | F-Droid | Tamil","raw":"https://www.youtube.com/watch?v=7N69MKNwQAs\nஇந்த காணொளியில் F-Droid எவ்வாறு பயன்படுத்துவது? அதன் பயன் என்ன ? - என்பதை காண்போம்.\n\nகாணொளி வழங்கியவர்: \nமணிமாறன், விழுப்புரம் கட்டற்ற மென்பொருள் குழுமம்\n\nF-Droid: http://fdroid.org/\n\n#fdroid #fossforandroid #tamil #android #vglug","category":3,"external_id":"7N69MKNwQAs"}

2022/10/12 12:33:33 failed to create Topic: https://www.youtube.com/watch?v=7N69MKNwQAs
2022/10/12 12:33:33 err: <nil>
2022/10/12 12:33:33 resp: &{Status:422 Unprocessable Entity StatusCode:422 Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Cache-Control:[no-cache, no-store] Content-Type:[application/json; charset=utf-8] Date:[Wed, 12 Oct 2022 10:33:33 GMT] Referrer-Policy:[strict-origin-when-cross-origin] Server:[nginx] X-Content-Type-Options:[nosniff] X-Discourse-Route:[posts/create] X-Discourse-Username:[mohan43u] X-Download-Options:[noopen] X-Frame-Options:[SAMEORIGIN] X-Permitted-Cross-Domain-Policies:[none] X-Request-Id:[217f7585-269a-48b3-ac5e-215e02e76bdb] X-Runtime:[0.060606] X-Xss-Protection:[0]] Body:{cs:0xc00032c180} ContentLength:-1 TransferEncoding:[] Close:false Uncompressed:false Trailer:map[] Request:0xc000352100 TLS:0xc0000d22c0}
2022/10/12 12:33:33 req: &{Method:POST URL:https://forums.tamillinuxcommunity.org/posts.json Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Api-Key:[] Api-Username:[mohan43u] Content-Type:[application/json]] Body:0xc0005b0228 GetBody:0x6b0e40 ContentLength:733 TransferEncoding:[] Close:false Host:forums.tamillinuxcommunity.org Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc0000260b8}
2022/10/12 12:33:33 {"action":"create_post","errors":["Title has already been used","External has already been taken"]}

Что бы произошло, если бы первая тема была восстановлена?

Нет способа восстановить первую тему, я не вижу никакой иконки или кнопки для восстановления.

Привет, Мохан. :wave:

Я думаю, что имел в виду @RGJ: это не ошибка, так как Discourse по умолчанию использует подход «мягкого удаления». В этом контексте будет использоваться external_id, что предусмотрено по замыслу. :+1:

Иконка для восстановления выглядит так:

Также есть опция в гаечном ключе темы:

Ничего подобного нет

Суть в том, что такую тему можно восстановить, и в этом случае появятся две темы с одинаковым внешним ID. Внешний ID должен быть уникальным для всех тем, включая удалённые. Как отметил @maiki, это сделано намеренно.

можно восстановить? как? Я тоже хочу восстановить эту тему, и моя проблема исчезнет. Но способа восстановить эту тему нет.

Либо Discourse должен разрешать использовать external_id, который используется для удалённой темы, либо должен быть какой-то способ восстановить удалённую тему по этому external_id. Я не вижу ни одного из этих вариантов.

Так что это, очевидно, ошибка.

Сообщения выше моего явно указывают на то, что темы могут быть восстановлены. То, что вы, похоже, не можете восстановить именно эту тему, не означает, что это ошибка; скорее всего, дело в правах доступа или настройках.

Вы администратор форума?

Кстати, пожалуйста, перестаньте классифицировать это как #баг.

Стоит ли классифицировать это как ошибку?

Нет, не следует.

Пожалуйста, используйте безопасный режим и проверьте, сможете ли вы это сделать. Если нет, подробно опишите, что именно вы наблюдаете вместо этого. Скриншоты будут очень полезны.

Дайте знать, если я делаю что-то не так.

Кнопка «Восстановить» находится на теме, помеченной как «удалённая». Поэтому вам нужно открыть эту тему и восстановить её оттуда.

Доступ к соответствующему меню из списка удалённых постов пользователя невозможен. Чтобы увидеть эту опцию в меню, нужно перейти непосредственно к теме:


@Mohan43u, отвечает ли это на ваш первоначальный вопрос о том, как используется external_id? :slight_smile:

Да, но @Mohan43u прав: из списка «удалённых сообщений» туда перейти нельзя. Так как же попасть в эту тему?

Кроме того, ?status=deleted больше, похоже, не работает?

Нет способа перейти к удалённой теме, кроме как со страницы моего профиля. Она совершенно недоступна из категорий.

/latest?status=deleted работает у меня на тестовом сайте?


Ах, теперь я понял. Видео действительно помогло. :slight_smile: Да, в настоящее время заголовок темы не отображается в удалённых темах из этого представления. Это уже поднималось ранее, но, возможно, стоит обратить на это внимание ещё раз. :+1:

Попробуйте перейти по ссылке [ВашСайт]/latest?status=deleted и посмотрите, сможете ли вы открыть тему из списка тем там?

И теперь, когда я нашёл другую тему, есть ещё один совет: можно перейти к удалённой теме через логи администраторов, если это поможет:

Совершенно чистый форум, все тесты пройдены на утро сегодняшнего дня. Когда я восстанавливаю тему, она снова появляется в разделе «Последние».

Отличное предложение!!
Но было бы очень здорово, если бы удалённый пост в профиле тоже позволял перейти к нему.

Думаю, ваш пост скрыт баннером призыва к действию в приветственной теме. Попробуйте скрыть его в консоли и проверить, находится ли тема за ним? (Или отредактируйте приветственную тему, чтобы закрыть баннер :slight_smile:)

Вы правы!

Это одновременно и гениально (ваш ответ), и очень грустно (причина).

Так что теперь у нас есть две причины перекатегоризировать это в ux ..

Огромное спасибо, мне удалось восстановить эту тему, и мой клиент rest-api работает корректно.