From df8c4e29bb3648bd93921eff013edcaa426eda87 Mon Sep 17 00:00:00 2001 From: esdrasrenan Date: Mon, 6 Oct 2025 18:35:31 -0300 Subject: [PATCH] feat: seed visitas ticket queue Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- web/convex/seed.ts | 47 +++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/web/convex/seed.ts b/web/convex/seed.ts index e83d0b4..6842a31 100644 --- a/web/convex/seed.ts +++ b/web/convex/seed.ts @@ -4,23 +4,20 @@ export const seedDemo = mutation({ args: {}, handler: async (ctx) => { const tenantId = "tenant-atlas"; + const desiredQueues = [ + { name: "Chamados", slug: "chamados" }, + { name: "Laboratório", slug: "laboratorio" }, + { name: "Visitas", slug: "visitas" }, + ]; + // Ensure queues const existingQueues = await ctx.db .query("queues") .withIndex("by_tenant", (q) => q.eq("tenantId", tenantId)) .collect(); - let queues = existingQueues.length - ? existingQueues - : await Promise.all( - [ - { name: "Chamados", slug: "chamados" }, - { name: "Laboratório", slug: "laboratorio" }, - ].map((q) => ctx.db.insert("queues", { tenantId, name: q.name, slug: q.slug, teamId: undefined })) - ).then((ids) => Promise.all(ids.map((id) => ctx.db.get(id)))) - ; - queues = await Promise.all( - queues.map(async (queue) => { + const normalizedQueues = await Promise.all( + existingQueues.map(async (queue) => { if (!queue) return queue; if (queue.name === "Suporte N1" || queue.slug === "suporte-n1") { await ctx.db.patch(queue._id, { name: "Chamados", slug: "chamados" }); @@ -34,6 +31,30 @@ export const seedDemo = mutation({ }) ); + const presentQueues = normalizedQueues.filter( + (queue): queue is NonNullable<(typeof normalizedQueues)[number]> => Boolean(queue) + ); + const queuesBySlug = new Map(presentQueues.map((queue) => [queue.slug, queue])); + const queuesByName = new Map(presentQueues.map((queue) => [queue.name, queue])); + const queues = [] as typeof presentQueues; + + for (const def of desiredQueues) { + let queue = queuesBySlug.get(def.slug) ?? queuesByName.get(def.name); + if (!queue) { + const newId = await ctx.db.insert("queues", { tenantId, name: def.name, slug: def.slug, teamId: undefined }); + queue = (await ctx.db.get(newId))!; + queuesBySlug.set(queue.slug, queue); + queuesByName.set(queue.name, queue); + } + queues.push(queue); + } + + const queueChamados = queuesBySlug.get("chamados"); + const queueLaboratorio = queuesBySlug.get("laboratorio"); + if (!queueChamados || !queueLaboratorio) { + throw new Error("Filas padrão não foram inicializadas"); + } + // Ensure users async function ensureUser(name: string, email: string, role = "AGENT") { const found = await ctx.db @@ -56,8 +77,8 @@ export const seedDemo = mutation({ .order("desc") .take(1); let ref = newestRef[0]?.reference ?? 41000; - const queue1 = queues[0]!._id; - const queue2 = queues[1]!._id; + const queue1 = queueChamados._id; + const queue2 = queueLaboratorio._id; const t1 = await ctx.db.insert("tickets", { tenantId,