import { query, mutation } from "./_generated/server"; import { v } from "convex/values"; export const listByUser = query({ args: { userId: v.id("users") }, handler: async (ctx, args) => { const allChats = await ctx.db.query("chats").order("desc").collect(); return allChats.filter((chat) => chat.participantIds.includes(args.userId)); }, }); export const getOrCreate = mutation({ args: { token: v.string(), partnerId: v.id("users"), }, handler: async (ctx, args) => { const session = await ctx.db .query("sessions") .withIndex("by_token", (q) => q.eq("token", args.token)) .first(); if (!session) throw new Error("Неавторизиран"); const allChats = await ctx.db.query("chats").collect(); const existing = allChats.find( (c) => c.participantIds.includes(session.userId) && c.participantIds.includes(args.partnerId) && c.participantIds.length === 2 ); if (existing) return existing._id; const chatId = await ctx.db.insert("chats", { participantIds: [session.userId, args.partnerId], lastMessageAt: Date.now(), createdBy: session.userId, }); return chatId; }, });