@tmlmobilidade/types
Version:
90 lines (89 loc) • 3.99 kB
JavaScript
/* * */
import { StopConnectionSchema } from './connections.js';
import { StopEquipmentSchema } from './equipment.js';
import { StopFacilitySchema } from './facilities.js';
import { StopFlagSchema } from './flag.js';
import { StopJurisdictionSchema } from './jurisdiction.js';
import { StopRoadTypeSchema } from './road-type.js';
import { StopIdSchema } from './stop-id.js';
import { AvailabilityStatusSchema, CommentSchema, ConditionStatusSchema, DocumentSchema, LifecycleStatusSchema, UnixTimestampSchema } from '@tmlmobilidade/go-types-shared';
import { z } from 'zod';
/* * */
export const StopSchema = DocumentSchema.extend({
//
// General
_id: StopIdSchema,
flags: z.array(StopFlagSchema).default([]),
is_deleted: z.boolean().default(false),
jurisdiction: StopJurisdictionSchema.default('unknown'),
legacy_id: z.string().nullable().default(null),
legacy_ids: z.array(z.string()).default([]),
lifecycle_status: LifecycleStatusSchema.default('draft'),
name: z.string().min(2).max(100),
new_name: z.string().min(5).max(100).nullable().default(null),
previous_go_id: z.string().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),
//
// This field is not sent by the backend, but is useful to have in the frontend for easier access to the associated patterns of an event
associated_patterns: z.array(z.object({
_id: z.string(),
code: z.string(),
headsign: z.string(),
line_id: z.string(),
route_id: z.string(),
})).default([]),
});
export const CreateStopSchema = StopSchema.omit({ _id: true, associated_patterns: true, created_at: true, updated_at: true });
export const UpdateStopSchema = CreateStopSchema.omit({ created_by: true }).partial();