Создал тему (используя REST API) с полем “external_id”.
Удалил эту тему. Я предполагаю, что тема останется в базе данных, но будет скрыта от пользователей.
Попытался создать ту же тему с тем же “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"]}
Я думаю, что имел в виду @RGJ: это не ошибка, так как Discourse по умолчанию использует подход «мягкого удаления». В этом контексте будет использоваться external_id, что предусмотрено по замыслу.
Суть в том, что такую тему можно восстановить, и в этом случае появятся две темы с одинаковым внешним ID. Внешний ID должен быть уникальным для всех тем, включая удалённые. Как отметил @maiki, это сделано намеренно.
можно восстановить? как? Я тоже хочу восстановить эту тему, и моя проблема исчезнет. Но способа восстановить эту тему нет.
Либо Discourse должен разрешать использовать external_id, который используется для удалённой темы, либо должен быть какой-то способ восстановить удалённую тему по этому external_id. Я не вижу ни одного из этих вариантов.
Сообщения выше моего явно указывают на то, что темы могут быть восстановлены. То, что вы, похоже, не можете восстановить именно эту тему, не означает, что это ошибка; скорее всего, дело в правах доступа или настройках.
Вы администратор форума?
Кстати, пожалуйста, перестаньте классифицировать это как #баг.
Пожалуйста, используйте безопасный режим и проверьте, сможете ли вы это сделать. Если нет, подробно опишите, что именно вы наблюдаете вместо этого. Скриншоты будут очень полезны.
Кнопка «Восстановить» находится на теме, помеченной как «удалённая». Поэтому вам нужно открыть эту тему и восстановить её оттуда.
Доступ к соответствующему меню из списка удалённых постов пользователя невозможен. Чтобы увидеть эту опцию в меню, нужно перейти непосредственно к теме:
/latest?status=deleted работает у меня на тестовом сайте?
Ах, теперь я понял. Видео действительно помогло. Да, в настоящее время заголовок темы не отображается в удалённых темах из этого представления. Это уже поднималось ранее, но, возможно, стоит обратить на это внимание ещё раз.
Попробуйте перейти по ссылке [ВашСайт]/latest?status=deleted и посмотрите, сможете ли вы открыть тему из списка тем там?
И теперь, когда я нашёл другую тему, есть ещё один совет: можно перейти к удалённой теме через логи администраторов, если это поможет:
Думаю, ваш пост скрыт баннером призыва к действию в приветственной теме. Попробуйте скрыть его в консоли и проверить, находится ли тема за ним? (Или отредактируйте приветственную тему, чтобы закрыть баннер )