diff --git a/backend/src/modules/meeting/meeting.service.ts b/backend/src/modules/meeting/meeting.service.ts index c7d53f7..1e0e465 100644 --- a/backend/src/modules/meeting/meeting.service.ts +++ b/backend/src/modules/meeting/meeting.service.ts @@ -81,8 +81,10 @@ export class MeetingService { const at = new AccessToken(this.apiKey, this.apiSecret, { identity: user.id, name: user.name, - ttl: '1h', - metadata: JSON.stringify({ role }), + // 장시간 회의 중 네트워크 재연결 시 토큰 만료로 재입장이 실패하지 않도록 넉넉히(12h). + ttl: '12h', + // role 은 진행자 식별용, avatarUrl 은 참여자/채팅 아바타 표시용 + metadata: JSON.stringify({ role, avatarUrl: user.avatarUrl }), }); at.addGrant({ roomJoin: true, diff --git a/frontend/src/assets/styles/relay.css b/frontend/src/assets/styles/relay.css index 1b45153..9741477 100644 --- a/frontend/src/assets/styles/relay.css +++ b/frontend/src/assets/styles/relay.css @@ -52,6 +52,21 @@ --shadow-sm: 0 1px 2px rgba(20, 24, 33, 0.05); --shadow-md: 0 4px 16px rgba(20, 24, 33, 0.1), 0 1px 3px rgba(20, 24, 33, 0.06); --shadow-pop: 0 8px 28px rgba(20, 24, 33, 0.16), 0 2px 6px rgba(20, 24, 33, 0.08); + + /* 다크 캔버스(화상회의 회의실/프리조인 전용) */ + --d-bg: #0e1014; + --d-panel: #16191f; + --d-panel-2: #1b1f27; + --d-border: #2a2f39; + --d-text: #eceef2; + --d-text-2: #aab2bf; + --d-text-3: #717a88; + --tile: #1b1d23; + /* 다크 위 상태색(라이트 토큰을 다크에 쓰면 탁해져 밝은 변형을 별도 정의) */ + --d-red: #ff7a8a; + --d-green: #46d18a; + --d-amber: #f0c478; + --d-accent-soft: #c7c2ff; } /* ============================================================ diff --git a/frontend/src/components/meeting/MeetingChat.vue b/frontend/src/components/meeting/MeetingChat.vue new file mode 100644 index 0000000..e3b020b --- /dev/null +++ b/frontend/src/components/meeting/MeetingChat.vue @@ -0,0 +1,257 @@ + + +