UNPKG

atikin-chrono-flow

Version:

Intelligent Timezone-Aware Scheduling

72 lines (58 loc) 1.69 kB
const moment = require('moment-timezone'); const { v4: uuidv4 } = require('uuid'); class ChronoFlow { constructor() { this.schedules = []; } // Add a new event addEvent(name, startTime, endTime, timezone) { const start = moment.tz(startTime, timezone); const end = moment.tz(endTime, timezone); if (!start.isValid() || !end.isValid()) { throw new Error("Invalid date or timezone provided."); } if (start.isAfter(end)) { throw new Error("Start time must be before end time."); } const event = { id: uuidv4(), name, start, end, timezone, }; this.schedules.push(event); return event; } // Get all events in a specific timezone getEventsInTimezone(timezone) { return this.schedules.map((event) => ({ ...event, start: event.start.clone().tz(timezone).format(), end: event.end.clone().tz(timezone).format(), })); } // Check for overlapping events detectConflicts() { const conflicts = []; for (let i = 0; i < this.schedules.length; i++) { for (let j = i + 1; j < this.schedules.length; j++) { const event1 = this.schedules[i]; const event2 = this.schedules[j]; if ( event1.start.isBefore(event2.end) && event1.end.isAfter(event2.start) ) { conflicts.push({ event1, event2 }); } } } return conflicts; } // Remove an event by ID removeEvent(id) { this.schedules = this.schedules.filter((event) => event.id !== id); return this.schedules; } } module.exports = ChronoFlow;