external_id를 사용하여 토픽 생성 시 발생하는 문제

안녕하세요,

  1. “external_id” 필드를 사용하여 REST API로 토픽을 생성했습니다.
  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"]}

첫 번째 토픽이 삭제 해제되면 어떻게 되나요?

그 첫 번째 주제를 복원할 방법이 없습니다. 복원을 위한 아이콘이나 버튼을 찾을 수 없어요.

Hi Mohan. :wave:

@RGJ가 언급한 것은 이겁니다: Discourse는 기본적으로 “soft delete” 방식을 사용하므로, 이는 버그가 아닙니다. external_id는 그 맥락에서 사용되며, 이는 의도된 설계입니다. :+1:

삭제 취소 아이콘은 이 것입니다:

또한 주제 wrench(렌치) 메뉴에도 해당 옵션이 있습니다:

그런 것은 없습니다

핵심은 이러한 토픽이 복구될 수 있다는 점이며, 그렇게 되면 동일한 외부 ID를 가진 두 개의 토픽이 존재하게 됩니다. externalID는 삭제된 토픽을 포함하여 모든 토픽에 걸쳐 고유해야 합니다. @maiki가 말했듯이, 이는 의도된 설계입니다.

복구될 수 있다니요? 어떻게요? 저도 그 주제를 복구하고 싶습니다. 그러면 제 문제가 해결될 텐데, 그 주제를 복구할 방법이 전혀 없습니다.

Discourse는 삭제된 주제에 사용되는 external_id를 사용할 수 있도록 허용하거나, 해당 external_id를 가진 삭제된 주제를 복구할 수 있는 방법을 제공해야 합니다. 이 두 가지 중 어느 것도 볼 수 없습니다.

따라서 분명히 버그입니다.

제 글보다 위에 있는 게시물들은 주제가 undelete(삭제 해제)될 수 있음을 명확히 보여줍니다. 이 특정 주제만 undelete할 수 없다는 것은 버그가 아니라 권한이나 설정 문제일 수 있습니다.

혹시 포럼 관리자이신가요?

참고로, 이 문제를 #contribute:bug로 분류하는 것을 중단해 주세요.

이것을 버그로 분류해야 할까요?

아니요, 그렇게 하지 마세요.

안전 모드를 사용해서 이 작업을 수행할 수 있는지 확인해 주세요. 불가능하다면, 대신 무엇을 확인하는지 매우 자세히 알려주세요. 스크린 캡처가 도움이 될 것입니다.

제가 잘못된 방법으로 시도하고 있다면 알려주세요

복구 버튼은 “삭제됨” 주제에 있습니다. 따라서 해당 주제를 확인한 후 거기서 복구해야 합니다.

사용자 삭제 게시글 목록에서 해당 메뉴에 접근할 수 없습니다. 메뉴에서 옵션을 보려면 주제 자체로 이동해야 합니다:


@Mohan43u, external_id가 어떻게 사용되는지에 대한 원래 질문에 대한 답변이 되었나요? :slight_smile:

네, 하지만 @Mohan43u 님의 말씀도 일리가 있습니다. “삭제된 게시물” 목록에서 그곳으로 갈 방법이 없거든요. 그러면 어떻게 그 토픽에 접근하나요?

또한, ?status=deleted 가 더 이상 작동하지 않는 것 같습니다?

프로필 페이지를 제외하고는 삭제된 해당 주제에 접근할 방법이 없습니다. 카테고리에서는 전혀 접근할 수 없습니다.

/latest?status=deleted는 제 테스트 사이트에서는 작동하는데?


아하, 이제 이해했습니다. :slight_smile: 영상 덕분에 확실히 도움이 됐습니다. 네, 현재 그 뷰에서 삭제된 토픽의 제목은 표시되지 않습니다. 이 문제는 이전에 제기된 바 있습니다만, 다시 한 번 살펴볼 가치가 있을 수 있습니다. :+1:

[YourSite]/latest?status=deleted을 시도해 보고, 거기서 토픽 목록을 통해 해당 토픽에 접근할 수 있는지 확인해 보시겠습니까?

그리고 이제 다른 토픽도 찾았는데요, 도움이 된다면 스태프 로그를 통해 삭제된 토픽으로 이동하는 또 다른 팁도 있습니다:

완전히 깨끗한 포럼 상태이며, 오늘 아침 기준으로 테스트가 통과되었습니다. 토픽을 삭제 해제하면 다시 최신 목록에 표시됩니다.

좋은 제안입니다!!
다만, 프로필에 있는 삭제된 게시글에서도 해당 게시글로 이동할 수 있으면 정말 좋겠습니다.

안녕하세요. 질문하신 부분이 환영 토픽 배너의 CTA(행동 유도 버튼)에 가려져 있는 것 같습니다. 콘솔에서 배너를 숨겨 보시고, 토픽이 배너 뒤에 있는지 확인해 주시겠어요? (또는 환영 토픽을 편집하여 배너를 닫으셔도 됩니다 :slight_smile:)

맞아요!

(당신의 답변은) 정말 탁월하면서도, (그 이유는) 매우 슬픈 상황입니다.

그러니까 이제 이 이슈를 Contribute > UX 로 재분류해야 할 이유가 두 개가 되는군요..

정말 감사합니다. 해당 주제를 복구할 수 있었고, 제 rest-api 클라이언트도 정상적으로 작동합니다.