/
fegerV
/
Stogram
Обзор
Документация
Войти
/
fegerV
/
Stogram
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
server/src/controllers/pinnedMessageController.ts
184 строки
4 KB
engine-labs-app[bot]
feat(app): implement advanced chat features including search, mentions, hashtags, privacy, mute, folders, and pinning
31 окт 2025, 19:54
31 окт 2025, 19:54
170f5ad
Код
Авторство
О чём код?
import { Request, Response } from 'express'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export const pinMessage = async (req: Request, res: Response) => { try { const userId = (req as any).user.userId; const { messageId, chatId } = req.body; if (!messageId || !chatId) { return res.status(400).json({ error: 'Message ID and Chat ID are required' }); } const message = await prisma.message.findUnique({ where: { id: messageId } }); if (!message || message.chatId !== chatId) { return res.status(404).json({ error: 'Message not found' }); } const existingPin = await prisma.pinnedMessage.findUnique({ where: { userId_messageId_chatId: { userId, messageId, chatId } } }); if (existingPin) { return res.status(400).json({ error: 'Message already pinned' }); } const pinnedMessage = await prisma.pinnedMessage.create({ data: { userId, messageId, chatId }, include: { message: { include: { sender: { select: { id: true, username: true, displayName: true, avatar: true } } } } } }); res.status(201).json({ pinnedMessage }); } catch (error) { console.error('Pin message error:', error); res.status(500).json({ error: 'Failed to pin message' }); } }; export const unpinMessage = async (req: Request, res: Response) => { try { const userId = (req as any).user.userId; const { messageId, chatId } = req.params; const pinnedMessage = await prisma.pinnedMessage.findUnique({ where: { userId_messageId_chatId: { userId, messageId, chatId } } }); if (!pinnedMessage) { return res.status(404).json({ error: 'Pinned message not found' }); } await prisma.pinnedMessage.delete({ where: { userId_messageId_chatId: { userId, messageId, chatId } } }); res.json({ message: 'Message unpinned successfully' }); } catch (error) { console.error('Unpin message error:', error); res.status(500).json({ error: 'Failed to unpin message' }); } }; export const getPinnedMessages = async (req: Request, res: Response) => { try { const userId = (req as any).user.userId; const { chatId } = req.params; const pinnedMessages = await prisma.pinnedMessage.findMany({ where: { userId, chatId }, include: { message: { include: { sender: { select: { id: true, username: true, displayName: true, avatar: true } }, replyTo: { select: { id: true, content: true, sender: { select: { username: true, displayName: true } } } } } } }, orderBy: { pinnedAt: 'desc' } }); res.json({ pinnedMessages }); } catch (error) { console.error('Get pinned messages error:', error); res.status(500).json({ error: 'Failed to get pinned messages' }); } }; export const getAllPinnedMessages = async (req: Request, res: Response) => { try { const userId = (req as any).user.userId; const pinnedMessages = await prisma.pinnedMessage.findMany({ where: { userId }, include: { message: { include: { sender: { select: { id: true, username: true, displayName: true, avatar: true } }, chat: { select: { id: true, name: true, type: true, avatar: true } } } } }, orderBy: { pinnedAt: 'desc' } }); res.json({ pinnedMessages }); } catch (error) { console.error('Get all pinned messages error:', error); res.status(500).json({ error: 'Failed to get all pinned messages' }); } };