From 1bd95fa99edab0f375a9270b6089e27fa55e0c3a Mon Sep 17 00:00:00 2001 From: lendry Date: Tue, 7 Jul 2026 12:46:43 +0300 Subject: [PATCH] add video --- apps/api-gateway/src/dto/chat.dto.ts | 2 +- .../admin/admin-inspector-message-body.tsx | 33 +++ .../components/admin/use-admin-chat-media.ts | 2 +- .../chat/chat-video-capture-dialog.tsx | 218 ++++++++++++++++++ .../chat/chat-video-note-player.tsx | 97 ++++++++ .../components/chat/chat-video-player.tsx | 107 +++++++++ .../components/family/family-group-view.tsx | 131 +++++++++-- apps/frontend/hooks/use-chat-room-media.ts | 2 +- apps/frontend/lib/chat-media-upload.ts | 10 +- apps/frontend/lib/chat-media.ts | 25 +- apps/frontend/lib/chat-message-utils.ts | 2 + apps/frontend/lib/e2e-chat.ts | 10 +- .../src/domain/admin-user-insights.service.ts | 2 + apps/sso-core/src/domain/chat.service.ts | 20 +- apps/sso-core/src/infra/chat-media.util.ts | 7 +- 15 files changed, 626 insertions(+), 42 deletions(-) create mode 100644 apps/frontend/components/chat/chat-video-capture-dialog.tsx create mode 100644 apps/frontend/components/chat/chat-video-note-player.tsx create mode 100644 apps/frontend/components/chat/chat-video-player.tsx diff --git a/apps/api-gateway/src/dto/chat.dto.ts b/apps/api-gateway/src/dto/chat.dto.ts index f2f6ebd..fa3242a 100644 --- a/apps/api-gateway/src/dto/chat.dto.ts +++ b/apps/api-gateway/src/dto/chat.dto.ts @@ -33,7 +33,7 @@ export class UpdateChatRoomDto { export class SendChatMessageDto { @IsString() - @IsIn(['TEXT', 'IMAGE', 'AUDIO', 'VOICE', 'FILE', 'EMOJI', 'POLL']) + @IsIn(['TEXT', 'IMAGE', 'AUDIO', 'VOICE', 'VIDEO', 'VIDEO_NOTE', 'FILE', 'EMOJI', 'POLL']) type!: string; @IsOptional() diff --git a/apps/frontend/components/admin/admin-inspector-message-body.tsx b/apps/frontend/components/admin/admin-inspector-message-body.tsx index 8c090ed..f8bc08e 100644 --- a/apps/frontend/components/admin/admin-inspector-message-body.tsx +++ b/apps/frontend/components/admin/admin-inspector-message-body.tsx @@ -110,6 +110,39 @@ export function AdminInspectorMessageBody({ ); } + if (message.type === 'VIDEO' && message.storageKey) { + const media = mediaUrls[message.storageKey]; + if (media?.blobUrl) { + return ( +