@tmlmobilidade/types
Version:
51 lines (50 loc) • 1.58 kB
JavaScript
/* * */
import { DocumentSchema } from '@tmlmobilidade/go-types-shared';
import { z } from 'zod';
/* * */
export const FARE_PAYMENT_METHOD = {
ONBOARD: '0',
PREPAID: '1',
};
export const FARE_TRANSFERS = {
NONE: '0',
ONE: '1',
TWO: '2',
UNLIMITED: 'unlimited',
};
export const FARE_CURRENCY = {
EUR: 'EUR',
};
/* * */
export const FareSchema = DocumentSchema.extend({
agency_ids: z.array(z.string()).min(1, 'At least one agency ID is required'),
code: z.string().trim().min(1).max(10),
currency_type: z.enum([FARE_CURRENCY.EUR]).default(FARE_CURRENCY.EUR),
is_locked: z.boolean().default(false),
name: z.string().trim().min(1).max(50),
payment_method: z.enum([FARE_PAYMENT_METHOD.ONBOARD, FARE_PAYMENT_METHOD.PREPAID]).default(FARE_PAYMENT_METHOD.ONBOARD),
price: z.coerce.number().min(0).default(0),
transfers: z.enum([FARE_TRANSFERS.NONE, FARE_TRANSFERS.ONE, FARE_TRANSFERS.TWO, FARE_TRANSFERS.UNLIMITED]).default(FARE_TRANSFERS.NONE),
});
/* * */
// Only name, code, and agency_ids are required for creation
export const CreateFareSchema = z.object({
agency_ids: FareSchema.shape.agency_ids,
code: FareSchema.shape.code,
name: FareSchema.shape.name,
}).merge(FareSchema.omit({
agency_ids: true,
code: true,
created_at: true,
name: true,
updated_at: true,
}).partial());
export const UpdateFareSchema = CreateFareSchema
.omit({ created_by: true })
.partial();
/* * */
export const FareSimplifiedSchema = FareSchema.pick({
_id: true,
name: true,
payment_method: true,
});