export const LocationId = S.string.pipe(
S.trim,
S.startsWith('loc_'),
S.brand(Symbol.for('LocationId')),
);
export const ServiceId = S.string.pipe(
S.trim,
S.startsWith('ser_'),
S.brand(Symbol.for('ServiceId')),
);
const DAYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
export const Day = S.string.pipe(
S.filter((value) => DAYS.includes(value.toLowerCase()), {
message: (value) => `${value} is not a valid day`,
identifier: 'Day',
}),
S.brand(Symbol.for('Day')),
);
const requestedAppointmentDate = DateTime.fromISO(input.date, {
zone: location.timeZone,
});
const schedule = await fetchSchedules({
locationId: LocationId(location.id),
serviceId: ServiceId(input.serviceId),
day: Option.fromNullable(requestedAppointmentDate.weekdayLong).pipe(
Option.map((day) => Day(day.toLowerCase())),
Option.getOrThrow,
),
});
export const LocationId = S.string.pipe(
S.trim,
S.startsWith('loc_'),
S.brand(Symbol.for('LocationId')),
);
export const ServiceId = S.string.pipe(
S.trim,
S.startsWith('ser_'),
S.brand(Symbol.for('ServiceId')),
);
const DAYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
export const Day = S.string.pipe(
S.filter((value) => DAYS.includes(value.toLowerCase()), {
message: (value) => `${value} is not a valid day`,
identifier: 'Day',
}),
S.brand(Symbol.for('Day')),
);
const requestedAppointmentDate = DateTime.fromISO(input.date, {
zone: location.timeZone,
});
const schedule = await fetchSchedules({
locationId: LocationId(location.id),
serviceId: ServiceId(input.serviceId),
day: Option.fromNullable(requestedAppointmentDate.weekdayLong).pipe(
Option.map((day) => Day(day.toLowerCase())),
Option.getOrThrow,
),
});