46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import { z } from 'zod';
|
|
import { citizenId, isoDate, coordsSchema } from './common';
|
|
import { DEPARTMENTS } from '../rbac';
|
|
|
|
export const dispatchStatus = z.enum(['pending', 'assigned', 'enroute', 'onscene', 'closed']);
|
|
export type DispatchStatus = z.infer<typeof dispatchStatus>;
|
|
|
|
export const dispatchPriority = z.enum(['low', 'medium', 'high']);
|
|
export type DispatchPriority = z.infer<typeof dispatchPriority>;
|
|
|
|
/** Live-Einsatz (Tabelle mdt_dispatch_calls + Realtime via Socket). */
|
|
export const dispatchCallSchema = z.object({
|
|
id: z.number().int(),
|
|
code: z.string(), // 10-Code / Kategorie
|
|
title: z.string(),
|
|
description: z.string().default(''),
|
|
department: z.enum(DEPARTMENTS),
|
|
priority: dispatchPriority.default('medium'),
|
|
status: dispatchStatus.default('pending'),
|
|
location: z.string().nullable(),
|
|
coords: coordsSchema.nullable(),
|
|
callerCitizenid: citizenId.nullable(),
|
|
assignedOfficers: z.array(citizenId).default([]),
|
|
createdAt: isoDate,
|
|
updatedAt: isoDate.nullable(),
|
|
});
|
|
export type DispatchCall = z.infer<typeof dispatchCallSchema>;
|
|
|
|
export const createDispatchCallSchema = z.object({
|
|
code: z.string().min(1),
|
|
title: z.string().min(1),
|
|
description: z.string().default(''),
|
|
department: z.enum(DEPARTMENTS).default('police'),
|
|
priority: dispatchPriority.default('medium'),
|
|
location: z.string().nullable().default(null),
|
|
coords: coordsSchema.nullable().default(null),
|
|
callerCitizenid: citizenId.nullable().default(null),
|
|
});
|
|
export type CreateDispatchCallInput = z.infer<typeof createDispatchCallSchema>;
|
|
|
|
export const assignDispatchSchema = z.object({
|
|
officers: z.array(citizenId).min(1),
|
|
status: dispatchStatus.optional(),
|
|
});
|
|
export type AssignDispatchInput = z.infer<typeof assignDispatchSchema>;
|