refactor: update menu and routing for ticket management
- Replaced references to "Solicitar Acesso" with "Abrir Chamado" across the application for consistency in terminology. - Updated routing logic to reflect the new ticket management flow, ensuring that the dashboard and sidebar components point to the correct paths. - Removed the obsolete "Solicitar Acesso" page, streamlining the user experience and reducing unnecessary navigation options. - Enhanced backend schema to support new ticket functionalities, including ticket creation and management.
This commit is contained in:
@@ -769,4 +769,173 @@ export default defineSchema({
|
||||
.index("by_timestamp", ["timestamp"])
|
||||
.index("by_status", ["status"])
|
||||
.index("by_config", ["configId", "timestamp"]),
|
||||
|
||||
tickets: defineTable({
|
||||
numero: v.string(),
|
||||
titulo: v.string(),
|
||||
descricao: v.string(),
|
||||
tipo: v.union(
|
||||
v.literal("reclamacao"),
|
||||
v.literal("elogio"),
|
||||
v.literal("sugestao"),
|
||||
v.literal("chamado")
|
||||
),
|
||||
categoria: v.optional(v.string()),
|
||||
status: v.union(
|
||||
v.literal("aberto"),
|
||||
v.literal("em_andamento"),
|
||||
v.literal("aguardando_usuario"),
|
||||
v.literal("resolvido"),
|
||||
v.literal("encerrado"),
|
||||
v.literal("cancelado")
|
||||
),
|
||||
prioridade: v.union(
|
||||
v.literal("baixa"),
|
||||
v.literal("media"),
|
||||
v.literal("alta"),
|
||||
v.literal("critica")
|
||||
),
|
||||
solicitanteId: v.id("usuarios"),
|
||||
solicitanteNome: v.string(),
|
||||
solicitanteEmail: v.string(),
|
||||
responsavelId: v.optional(v.id("usuarios")),
|
||||
setorResponsavel: v.optional(v.string()),
|
||||
slaConfigId: v.optional(v.id("slaConfigs")),
|
||||
conversaId: v.optional(v.id("conversas")),
|
||||
prazoResposta: v.optional(v.number()),
|
||||
prazoConclusao: v.optional(v.number()),
|
||||
prazoEncerramento: v.optional(v.number()),
|
||||
timeline: v.optional(
|
||||
v.array(
|
||||
v.object({
|
||||
etapa: v.string(),
|
||||
status: v.union(
|
||||
v.literal("pendente"),
|
||||
v.literal("em_andamento"),
|
||||
v.literal("concluido"),
|
||||
v.literal("vencido")
|
||||
),
|
||||
prazo: v.optional(v.number()),
|
||||
concluidoEm: v.optional(v.number()),
|
||||
observacao: v.optional(v.string()),
|
||||
})
|
||||
)
|
||||
),
|
||||
alertasEmitidos: v.optional(
|
||||
v.array(
|
||||
v.object({
|
||||
tipo: v.union(
|
||||
v.literal("resposta"),
|
||||
v.literal("conclusao"),
|
||||
v.literal("encerramento")
|
||||
),
|
||||
emitidoEm: v.number(),
|
||||
})
|
||||
)
|
||||
),
|
||||
anexos: v.optional(
|
||||
v.array(
|
||||
v.object({
|
||||
arquivoId: v.id("_storage"),
|
||||
nome: v.optional(v.string()),
|
||||
tipo: v.optional(v.string()),
|
||||
tamanho: v.optional(v.number()),
|
||||
})
|
||||
)
|
||||
),
|
||||
tags: v.optional(v.array(v.string())),
|
||||
canalOrigem: v.optional(v.string()),
|
||||
ultimaInteracaoEm: v.number(),
|
||||
criadoEm: v.number(),
|
||||
atualizadoEm: v.number(),
|
||||
})
|
||||
.index("by_numero", ["numero"])
|
||||
.index("by_status", ["status"])
|
||||
.index("by_solicitante", ["solicitanteId", "status"])
|
||||
.index("by_responsavel", ["responsavelId", "status"])
|
||||
.index("by_setor", ["setorResponsavel", "status"]),
|
||||
|
||||
ticketInteractions: defineTable({
|
||||
ticketId: v.id("tickets"),
|
||||
autorId: v.optional(v.id("usuarios")),
|
||||
origem: v.union(
|
||||
v.literal("usuario"),
|
||||
v.literal("ti"),
|
||||
v.literal("sistema")
|
||||
),
|
||||
tipo: v.union(
|
||||
v.literal("mensagem"),
|
||||
v.literal("status"),
|
||||
v.literal("anexo"),
|
||||
v.literal("alerta")
|
||||
),
|
||||
conteudo: v.string(),
|
||||
anexos: v.optional(
|
||||
v.array(
|
||||
v.object({
|
||||
arquivoId: v.id("_storage"),
|
||||
nome: v.optional(v.string()),
|
||||
tipo: v.optional(v.string()),
|
||||
tamanho: v.optional(v.number()),
|
||||
})
|
||||
)
|
||||
),
|
||||
statusAnterior: v.optional(
|
||||
v.union(
|
||||
v.literal("aberto"),
|
||||
v.literal("em_andamento"),
|
||||
v.literal("aguardando_usuario"),
|
||||
v.literal("resolvido"),
|
||||
v.literal("encerrado"),
|
||||
v.literal("cancelado")
|
||||
)
|
||||
),
|
||||
statusNovo: v.optional(
|
||||
v.union(
|
||||
v.literal("aberto"),
|
||||
v.literal("em_andamento"),
|
||||
v.literal("aguardando_usuario"),
|
||||
v.literal("resolvido"),
|
||||
v.literal("encerrado"),
|
||||
v.literal("cancelado")
|
||||
)
|
||||
),
|
||||
visibilidade: v.union(
|
||||
v.literal("publico"),
|
||||
v.literal("interno")
|
||||
),
|
||||
criadoEm: v.number(),
|
||||
})
|
||||
.index("by_ticket", ["ticketId"])
|
||||
.index("by_ticket_type", ["ticketId", "tipo"])
|
||||
.index("by_autor", ["autorId"]),
|
||||
|
||||
slaConfigs: defineTable({
|
||||
nome: v.string(),
|
||||
descricao: v.optional(v.string()),
|
||||
setores: v.optional(v.array(v.string())),
|
||||
tempoRespostaHoras: v.number(),
|
||||
tempoConclusaoHoras: v.number(),
|
||||
tempoEncerramentoHoras: v.optional(v.number()),
|
||||
alertaAntecedenciaHoras: v.number(),
|
||||
ativo: v.boolean(),
|
||||
criadoPor: v.id("usuarios"),
|
||||
atualizadoPor: v.optional(v.id("usuarios")),
|
||||
criadoEm: v.number(),
|
||||
atualizadoEm: v.number(),
|
||||
})
|
||||
.index("by_ativo", ["ativo"])
|
||||
.index("by_nome", ["nome"]),
|
||||
|
||||
ticketAssignments: defineTable({
|
||||
ticketId: v.id("tickets"),
|
||||
responsavelId: v.id("usuarios"),
|
||||
atribuidoPor: v.id("usuarios"),
|
||||
motivo: v.optional(v.string()),
|
||||
ativo: v.boolean(),
|
||||
criadoEm: v.number(),
|
||||
encerradoEm: v.optional(v.number()),
|
||||
})
|
||||
.index("by_ticket", ["ticketId", "ativo"])
|
||||
.index("by_responsavel", ["responsavelId", "ativo"]),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user