@tmlmobilidade/types
Version:
This package provides shared Zod validation schemas and their corresponding TypeScript types for use across projects. All types are automatically inferred from the schemas to ensure full type safety and reduce maintenance overhead.
88 lines (87 loc) • 2.58 kB
JavaScript
/* * */
import { DocumentSchema } from './_common/document.js';
import { unixTimeStampSchema } from './_common/unix-timestamp.js';
import { z } from 'zod';
/* * */
// Define constants for enum values for better maintainability
const CAUSE_VALUES = [
'ACCIDENT',
'CONSTRUCTION',
'DEMONSTRATION',
'HOLIDAY',
'MAINTENANCE',
'MEDICAL_EMERGENCY',
'OTHER_CAUSE',
'POLICE_ACTIVITY',
'STRIKE',
'TECHNICAL_PROBLEM',
'UNKNOWN_CAUSE',
'WEATHER',
];
const EFFECT_VALUES = [
'ACCESSIBILITY_ISSUE',
'ADDITIONAL_SERVICE',
'DETOUR',
'MODIFIED_SERVICE',
'NO_EFFECT',
'NO_SERVICE',
'OTHER_EFFECT',
'REDUCED_SERVICE',
'SIGNIFICANT_DELAYS',
'STOP_MOVED',
'UNKNOWN_EFFECT',
];
const PUBLISH_STATUS_VALUES = [
'PUBLISHED',
'ARCHIVED',
'DRAFT',
];
const ALERT_TYPE_VALUES = [
'PLANNED',
'REALTIME',
];
const REFERENCE_TYPE_VALUES = [
'LINE',
'STOP',
'AGENCY',
'TRIP',
];
// Define schemas using constants
export const causeSchema = z.enum(CAUSE_VALUES);
export const effectSchema = z.enum(EFFECT_VALUES);
export const publishStatusSchema = z.enum(PUBLISH_STATUS_VALUES);
export const alertTypeSchema = z.enum(ALERT_TYPE_VALUES);
export const referenceTypeSchema = z.enum(REFERENCE_TYPE_VALUES);
// Base schema for alerts with common validation rules
export const AlertSchema = DocumentSchema.extend({
active_period_end_date: unixTimeStampSchema.nullish(),
active_period_start_date: unixTimeStampSchema,
cause: causeSchema,
coordinates: z.tuple([z.number(), z.number()]).nullish(),
created_by: z.string().min(1),
description: z.string(),
effect: effectSchema,
file_id: z.string().nullish(),
info_url: z.string().url().optional().or(z.literal('')),
modified_by: z.string().min(1),
municipality_ids: z.array(z.string().min(1)),
publish_end_date: unixTimeStampSchema.nullish(),
publish_start_date: unixTimeStampSchema,
publish_status: publishStatusSchema,
reference_type: referenceTypeSchema,
references: z.array(z.object({
child_ids: z.array(z.string().min(1)),
parent_id: z.string().min(1),
})),
title: z.string().min(1),
type: alertTypeSchema,
}).strict();
export const CreateAlertSchema = AlertSchema
.omit({ _id: true, created_at: true, updated_at: true });
export const UpdateAlertSchema = AlertSchema
.omit({ _id: true, created_at: true, updated_at: true })
.partial();
/* * */
export const AlertPermissionSchema = z.object({
agency_ids: z.array(z.string()),
});