본문으로 바로가기

리뷰기능을 맡으면서 어떤식으로 설계하고 중요한게 무엇인지 생각해봤다.

우선은 평소에 사용하던 당근마켓을 보면서 장점과 단점을 정리했다. 리뷰와 매너평가를 한 뒤 누가 평가했는지 알지못하게 바로 적용이 안되는점과 매너온도 평가의 가중치를 적절하게 해서 사람들이 매너온도를 올리는데 재미를 느끼는건 큰 장점이라고 생각했다. 하지만 단점이 매우 많았다. 누가 평가를 했는지 모르기때문에 대화만으로 매너평가를 낮게주고 원하는 가격으로 네고를 안해준다면 신고를해서 정지를 시키는 경우가 정말 많았다. 본인도 허위신고로 3년정지를 당하고 신고를 풀려면 신고자와 삼자대면을 해야한다는 말도안되는 제재를 받았었다. 물론 플랫폼이 생각한 방식으로 잘 사용하는 사람도 있지만 플랫폼의 순수한 자정능력으로는 비매너 회원들의 이상한 짓을 막지못했다.

그래서 오히려 강력한 제재만이 어느정도의 자정능력을 만든다는 생각이 들었다.

 

아래에는 프로젝트 처음부터 생각을 적으면서 정리한 것이다. 우선 경매라는 특수성을 생각했고 거래이후 한명과 대화가 가능하며 매너평가와 후기작성을 한번에 하면서 사람들에게 패널티를 받을 수 있는 상황을 만들고 약속한 거래가 최대한 지켜지게끔 했다. 나중에는 포인트제나 실제금액으로 한다면 자연스럽게 노쇼하는 사람은 없을 것이다. 

 

매너시스템은 기본적으로 100점만점의 포인트를 유저모델에 저장해두고 평가를 받을때마다 변동을 주는 것으로 생각했다. 1주일에 한 번 0점 미만인 사람들을 정지시키게 되는데 이는 일주일동안 좋은 매너평가를 받아서 서비스를 계속 이용할 수 있게 하는 방법중에 제일 합리적이라고 생각이들어서 진행했다. 그리고 오히려 연속적인 비매너행위가 있다면 즉시 정지를 시키는 기능을 추가했다. 최근에받은 리뷰의 점수를 가져와서 나중에는 가중치를 두고 평균을 내서 정지를 시킬수도있고 3회연속 비매너평가 처럼 조건을 바꿔서 할 수 있게끔 백엔드를 만들어 놓았다.

 

추가적으로 계정을 즉시 정지를 시키고 정지가 풀리는 날을 따로 저장해서 정지가 풀리는날에 자동으로 계정이 active 가되는 백엔드도 추가했다.

 

앞으로 해볼 것은 좀 더 제재 등급을 세분화 하고 유저마다 정지 기간을 다르게하고 매너평가 적용기간을 어느정도 두는 기능정도는 기본으로하고 회원을 관리하기 좋은 방법을 찾아서 사람들이 만족하는 시스템을 만들고 싶다. 

# TODO post하면 바로 점수반영
# 중복금지
# 1주일에 한번씩 평가 낮은사람 정지, 메일보내기
# 평가 낮지만 위험은 경고메일
# 리뷰평가를 한번에 계산해서 넘겨준다? 하면좋지 크론탭 활용
# 한번 남기면 남기지 못하게 같은사람에게 낙찰
# 한사람이 한번만 평가가능
# 조건걸어서 판매자면 구매자 점수내리는 로직
# 테이블 나눠서 바이어 셀러 or 신고자 피신고자 하면 좋을 거 같긴한데 안나누려면 이름 포스트 저장해두고
# goods에 구매자 판매자 둘 다 있다. goods_id와
# 거래한거만 후기 가능 거래한거 굿즈 확인가능 채팅방을 가져온다 get
# 다 만들었는데 간과한점 최근글 두개라서 1234글중에 12평가하면 정지안당한다.
# 업데이트 만들까? 다른정보 업데이트할수도
# TODO 같은사람에게 리뷰 불가능하게 한다. 나중에 좋은평가 할 수 없다? or 사기를 당했다 그럴땐 문의해야지
# 리시버한테 남기면 그 goods에 자동으로 못남김 함께 해결될 듯
# 판매자와 구매자가 바뀌면 또 평가 해야하지 않을까?
# request data 활용해서 쿼리줄이기 시리얼라이저 통과하면 사용하는 값이라서 괜찮을듯
# 작성자, 리시버 한번이라도 평가했다면 평가 불가능하게도 가능
 
# 필요한 것 후기 : 작성자 id 리뷰내용 시간
# id 아니까 보는 id의 받은 점수 개수
# 시리얼라이저데이터 두개 보내주고 시리얼라이저에서 처리??
# 유저아이디 받은거 처리하고 시리얼에 보내줌 여기서 처리 다 하고 보내주는게 맞는듯 근데 json으로 가야함
# 지금 내가 정리한 바로는 시리얼라이저 통과시키고 보내야하는데 memo 처럼 모델에맞게 serializer = StudyLogSerializer(
# study_log, data={"memo": memo}, partial=True) 이렇게 같이 보내주는건 당연하게 되는데 지금 그냥 숫자는 보낼수가 없음
# 지금 api를 따로해서 보내고 시리얼라이저에서 값을 처리한다(아직 방법은 모름) 쿼리가 두번 되는거라 고민 그렇게 레스트풀하지않나? 아니면 쿼리는 같은숫자로 보내지는걸까
# 콘솔에서 본 바로는 하나의 받아온곳에서 카운트 숫자면 몇개있는게 불가능 해보이는데 obj하나씩 관련한건 가능 뭐likes나(매투매) 자신을 바라보고있는 코멘트들의 수 count에 조건 가능????
# 뭐 카운트 올려서 할 수 있으려나
# 프로필에 연결된 url 함수