Extends PATCH /admin/agents/:agentId with an optional userId to finally wire Agent.userId (added in 010-identity-auth as schema-only, never consumed by any workflow), with proactive role/duplicate-link checks mirroring UsersService.create's own pre-check style. Adds GET /agents/me/tickets and GET /admin/agents/:agentId/tickets, sharing one TicketsService.listAssignedTo method, returning a dashboard- ready summary (product, customer, priority, severity, status, SLA state) of every ticket currently assigned to an agent — no such query existed anywhere in the ticketing or orchestration modules before this. Backed by a new Assignment @@index([agentId, isCurrent]). Discovered while starting supporthub-web's 001-agent-admin-ui: its agent- dashboard user story had no backend data source without this. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
28 lines
860 B
TypeScript
28 lines
860 B
TypeScript
import { z } from 'zod';
|
|
|
|
export const createAgentSchema = z
|
|
.object({
|
|
name: z.string().min(1),
|
|
})
|
|
.strict();
|
|
|
|
export const updateAgentSchema = z
|
|
.object({
|
|
name: z.string().min(1).optional(),
|
|
teamId: z.string().min(1).optional(),
|
|
active: z.boolean().optional(),
|
|
// 011-agent-ticket-queue: links this agent to the User account it authenticates as.
|
|
// null explicitly unlinks; omitting the field leaves the existing link unchanged.
|
|
userId: z.string().min(1).nullable().optional(),
|
|
})
|
|
.strict();
|
|
|
|
export const listAgentsQuerySchema = z.object({
|
|
active: z.coerce.boolean().optional(),
|
|
teamId: z.string().optional(),
|
|
});
|
|
|
|
export type CreateAgentBody = z.infer<typeof createAgentSchema>;
|
|
export type UpdateAgentBody = z.infer<typeof updateAgentSchema>;
|
|
export type ListAgentsQuery = z.infer<typeof listAgentsQuerySchema>;
|