👨🏻‍💻

1. 채팅 ERD 및 모델 정의

브랜치
채팅
생성 일시
2023/09/23 06:45
작성일
2023/09/23
작성자
최종 편집 일시
2023/10/11 04:20

채팅 관련 ERD

ChatRoom (채팅방)
id : 채팅방 아이디
product_id : 채팅방이 생성된 상품의 아이디 (Foreign Key)
chat_host : 상품을 등록한 사용자의 아이디
chat_guest : 상품에 대해 ‘채팅하기’ 요청을 보낸 사용자의 아이디
created_at : 채팅방 개설 시점
Message (메시지)
id : 메시지 아이디
chatroom_id : 메시지가 보내진 채팅방의 아이디 (Foreign Key)
sender : 메시지를 보낸 사용자의 아이디
receiver : 메시지를 받은 사용자의 아이디
content: 메시지의 내용
sent_at : 메시지를 보낸 일시
is_read : receiver가 메시지를 읽었는지 여부

모델 정의

class ChatRoom(models.Model): id = models.AutoField(primary_key=True) product = models.ForeignKey(PostProduct, on_delete=models.CASCADE, null=True) created_at = models.DateTimeField(auto_now_add=True) chat_host = models.IntegerField() chat_guest = models.IntegerField() class Message(models.Model): id = models.AutoField(primary_key=True) chatroom = models.ForeignKey(ChatRoom, on_delete=models.CASCADE, null=True) sender = models.IntegerField() receiver = models.IntegerField() content = models.TextField() sent_at = models.DateTimeField(auto_now_add=True) is_read = models.BooleanField(default=False)
Python
복사

각 테이블의 새로운 레코드가 생성되는 규칙?

상품(PostProduct)에서 ‘채팅하기’ 이벤트가 발생하면 ChatRoom 테이블에 새로운 레코드가 생성됩니다.
하나의 상품(PostProduct)에 대해 여러 개의 ChatRoom 레코드가 생성될 수 있습니다.
채팅방(ChatRoom)에서 ‘전송’ 이벤트가 발생하면 Chat 테이블에 새로운 레코드가 생성됩니다.
하나의 ChatRoom에 대해 여러 개의 Chat이 생성될 수 있습니다.
is_read의 default=false이며, receiver로부터 ‘메시지 읽음’ 이벤트가 서버로 전송되면 true로 업데이트 됩니다.