@@ -30,14 +30,15 @@ <h1 class="page-title">채팅 목록</h1>
3030
3131 < div class ="chat-room-content ">
3232 {% for item in group.rooms %}
33- < a href ="{% url 'missions:chat_room' group.mission.id item.room.id %} " class ="individual-chat-link ">
33+ < a href ="{% url 'missions:chat_room' group.mission.id item.room.id %} " class ="individual-chat-link "
34+ data-room-id ="{{ item.room.id }} ">
3435 < div class ="chat-user-avatar ">
3536 {{ item.other_user.get_display_name|slice:":1" }}
3637 </ div >
3738 < div class ="chat-user-info ">
3839 < div class ="user-info-top ">
3940 < span class ="user-name "> {{ item.other_user.get_display_name }}</ span >
40- < span class ="chat-time "> {{ item.room.created_at|date:"A g:i"|default:"최근" }}</ span >
41+ < span class ="chat-time "> {% if item.last_message_created_at %}{{item.last_message_created_at|date:"A g:i" }}{% else %}{{ item.room.created_at|date:"A g:i"|default:"최근" }}{% endif % }</ span >
4142 </ div >
4243 < p class ="last-preview "> {{ item.last_message|default:"대화 내용이 없습니다." }}</ p >
4344 </ div >
@@ -65,5 +66,34 @@ <h1 class="page-title">채팅 목록</h1>
6566 const group = element . parentElement ;
6667 group . classList . toggle ( 'active' ) ;
6768 }
69+
70+ ( function ( ) {
71+ const userId = { { request. user . id } } ;
72+ const host = "{{ request.get_host }}" ;
73+ const protocol = window . location . protocol === "https:" ? "wss:" : "ws:" ;
74+ const ws = new WebSocket ( protocol + "//" + host + "/ws/notify/" + userId ) ;
75+
76+ ws . onmessage = function ( event ) {
77+ try {
78+ const data = JSON . parse ( event . data ) ;
79+ if ( data . type === "chat_update" && data . room_id != null ) {
80+ const row = document . querySelector ( '[data-room-id="' + data . room_id + '"]' ) ;
81+ if ( row ) {
82+ const preview = row . querySelector ( '.last-preview' ) ;
83+ const timeEl = row . querySelector ( '.chat-time' ) ;
84+ if ( preview ) preview . textContent = data . last_message || "대화 내용이 없습니다." ;
85+ if ( timeEl && data . created_at ) {
86+ const d = new Date ( data . created_at ) ;
87+ timeEl . textContent = d . toLocaleTimeString ( "ko-KR" , { hour : "numeric" , minute : "2-digit" } ) ;
88+ }
89+ }
90+ }
91+ } catch ( e ) { }
92+ } ;
93+
94+ ws . onclose = function ( ) {
95+ console . log ( "알림 소켓 끊김" ) ;
96+ } ;
97+ } ) ( ) ;
6898</ script >
6999{% endblock %}
0 commit comments