diff --git a/client/src/entities/user/api/user-api.ts b/client/src/entities/user/api/user-api.ts index 20fdf20..d65bbce 100644 --- a/client/src/entities/user/api/user-api.ts +++ b/client/src/entities/user/api/user-api.ts @@ -30,6 +30,17 @@ export async function updateAdminUser( return data } +export type AdminAvatarResponse = { + avatar: string | null + avatarType: string | null + avatarStyle: string | null +} + +export async function fetchAdminAvatar(): Promise { + const { data } = await apiClient.get('admin/avatar') + return data +} + export async function deleteAdminUser(id: string): Promise { await apiClient.delete(`admin/users/${id}`) } diff --git a/client/src/features/order-chat/ui/OrderChat.tsx b/client/src/features/order-chat/ui/OrderChat.tsx index 978c28f..27d1c8a 100644 --- a/client/src/features/order-chat/ui/OrderChat.tsx +++ b/client/src/features/order-chat/ui/OrderChat.tsx @@ -3,7 +3,9 @@ import Box from '@mui/material/Box' import Button from '@mui/material/Button' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' +import { useQuery } from '@tanstack/react-query' import { useUnit } from 'effector-react' +import { fetchAdminAvatar } from '@/entities/user/api/user-api' import { $user } from '@/shared/model/auth' import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble' import { OrderMessageBody } from '@/shared/ui/OrderMessageBody' @@ -29,6 +31,12 @@ export function OrderChat({ messages, isPending, onSend }: Props) { const canSend = text.replace(/<[^>]*>/g, ' ').trim().length > 0 const currentUser = useUnit($user) + const adminAvatarQuery = useQuery({ + queryKey: ['admin', 'avatar'], + queryFn: fetchAdminAvatar, + staleTime: 5 * 60 * 1000, + }) + const handleSend = () => { if (!canSend || isPending) return onSend(text.trim()) @@ -43,8 +51,15 @@ export function OrderChat({ messages, isPending, onSend }: Props) { {messages.map((m) => { const isAdminMsg = m.authorType === 'admin' + const adminAv = adminAvatarQuery.data const avatarNode = isAdminMsg ? ( - + ) : currentUser ? ( { + const adminEmail = normalizeEmail(process.env.ADMIN_EMAIL) + if (!adminEmail || !adminEmail.includes('@')) return reply.code(404).send({ error: 'Администратор не найден' }) + + const user = await prisma.user.findUnique({ where: { email: adminEmail } }) + if (!user) return reply.code(404).send({ error: 'Администратор не найден' }) + + return { + avatar: user.avatar, + avatarType: user.avatarType, + avatarStyle: user.avatarStyle, + } + }) + fastify.patch('/api/admin/profile', { preHandler: [fastify.verifyAdmin] }, async (request, reply) => { const userId = request.user.sub const nameRaw = request.body?.displayName