All files / src/platform/calendar/schemas recurrence.schema.ts

0% Statements 0/27
0% Branches 0/8
100% Functions 0/0
0% Lines 0/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62                                                                                                                           
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Schema as MongooseSchema } from 'mongoose';
 
@Schema({ timestamps: true, collection: 'calendar_recurrence_rules' })
export class RecurrenceRule extends Document {
  @Prop({ required: true, index: true })
  tenantId: string;
 
  @Prop({ required: true, unique: true, index: true })
  recurrenceRuleId: string;
 
  @Prop({ required: true, enum: ['DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'] })
  frequency: string;
 
  @Prop({ default: 1 })
  interval: number;
 
  @Prop({ type: [Number], default: [] }) // 0=Sunday, 1=Monday...
  byDayOfWeek: number[];
 
  @Prop({ type: [Number], default: [] }) // 1 to 31
  byMonthDay: number[];
 
  @Prop({ type: [Number], default: [] }) // 1 to 12
  byMonth: number[];
 
  @Prop({ default: null })
  untilDate: Date;
 
  @Prop({ default: null })
  count: number;
 
  @Prop({ default: 'UTC' })
  timezone: string;
 
  @Prop({ type: [Date], default: [] })
  exclusions: Date[]; // Dates skipped in recurrence expansion
}
 
export const RecurrenceRuleSchema = SchemaFactory.createForClass(RecurrenceRule);
 
@Schema({ timestamps: true, collection: 'calendar_recurrence_exceptions' })
export class RecurrenceException extends Document {
  @Prop({ required: true, index: true })
  tenantId: string;
 
  @Prop({ required: true, index: true })
  recurrenceRuleId: string;
 
  @Prop({ required: true })
  originalOccurrenceDate: Date; // The occurrence slot that was exceptioned
 
  @Prop({ required: true, enum: ['cancelled', 'modified'] })
  exceptionType: string;
 
  @Prop()
  modifiedEventId?: string; // If modified, links to a standalone event representing this override
}
 
export const RecurrenceExceptionSchema = SchemaFactory.createForClass(RecurrenceException);
RecurrenceExceptionSchema.index({ tenantId: 1, recurrenceRuleId: 1, originalOccurrenceDate: 1 }, { unique: true });