투표 가져오기: 특정 주제에 대해 PostgreSQL 명령 또는 기타 방법으로 투표 수를 설정할 수 있나요?

안녕하세요, AnswerHub에서 Discourse로 이동을 진행 중입니다. 다만 AnswerHub 데이터베이스에 접근할 수 없어서, 웹사이트 전체를 스크래핑하여 아이디어(Ideas)와 각각의 투표 수를 수집했습니다.

Discourse에서 특정 질문의 투표 수를 덮어쓰기(override)하는 방법이 있을까요? 예를 들어, "오렌지로 새로운 레시피 만들기"라는 질문은 제 AnswerHub에서 42개의 투표를 받았습니다. 질문은 이미 가져왔지만, 기본값인 0이 아니라 투표 수를 42로 설정하고 싶습니다. 이렇게 하면 사용자가 각 질문의 정확한 투표 수를 확인할 수 있을 것입니다.

PostgreSQL 명령어를 실행하여 투표 수를 수동으로 설정할 수 있는 방법이 있을까요?
각 질문의 투표 수를 시뮬레이션하기 위해 100명 이상의 가짜 사용자를 만들어야 할까요? 그렇게 해야 한다면 이상적인 해결책이 아니므로 피하고 싶습니다. :stuck_out_tongue:

미리 도움을 주셔서 감사합니다.

:slight_smile:

Luicid님 안녕하세요!

:warning: 저는 전문가가 아니고 이 플러그인을 사용해 본 적도 없습니다 :upside_down_face:

훌륭한 질문이네요. 정확한 답변을 드리기 어렵지만, 코딩에 대해 어느 정도 아시는 것 같으니 (처음부터 새로 시작하는 것이 아니라 이전에서 이식하는 것이므로) 몇 가지 힌트 정도는 드릴 수 있을 것 같습니다.

이 투표 플러그인은 두 개의 테이블을 사용합니다:

discourse_voting_topic_vote_count

필드 이름 타입 제약 조건
id serial 기본 키
topic_id integer 외래 키 (topics 참조), null 가능
votes_count integer null 가능
created_at timestamp
updated_at timestamp

discourse_voting_votes

필드 이름 타입 제약 조건
id serial 기본 키
topic_id integer 외래 키 (topics 참조), null 가능
user_id integer 외래 키 (users 참조), null 가능
archive boolean null 가능, 기본값 false
created_at timestamp
updated_at timestamp

플러그인 설정에도 관심이 있으실 수 있지만, 이미 알고 계실 것 같네요 :slight_smile:

마지막으로, 주제 투표는 카테고리별로 활성화해야 하므로, 가져오기 스크립트에서 카테고리를 생성할 때 활성화하는 것이 좋겠습니다.

이식 과정에서 주제에 있는 투표를 어떻게 올바르게 채워넣을지에 대해서는 제가 전문가가 아니지만, 작업(job)이 동일한 사용자의 중복 투표를 방지하고 중복된 투표를 삭제하므로, 각 투표마다 무작위이고 고유한 사용자를 사용하는 방향으로 진행할 것 같습니다:

https://github.com/discourse/discourse-topic-voting/blob/main/app/jobs/onceoff/voting_ensure_consistency.rb#L28

필요한 필드(정할 필요)를 채워넣고, 그런 기능이 있다면 다른 필드들은 작업이 채워넣도록 할 것입니다.

모든 플러그인 작업을 확인해 보시는 것도 좋습니다: discourse-topic-voting/app/jobs at main · discourse/discourse-topic-voting · GitHub

조금이나마 도움이 되셨으면 좋겠고, 진행 상황도 공유해 주시면 좋겠습니다 :slight_smile:

와, 정말 훌륭하고 도움이 되는 게시글 감사합니다! :slight_smile:
저는 다른 접근 방식을 선택하기로 결정했습니다:

원래 웹사이트에서는 누가 어떤 항목에 투표했는지 데이터를 가져올 수 있었기 때문에, 해당 정보를 데이터베이스에 저장했습니다. 이후 requests 라이브러리를 사용한 Python 스크립트로, 이전으로 이관된 계정에서 이미 투표했던 아이디어에 대해 투표를 실행했고, 성공했습니다!

다시 한번 감사합니다