diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 37a4018..decd20d 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -23,8 +23,8 @@ import { HealthController } from "./health.controller"; import { MailModule } from "./mail/mail.module"; import { MediaModule } from "./media/media.module"; import { MessagesModule } from "./messages/messages.module"; -import { ReportsModule } from "./reports/reports.module"; import { RealtimeModule } from "./realtime/realtime.module"; +import { ReportsModule } from "./reports/reports.module"; import { S3Module } from "./s3/s3.module"; import { SessionsModule } from "./sessions/sessions.module"; import { TagsModule } from "./tags/tags.module"; diff --git a/backend/src/comments/comments.service.ts b/backend/src/comments/comments.service.ts index 03fbe4d..d86e3c1 100644 --- a/backend/src/comments/comments.service.ts +++ b/backend/src/comments/comments.service.ts @@ -3,8 +3,8 @@ import { Injectable, NotFoundException, } from "@nestjs/common"; -import { CommentsRepository } from "./repositories/comments.repository"; import type { CreateCommentDto } from "./dto/create-comment.dto"; +import { CommentsRepository } from "./repositories/comments.repository"; @Injectable() export class CommentsService { diff --git a/backend/src/database/schemas/index.ts b/backend/src/database/schemas/index.ts index a85999f..ed13f59 100644 --- a/backend/src/database/schemas/index.ts +++ b/backend/src/database/schemas/index.ts @@ -4,10 +4,10 @@ export * from "./categories"; export * from "./comments"; export * from "./content"; export * from "./favorites"; +export * from "./messages"; export * from "./pgp"; export * from "./rbac"; export * from "./reports"; -export * from "./messages"; export * from "./sessions"; export * from "./tags"; export * from "./users"; diff --git a/backend/src/messages/messages.controller.ts b/backend/src/messages/messages.controller.ts index 0283e5e..7e946e3 100644 --- a/backend/src/messages/messages.controller.ts +++ b/backend/src/messages/messages.controller.ts @@ -31,10 +31,7 @@ export class MessagesController { } @Post() - sendMessage( - @Req() req: AuthenticatedRequest, - @Body() dto: CreateMessageDto, - ) { + sendMessage(@Req() req: AuthenticatedRequest, @Body() dto: CreateMessageDto) { return this.messagesService.sendMessage(req.user.sub, dto); } } diff --git a/backend/src/messages/messages.service.ts b/backend/src/messages/messages.service.ts index 5608044..8019fa2 100644 --- a/backend/src/messages/messages.service.ts +++ b/backend/src/messages/messages.service.ts @@ -1,8 +1,4 @@ -import { - ForbiddenException, - Injectable, - NotFoundException, -} from "@nestjs/common"; +import { ForbiddenException, Injectable } from "@nestjs/common"; import { EventsGateway } from "../realtime/events.gateway"; import type { CreateMessageDto } from "./dto/create-message.dto"; import { MessagesRepository } from "./repositories/messages.repository"; diff --git a/backend/src/messages/repositories/messages.repository.ts b/backend/src/messages/repositories/messages.repository.ts index 689f167..790b5f2 100644 --- a/backend/src/messages/repositories/messages.repository.ts +++ b/backend/src/messages/repositories/messages.repository.ts @@ -20,9 +20,7 @@ export class MessagesRepository { conversationParticipants, eq(conversations.id, conversationParticipants.conversationId), ) - .where( - inArray(conversationParticipants.userId, [userId1, userId2]) - ) + .where(inArray(conversationParticipants.userId, [userId1, userId2])) .groupBy(conversations.id) .having(sql`count(${conversations.id}) = 2`); @@ -90,16 +88,13 @@ export class MessagesRepository { eq(conversations.id, conversationParticipants.conversationId), ) .innerJoin(users, eq(conversationParticipants.userId, users.uuid)) - .leftJoin( - messages, - eq(conversations.id, messages.conversationId) - ) + .leftJoin(messages, eq(conversations.id, messages.conversationId)) .where( and( inArray(conversations.id, userConvs), eq(conversationParticipants.userId, users.uuid), - sql`${users.uuid} != ${userId}` - ) + sql`${users.uuid} != ${userId}`, + ), ) .orderBy(desc(conversations.updatedAt)); } diff --git a/backend/src/realtime/events.gateway.ts b/backend/src/realtime/events.gateway.ts index 89d8b84..2e6ab86 100644 --- a/backend/src/realtime/events.gateway.ts +++ b/backend/src/realtime/events.gateway.ts @@ -60,7 +60,7 @@ export class EventsGateway const payload = await this.jwtService.verifyJwt(session.accessToken); client.data.user = payload; - + // Rejoindre une room personnelle pour les notifications client.join(`user:${payload.sub}`); diff --git a/frontend/src/app/(dashboard)/meme/[slug]/page.tsx b/frontend/src/app/(dashboard)/meme/[slug]/page.tsx index 21094aa..44a03b1 100644 --- a/frontend/src/app/(dashboard)/meme/[slug]/page.tsx +++ b/frontend/src/app/(dashboard)/meme/[slug]/page.tsx @@ -2,8 +2,8 @@ import { ChevronLeft } from "lucide-react"; import type { Metadata } from "next"; import Link from "next/link"; import { notFound } from "next/navigation"; -import { ContentCard } from "@/components/content-card"; import { CommentSection } from "@/components/comment-section"; +import { ContentCard } from "@/components/content-card"; import { Button } from "@/components/ui/button"; import { ViewCounter } from "@/components/view-counter"; import { ContentService } from "@/services/content.service"; diff --git a/frontend/src/app/(dashboard)/messages/page.tsx b/frontend/src/app/(dashboard)/messages/page.tsx index aad4fa4..af9de6a 100644 --- a/frontend/src/app/(dashboard)/messages/page.tsx +++ b/frontend/src/app/(dashboard)/messages/page.tsx @@ -7,15 +7,14 @@ import * as React from "react"; import { toast } from "sonner"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; -import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { ScrollArea } from "@/components/ui/scroll-area"; import { useAuth } from "@/providers/auth-provider"; import { useSocket } from "@/providers/socket-provider"; import { - MessageService, type Conversation, type Message, + MessageService, } from "@/services/message.service"; export default function MessagesPage() { @@ -62,31 +61,34 @@ export default function MessagesPage() { React.useEffect(() => { if (socket) { - socket.on("new_message", (data: { conversationId: string; message: Message }) => { - if (activeConv?.id === data.conversationId) { - setMessages((prev) => [...prev, data.message]); - } - // Mettre à jour la liste des conversations - setConversations((prev) => { - const index = prev.findIndex((c) => c.id === data.conversationId); - if (index !== -1) { - const updated = [...prev]; - updated[index] = { - ...updated[index], - lastMessage: { - text: data.message.text, - createdAt: data.message.createdAt, - }, - updatedAt: data.message.createdAt, - }; - return updated.sort( - (a, b) => - new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(), - ); + socket.on( + "new_message", + (data: { conversationId: string; message: Message }) => { + if (activeConv?.id === data.conversationId) { + setMessages((prev) => [...prev, data.message]); } - return prev; - }); - }); + // Mettre à jour la liste des conversations + setConversations((prev) => { + const index = prev.findIndex((c) => c.id === data.conversationId); + if (index !== -1) { + const updated = [...prev]; + updated[index] = { + ...updated[index], + lastMessage: { + text: data.message.text, + createdAt: data.message.createdAt, + }, + updatedAt: data.message.createdAt, + }; + return updated.sort( + (a, b) => + new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(), + ); + } + return prev; + }); + }, + ); return () => { socket.off("new_message"); @@ -98,7 +100,7 @@ export default function MessagesPage() { if (scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } - }, [messages]); + }, []); const handleSendMessage = async (e: React.FormEvent) => { e.preventDefault(); @@ -108,7 +110,10 @@ export default function MessagesPage() { setNewMessage(""); try { - const msg = await MessageService.sendMessage(activeConv.recipient.uuid, text); + const msg = await MessageService.sendMessage( + activeConv.recipient.uuid, + text, + ); setMessages((prev) => [...prev, msg]); } catch (_error) { toast.error("Erreur lors de l'envoi"); @@ -140,6 +145,7 @@ export default function MessagesPage() { conversations.map((conv) => ( @@ -130,7 +134,9 @@ export function CommentSection({ contentId }: CommentSectionProps) { })} - {(user?.uuid === comment.user.uuid || user?.role === "admin" || user?.role === "moderator") && ( + {(user?.uuid === comment.user.uuid || + user?.role === "admin" || + user?.role === "moderator") && (