feat: refine ticket header save flow
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
parent
01b7103200
commit
cebe1b9bf1
9 changed files with 616 additions and 587 deletions
|
|
@ -8,8 +8,11 @@ import { requireCustomer, requireStaff, requireUser } from "./rbac";
|
|||
const QUEUE_RENAME_LOOKUP: Record<string, string> = {
|
||||
"Suporte N1": "Chamados",
|
||||
"suporte-n1": "Chamados",
|
||||
chamados: "Chamados",
|
||||
"Suporte N2": "Laboratório",
|
||||
"suporte-n2": "Laboratório",
|
||||
laboratorio: "Laboratório",
|
||||
Laboratorio: "Laboratório",
|
||||
};
|
||||
|
||||
function renameQueueString(value?: string | null): string | null {
|
||||
|
|
@ -770,8 +773,8 @@ export const changeQueue = mutation({
|
|||
export const updateCategories = mutation({
|
||||
args: {
|
||||
ticketId: v.id("tickets"),
|
||||
categoryId: v.id("ticketCategories"),
|
||||
subcategoryId: v.id("ticketSubcategories"),
|
||||
categoryId: v.union(v.id("ticketCategories"), v.null()),
|
||||
subcategoryId: v.union(v.id("ticketSubcategories"), v.null()),
|
||||
actorId: v.id("users"),
|
||||
},
|
||||
handler: async (ctx, { ticketId, categoryId, subcategoryId, actorId }) => {
|
||||
|
|
@ -780,23 +783,60 @@ export const updateCategories = mutation({
|
|||
throw new ConvexError("Ticket não encontrado")
|
||||
}
|
||||
await requireStaff(ctx, actorId, ticket.tenantId)
|
||||
|
||||
if (categoryId === null) {
|
||||
if (subcategoryId !== null) {
|
||||
throw new ConvexError("Subcategoria inválida")
|
||||
}
|
||||
if (!ticket.categoryId && !ticket.subcategoryId) {
|
||||
return { status: "unchanged" }
|
||||
}
|
||||
const now = Date.now()
|
||||
await ctx.db.patch(ticketId, {
|
||||
categoryId: undefined,
|
||||
subcategoryId: undefined,
|
||||
updatedAt: now,
|
||||
})
|
||||
const actor = (await ctx.db.get(actorId)) as Doc<"users"> | null
|
||||
await ctx.db.insert("ticketEvents", {
|
||||
ticketId,
|
||||
type: "CATEGORY_CHANGED",
|
||||
payload: {
|
||||
categoryId: null,
|
||||
categoryName: null,
|
||||
subcategoryId: null,
|
||||
subcategoryName: null,
|
||||
actorId,
|
||||
actorName: actor?.name,
|
||||
actorAvatar: actor?.avatarUrl,
|
||||
},
|
||||
createdAt: now,
|
||||
})
|
||||
return { status: "cleared" }
|
||||
}
|
||||
|
||||
const category = await ctx.db.get(categoryId)
|
||||
if (!category || category.tenantId !== ticket.tenantId) {
|
||||
throw new ConvexError("Categoria inválida")
|
||||
}
|
||||
const subcategory = await ctx.db.get(subcategoryId)
|
||||
if (!subcategory || subcategory.categoryId !== categoryId || subcategory.tenantId !== ticket.tenantId) {
|
||||
throw new ConvexError("Subcategoria inválida")
|
||||
|
||||
let subcategoryName: string | null = null
|
||||
if (subcategoryId !== null) {
|
||||
const subcategory = await ctx.db.get(subcategoryId)
|
||||
if (!subcategory || subcategory.categoryId !== categoryId || subcategory.tenantId !== ticket.tenantId) {
|
||||
throw new ConvexError("Subcategoria inválida")
|
||||
}
|
||||
subcategoryName = subcategory.name
|
||||
}
|
||||
|
||||
if (ticket.categoryId === categoryId && ticket.subcategoryId === subcategoryId) {
|
||||
if (ticket.categoryId === categoryId && (ticket.subcategoryId ?? null) === subcategoryId) {
|
||||
return { status: "unchanged" }
|
||||
}
|
||||
|
||||
const now = Date.now()
|
||||
await ctx.db.patch(ticketId, {
|
||||
categoryId,
|
||||
subcategoryId,
|
||||
subcategoryId: subcategoryId ?? undefined,
|
||||
updatedAt: now,
|
||||
})
|
||||
|
||||
|
|
@ -808,7 +848,7 @@ export const updateCategories = mutation({
|
|||
categoryId,
|
||||
categoryName: category.name,
|
||||
subcategoryId,
|
||||
subcategoryName: subcategory.name,
|
||||
subcategoryName,
|
||||
actorId,
|
||||
actorName: actor?.name,
|
||||
actorAvatar: actor?.avatarUrl,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue