sistema-de-chamados/web/convex/users.ts
esdrasrenan f5a54f2814 feat: align ticket header editing flow
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-10-05 01:23:31 -03:00

41 lines
1.1 KiB
TypeScript

import { mutation, query } from "./_generated/server";
import { v } from "convex/values";
export const ensureUser = mutation({
args: {
tenantId: v.string(),
email: v.string(),
name: v.string(),
avatarUrl: v.optional(v.string()),
role: v.optional(v.string()),
teams: v.optional(v.array(v.string())),
},
handler: async (ctx, args) => {
const existing = await ctx.db
.query("users")
.withIndex("by_tenant_email", (q) => q.eq("tenantId", args.tenantId).eq("email", args.email))
.first();
if (existing) return existing;
const id = await ctx.db.insert("users", {
tenantId: args.tenantId,
email: args.email,
name: args.name,
avatarUrl: args.avatarUrl,
role: args.role ?? "AGENT",
teams: args.teams ?? [],
});
return await ctx.db.get(id);
},
});
export const listAgents = query({
args: { tenantId: v.string() },
handler: async (ctx, { tenantId }) => {
const agents = await ctx.db
.query("users")
.withIndex("by_tenant_role", (q) => q.eq("tenantId", tenantId).eq("role", "AGENT"))
.collect();
return agents;
},
});