사용자 차단 로직 구성에 대한 질문
1277
작성한 질문수 6
안녕하세요. 정말 좋은 강의와 소스코드 공개 정말 감사드립니다.
강의의 내용보다 더 나간 내용이긴 하지만 혹시나 가능하시다면 하여 질문드립니다.
user1, user2 가 있을 때 user1 이 user2 를 사용자 차단할 경우 게시글 같은 것이 있을 경우
user1 에게도 user2 의 게시물이 안보여야하고 user2 에게도 user1 의 게시물이 안보여야 하고
DM 의 경우에도 (channelchat 과 같은 단톡은 일단 고려하지 않음)
user1 이 user2 를 차단하였으므로
user1 의 사용자가 표시되는 리스트에 user2 가 안보여야하고
user2 의 사용자가 표시되는 리스트에도 user1 이 보이지 않아야하며
DM 도 user1 이 user2 에게 보낼 수 없고 user2 가 user1 에게도 보낼 수 없고
user1 과 user2 의 DM 이 있다손 치면 그것들이 차단을 했으니 상호간에 삭제되어야하고 (paranoid 방식일지라도)
하는 시나리오가 있을 경우 해당 block 이라는 user vs user 의 다대다 관계를 어떻게 구성하는 것이 좋을지 문의드립니다.
https://stackoverflow.com/questions/54605069/how-should-i-design-a-user-blocking-system
Table User
id (pk) | user_name
1 | a
2 | b
3 | c
Table Post
id (pk) | user_id (fk)
1 | 1
2 | 3
3 | 2
4 | 2
Table Block
id (pk) | blocker_id (fk) | blocked_id (fk)
1 | 1 | 2
2 | 2 | 1
select * from User join Block on User.id = Block.blocker_id or User.id = Block.blocked_id
select *
from Post p
where p.user_id = @current_user_id and
not exists (select id
from Block
where Block.blocker_id = p.user_id or Block.blocked_id = p.user_id)
이런식으로 SQL 을 짜면 된다고 stackoverflow 에서 나와 있는데요
User 의 associate 부분에 이렇게 구성하면 될까요?
static associate(db) {
db.User.belongsToMany(db.User, {through: "Block"});
}
답변 4
0
db.User.belongsToMany(db.User, {through: "block", as: "Blocker", foreignKey: "BlockedId"});
db.User.belongsToMany(db.User, {through: "block", as: "Blocked", foreignKey: "BlockerId"});
포린키와 as는 서로 반대여야 합니다.
0
감사합니다!! belongsTo 는 targetKey, foreignKey 가 사용되니 곰곰히 생각하니 이렇게 해야하네요. 정말 감사해요. 이런 조언을 받기 정말 힘든데...
0
다음과 같이 하니 block 테이블이 이렇게 생성이 되었습니다. 이게 맞는걸까요? 아니면 위에 것이 맞는걸까요?
db.User.belongsToMany(db.User, {through: "block", as: "Blocker", foreignKey: "BlockerId"});
db.User.belongsToMany(db.User, {through: "block", as: "Blocked", foreignKey: "BlockedId"});

0
다음과 같이 하였더니 테이블이 생각하는 것과 다르게 생성이 된 것 같은데요. 이렇게 된 게 맞는걸까요?
foreignKey 같은 설정도 추가해야 할까요??
db.User.belongsToMany(db.User, {through: "block", as: "Blocker"});
db.User.belongsToMany(db.User, {through: "block", as: "Blocked"});

0
dm은 보낼수는 있게 하되 받는쪽에서는 알림이 안 가도록 해야 보내는 사람이 자신이 차단된지 모를 것 같네요.
시퀄라이즈 코드에서는 as: 'Blocker'랑
db.User.belongsToMany(db.User, {through: "Block", as: 'Blocked'});
두 개 추가하셔야 쌍방간에 다대다가 연결됩니다.
기본 셋팅과 관련하여
0
106
1
초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법
0
109
2
focus 시에만 화면 업데이트 되는 이유 + 해결방법
0
165
2
useEffect 개수 관리
0
122
2
라이브러리 서치 방법
0
118
2
함수 정의 패턴
0
80
1
npm run dev 에러
0
156
3
npx webpack 후 에러
0
187
2
'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)
0
153
2
사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')
1
192
2
초기세팅중 packge.json 에러떠요
0
163
2
CORS - Access-Control-Allow-Origin 누락 문제
0
439
3
로그인 페이지 무한 새로고침 현상
0
608
2
Module not found: Error: Can't resolve './App' 에러
0
970
1
배포 방법
0
306
2
npm run dev 시 빌드가 매우 느려졌습니다
0
1011
2
alias 경로 설정 오류
0
462
2
fetcher 함수의 data 값이 두번 찍히는 이유
0
283
1
제네릭 질문
0
225
2
ts-node 대신 tsx 사용여부
0
379
1
배포 관련 질문
0
249
1
[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.
0
396
2
[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.
0
341
1
users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.
0
252
2





