import type { Weekday } from '../types/Weekday'; import type { IValueObject } from '@core/shared/domain'; export interface MonthlyRecurrencePatternProps { ordinal: 1 | 2 | 3 | 4; weekday: Weekday; } export class MonthlyRecurrencePattern implements IValueObject { readonly ordinal: 1 | 2 | 3 | 4; readonly weekday: Weekday; constructor(ordinal: 1 | 2 | 3 | 4, weekday: Weekday); constructor(props: MonthlyRecurrencePatternProps); constructor( ordinalOrProps: 1 | 2 | 3 | 4 | MonthlyRecurrencePatternProps, weekday?: Weekday, ) { if (typeof ordinalOrProps === 'object') { this.ordinal = ordinalOrProps.ordinal; this.weekday = ordinalOrProps.weekday; } else { this.ordinal = ordinalOrProps; this.weekday = weekday as Weekday; } } get props(): MonthlyRecurrencePatternProps { return { ordinal: this.ordinal, weekday: this.weekday, }; } equals(other: IValueObject): boolean { const a = this.props; const b = other.props; return a.ordinal === b.ordinal && a.weekday === b.weekday; } }