채팅 관련 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로 업데이트 됩니다.