@tmlmobilidade/types
Version:
79 lines (78 loc) • 3.48 kB
JavaScript
/* * */
import { CommentSchema } from '../_common/comment.js';
import { DocumentSchema } from '../_common/document.js';
import { AvailabilityStatusSchema, ConditionStatusSchema, LifecycleStatusSchema } from '../_common/status.js';
import { UnixTimeStampSchema } from '../_common/unix-timestamp.js';
import { StopConnectionSchema } from './connections.js';
import { StopEquipmentSchema } from './equipment.js';
import { StopFacilitySchema } from './facilities.js';
import { StopJurisdictionSchema } from './jurisdiction.js';
import { StopRoadTypeSchema } from './road-type.js';
import { z } from 'zod';
/* * */
export const StopSchema = DocumentSchema.extend({
//
// General
_id: z.string(),
is_deleted: z.boolean().default(false),
jurisdiction: StopJurisdictionSchema.default('unknown'),
legacy_id: z.string().nullable().default(null),
lifecycle_status: LifecycleStatusSchema.default('draft'),
name: z.string().min(2).max(100),
new_name: z.string().min(5).max(100).nullable().default(null),
short_name: z.string().min(2).max(55),
tts_name: z.string(),
//
// Location
district_id: z.string(),
latitude: z.number(),
locality_id: z.string().nullable().default(null),
longitude: z.number(),
municipality_id: z.string(),
parish_id: z.string().nullable().default(null),
//
// Infrastructure
bench_status: ConditionStatusSchema.default('unknown'),
electricity_status: AvailabilityStatusSchema.default('unknown'),
pole_status: ConditionStatusSchema.default('unknown'),
road_type: StopRoadTypeSchema.default('unknown'),
//
// Shelter
shelter_code: z.string().nullable().default(null),
shelter_frame_size: z.tuple([z.number(), z.number()]).nullable().default(null),
shelter_installation_date: UnixTimeStampSchema.nullable().default(null),
shelter_maintainer: z.string().nullable().default(null),
shelter_make: z.string().nullable().default(null),
shelter_model: z.string().nullable().default(null),
shelter_status: ConditionStatusSchema.default('unknown'),
//
// Checks
last_infrastructure_check: UnixTimeStampSchema.nullable().default(null),
last_infrastructure_maintenance: UnixTimeStampSchema.nullable().default(null),
last_schedules_check: UnixTimeStampSchema.nullable().default(null),
last_schedules_maintenance: UnixTimeStampSchema.nullable().default(null),
//
// Facilities
connections: z.array(StopConnectionSchema).default([]),
facilities: z.array(StopFacilitySchema).default([]),
//
// Equipments
equipment: z.array(StopEquipmentSchema).default([]),
// Has ...
has_bench: AvailabilityStatusSchema.default('unknown'),
has_mupi: AvailabilityStatusSchema.default('unknown'),
has_network_map: AvailabilityStatusSchema.default('unknown'),
has_schedules: AvailabilityStatusSchema.default('unknown'),
has_shelter: AvailabilityStatusSchema.default('unknown'),
has_stop_sign: AvailabilityStatusSchema.default('unknown'),
//
// Images & Files
file_ids: z.array(z.string()).default([]),
image_ids: z.array(z.string()).default([]),
//
// Notes & Comments
comments: z.array(CommentSchema).default([]),
observations: z.string().nullable().default(null),
});
export const CreateStopSchema = StopSchema.omit({ _id: true, created_at: true, updated_at: true });
export const UpdateStopSchema = CreateStopSchema.omit({ created_by: true }).partial();