From 0186269608fbf1011040de8f2229fe01eda7d14a Mon Sep 17 00:00:00 2001 From: poojakarma Date: Wed, 28 Aug 2024 14:27:33 +0530 Subject: [PATCH 1/7] remove pipe from controller --- src/modules/event/event.controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/event/event.controller.ts b/src/modules/event/event.controller.ts index 4d38ad5..a460987 100644 --- a/src/modules/event/event.controller.ts +++ b/src/modules/event/event.controller.ts @@ -48,7 +48,7 @@ export class EventController { constructor( private readonly eventService: EventService, private readonly configService: ConfigService, - ) {} + ) { } @UseFilters(new AllExceptionsFilter(API_ID.CREATE_EVENT)) @Post('/create') @@ -125,7 +125,7 @@ export class EventController { @Param('id') id: string, @Body( new ValidationPipe({ transform: true }), - new DateValidationPipe(), + // new DateValidationPipe(), // new RegistrationDateValidationPipe(), // new RecurringEndDateValidationPipe(), ) From 1b202eb3f1866559a2bff5b1ae6c3779a7964fe4 Mon Sep 17 00:00:00 2001 From: poojakarma Date: Wed, 28 Aug 2024 15:59:34 +0530 Subject: [PATCH 2/7] Added condition for startDate is postpond than old date and new_enddate is equal to old_endDate --- src/modules/event/event.service.ts | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index e0920cf..9fe653d 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -13,6 +13,7 @@ import { In, Not, MoreThan, + LessThan, MoreThanOrEqual, Between, } from 'typeorm'; @@ -460,9 +461,9 @@ export class EventService { let updateRemainingEvents; if ( currentEventRepetition.orignalEventStartTime !== - currentEventRepetition.startDatetime.split('T')[1] || + currentEventRepetition.startDatetime.split('T')[1] || currentEventRepetition.orignalEventEndTime !== - currentEventRepetition.endDatetime.split('T')[1] + currentEventRepetition.endDatetime.split('T')[1] ) { updateRemainingEvents = await this.updateEventRepetitionTime( currentEventRepetition.startDateTime, @@ -517,8 +518,28 @@ export class EventService { newEndDate.getTime() === oldEndDate.getTime() ) { // postpone events when new start date is after old start date + // Get all eventRepetationId which are are less than new recuurnecestartDate and delete all + const removedEvent = await this.eventRepetitionRepository.find({ + select: ["eventRepetitionId"], + where: { + startDateTime: LessThan(new Date(newRecurrencePattern.recurringStartDate)) + } + }); + const idsArray = removedEvent.map(repetition => repetition.eventRepetitionId); // remove events + if (idsArray.length > 0) { + await this.eventRepetitionRepository.delete(idsArray); + } // update start date in recpattern + const newEvent = await this.eventRepository.findOne({ + where: { + eventId: currentEventRepetition.eventId + } + }) + newEvent.recurrencePattern = newRecurrencePattern; + await this.eventRepository.save(newEvent); + return { removedEvent, updateRemainingEvents: 0 }; + } else if ( newEndDate.getTime() !== oldEndDate.getTime() && newStartDate > currentDate && @@ -712,6 +733,8 @@ export class EventService { const startDateAndTimeOfCurrentEvent = eventRepetition.startDateTime .toISOString() .split('T'); + console.log(startDateAndTimeOfCurrentEvent, "startDate"); + const endDateAndTimeOfCurrentEvent = eventRepetition.endDateTime .toISOString() .split('T'); @@ -1495,7 +1518,7 @@ export class EventService { if ( config.endCondition.type === 'endDate' && occurrences[occurrences.length - 1]?.endDateTime > - new Date(config.endCondition.value) + new Date(config.endCondition.value) ) { occurrences.pop(); } From 98099676d891ac65b2cdcc38ad85ab96a5a08460 Mon Sep 17 00:00:00 2001 From: poojakarma Date: Wed, 28 Aug 2024 19:47:28 +0530 Subject: [PATCH 3/7] added condition for startdate is prepone and endDate is same --- src/modules/event/event.service.ts | 41 +++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index 9fe653d..c5bd7c2 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -15,6 +15,7 @@ import { MoreThan, LessThan, MoreThanOrEqual, + LessThanOrEqual, Between, } from 'typeorm'; import { Events } from './entities/event.entity'; @@ -500,17 +501,35 @@ export class EventService { currentEventRepetition['startDatetime'] = newRecurrencePattern.recurringStartDate; - currentEventRepetition.recurrencePattern.endCondition.type = 'endDate'; - currentEventRepetition.recurrencePattern.endCondition.value = - oldRecurrencePattern.endCondition.value; + currentEventRepetition['endDatetime'] = + currentEventRepetition['startDatetime'].split('T')[0] + + 'T' + + currentEventRepetition.endDatetime.split('T')[1]; + currentEventRepetition.recurrencePattern.recurringStartDate = + newRecurrencePattern.recurringStartDate; + + currentEventRepetition.createdAt = new Date(); + currentEventRepetition.updatedAt = new Date(); // const newlyAddedEvents = await this.addEventsInRange( // newStartDate, // oldStartDate, // currentEventRepetition, // ); - // console.log('--------------------------'); - // console.log(newlyAddedEvents, 'newlyAddedEvents'); - // finalStartDate = newStartDate; + const removedEvents = await this.removeEventsLessInRange( + currentEventRepetition.startDateTime, + currentEventRepetition.eventId, + ); + const newlyAddedEvents = await this.createRecurringEvents( + currentEventRepetition, + currentEventRepetition.eventId, + currentEventRepetition.eventDetailId, + true, + ); + + const extUpdt = await this.updateEventRepetitionPattern( + currentEventRepetition.eventId, + currentEventRepetition.recurrencePattern, + ); return { newlyAddedEvents: true }; } else if ( newStartDate > oldStartDate && @@ -607,6 +626,16 @@ export class EventService { return removedEvents; } + async removeEventsLessInRange(fromDate: Date, eventId: string) { + const removedEvents = await this.eventRepetitionRepository.delete({ + eventId: eventId, + startDateTime: LessThanOrEqual(fromDate), + // endDateTime: MoreThanOrEqual(toDate), + }); + return removedEvents; + } + + checkIfDateIsSame( newRecurrenceStartDt: string, oldRecurrenceStartDt: string, From aecd2c0d79edced3bae7bc2edd11bd4f2cf0fbff Mon Sep 17 00:00:00 2001 From: poojakarma Date: Wed, 28 Aug 2024 20:08:52 +0530 Subject: [PATCH 4/7] added one missing condition --- src/modules/event/event.service.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index c5bd7c2..fea524e 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -507,6 +507,8 @@ export class EventService { currentEventRepetition.endDatetime.split('T')[1]; currentEventRepetition.recurrencePattern.recurringStartDate = newRecurrencePattern.recurringStartDate; + // currentEventRepetition.recurrencePattern.endCondition.value = currentEventRepetition.startDateTime + currentEventRepetition.createdAt = new Date(); currentEventRepetition.updatedAt = new Date(); @@ -519,6 +521,10 @@ export class EventService { currentEventRepetition.startDateTime, currentEventRepetition.eventId, ); + const removedEvent = await this.removeEventsInRange( + currentEventRepetition.startDateTime, + currentEventRepetition.eventId, + ); const newlyAddedEvents = await this.createRecurringEvents( currentEventRepetition, currentEventRepetition.eventId, From 202b67d73e2aeff488e8da7d383c1706aed1d852 Mon Sep 17 00:00:00 2001 From: poojakarma Date: Wed, 28 Aug 2024 21:03:47 +0530 Subject: [PATCH 5/7] added condition for startDate and endDate different --- src/modules/event/event.service.ts | 37 ++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index fea524e..48cb9c6 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -507,8 +507,6 @@ export class EventService { currentEventRepetition.endDatetime.split('T')[1]; currentEventRepetition.recurrencePattern.recurringStartDate = newRecurrencePattern.recurringStartDate; - // currentEventRepetition.recurrencePattern.endCondition.value = currentEventRepetition.startDateTime - currentEventRepetition.createdAt = new Date(); currentEventRepetition.updatedAt = new Date(); @@ -574,6 +572,41 @@ export class EventService { // remove events // add events // update start date and end date in recpattern + + currentEventRepetition['startDatetime'] = + newRecurrencePattern.recurringStartDate; + currentEventRepetition['endDatetime'] = + currentEventRepetition['startDatetime'].split('T')[0] + + 'T' + + currentEventRepetition.endDatetime.split('T')[1]; + currentEventRepetition.recurrencePattern.recurringStartDate = + newRecurrencePattern.recurringStartDate; + currentEventRepetition.recurrencePattern.endCondition.value = + newRecurrencePattern.endCondition.value; + + currentEventRepetition.createdAt = new Date(); + currentEventRepetition.updatedAt = new Date(); + const removedEvents = await this.removeEventsLessInRange( + currentEventRepetition.startDateTime, + currentEventRepetition.eventId, + ); + const removedEvent = await this.removeEventsInRange( + currentEventRepetition.startDateTime, + currentEventRepetition.eventId, + ); + + const newlyAddedEvents = await this.createRecurringEvents( + currentEventRepetition, + currentEventRepetition.eventId, + currentEventRepetition.eventDetailId, + true, + ); + + const extUpdt = await this.updateEventRepetitionPattern( + currentEventRepetition.eventId, + currentEventRepetition.recurrencePattern, + ); + return { newlyAddedEvents: true }; } } else { // Frequency and interval are different From d50797ef11f95a4d7dd5178efc7d6ac124fe4ee5 Mon Sep 17 00:00:00 2001 From: poojakarma Date: Thu, 29 Aug 2024 11:23:10 +0530 Subject: [PATCH 6/7] added condition for passed away startDate and endDate --- src/modules/event/event.service.ts | 45 ++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index 48cb9c6..96f2453 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -383,7 +383,6 @@ export class EventService { const newEndDate = new Date(newRecurringEnd); const oldEndDate = new Date(oldRecurringEnd); - // new start date is passed // check if new start date is greater than old start date if (nstartDate === ostartDate && nstartTime !== ostartTime) { @@ -392,6 +391,20 @@ export class EventService { ); } + // new start date is passed + if (nstartDate !== ostartDate && oldStartDate < currentDate) { + throw new BadRequestException( + 'Start Date can not be changes beacuse it is passed away', + ); + } + + // new End date is passed + if (newRecurringEnd !== oldRecurringEnd && oldEndDate < currentDate) { + throw new BadRequestException( + 'End Date can not be changes beacuse it is passed away', + ); + } + if ( newRecurringStart === oldRecurringStart && newRecurringEnd !== oldRecurringEnd @@ -462,9 +475,9 @@ export class EventService { let updateRemainingEvents; if ( currentEventRepetition.orignalEventStartTime !== - currentEventRepetition.startDatetime.split('T')[1] || + currentEventRepetition.startDatetime.split('T')[1] || currentEventRepetition.orignalEventEndTime !== - currentEventRepetition.endDatetime.split('T')[1] + currentEventRepetition.endDatetime.split('T')[1] ) { updateRemainingEvents = await this.updateEventRepetitionTime( currentEventRepetition.startDateTime, @@ -541,14 +554,18 @@ export class EventService { newEndDate.getTime() === oldEndDate.getTime() ) { // postpone events when new start date is after old start date - // Get all eventRepetationId which are are less than new recuurnecestartDate and delete all + // Get all eventRepetationId which are are less than new recuurnecestartDate and delete all const removedEvent = await this.eventRepetitionRepository.find({ - select: ["eventRepetitionId"], + select: ['eventRepetitionId'], where: { - startDateTime: LessThan(new Date(newRecurrencePattern.recurringStartDate)) - } + startDateTime: LessThan( + new Date(newRecurrencePattern.recurringStartDate), + ), + }, }); - const idsArray = removedEvent.map(repetition => repetition.eventRepetitionId); + const idsArray = removedEvent.map( + (repetition) => repetition.eventRepetitionId, + ); // remove events if (idsArray.length > 0) { await this.eventRepetitionRepository.delete(idsArray); @@ -556,13 +573,12 @@ export class EventService { // update start date in recpattern const newEvent = await this.eventRepository.findOne({ where: { - eventId: currentEventRepetition.eventId - } - }) + eventId: currentEventRepetition.eventId, + }, + }); newEvent.recurrencePattern = newRecurrencePattern; await this.eventRepository.save(newEvent); return { removedEvent, updateRemainingEvents: 0 }; - } else if ( newEndDate.getTime() !== oldEndDate.getTime() && newStartDate > currentDate && @@ -674,7 +690,6 @@ export class EventService { return removedEvents; } - checkIfDateIsSame( newRecurrenceStartDt: string, oldRecurrenceStartDt: string, @@ -801,7 +816,7 @@ export class EventService { const startDateAndTimeOfCurrentEvent = eventRepetition.startDateTime .toISOString() .split('T'); - console.log(startDateAndTimeOfCurrentEvent, "startDate"); + console.log(startDateAndTimeOfCurrentEvent, 'startDate'); const endDateAndTimeOfCurrentEvent = eventRepetition.endDateTime .toISOString() @@ -1586,7 +1601,7 @@ export class EventService { if ( config.endCondition.type === 'endDate' && occurrences[occurrences.length - 1]?.endDateTime > - new Date(config.endCondition.value) + new Date(config.endCondition.value) ) { occurrences.pop(); } From eae7bbc1be683ec560264b349a5c442cf5c50edc Mon Sep 17 00:00:00 2001 From: poojakarma Date: Thu, 29 Aug 2024 21:40:38 +0530 Subject: [PATCH 7/7] added condition for startDate and endDate change --- src/modules/event/event.service.ts | 117 ++++++++++++++--------------- 1 file changed, 56 insertions(+), 61 deletions(-) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index 96f2453..fee2845 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -351,6 +351,38 @@ export class EventService { ); } + const currentDate = new Date(); + const newRecurringStart = newRecurrencePattern.recurringStartDate; + const newStartDate = new Date(newRecurringStart); + const nstartDateTime = newRecurringStart.split('T'); + const nstartDate = nstartDateTime[0]; + const nstartTime = nstartDateTime[1]; + const oldRecurringStart = oldRecurrencePattern.recurringStartDate; + const oldStartDate = new Date(oldRecurringStart); + const ostartDateTime = oldRecurringStart.split('T'); + const ostartDate = ostartDateTime[0]; + const ostartTime = ostartDateTime[1]; + + const newRecurringEnd = newRecurrencePattern.endCondition.value; + const oldRecurringEnd = oldRecurrencePattern.endCondition.value; + const newEndDate = new Date(newRecurringEnd); + const oldEndDate = new Date(oldRecurringEnd); + const nEndDate = newEndDate[0]; + const oEndDate = oldEndDate[0]; + + if (nstartDate === ostartDate && nstartTime !== ostartTime) { + throw new BadRequestException( + 'Recurring Start Time cannot be changed pass orignal start time', + ); + } + + // new End date is passed + if (newRecurringEnd !== oldRecurringEnd && oldEndDate < currentDate) { + throw new BadRequestException( + 'End Date can not be changes beacuse it is passed away', + ); + } + if ( newRecurrencePattern.frequency === Frequency.weekly && newRecurrencePattern.frequency === oldRecurrencePattern.frequency && @@ -360,37 +392,6 @@ export class EventService { oldRecurrencePattern.daysOfWeek, ) ) { - // either add or subtract events as pattern is same - currentEventRepetition['recurrencePattern'] = oldRecurrencePattern; - - const currentDate = new Date(); - const currentDateTime = currentDate.toISOString(); - - // new start date is passed - const newRecurringStart = newRecurrencePattern.recurringStartDate; - const newStartDate = new Date(newRecurringStart); - const nstartDateTime = newRecurringStart.split('T'); - const nstartDate = nstartDateTime[0]; - const nstartTime = nstartDateTime[1]; - const oldRecurringStart = oldRecurrencePattern.recurringStartDate; - const oldStartDate = new Date(oldRecurringStart); - const ostartDateTime = oldRecurringStart.split('T'); - const ostartDate = ostartDateTime[0]; - const ostartTime = ostartDateTime[1]; - - const newRecurringEnd = newRecurrencePattern.endCondition.value; - const oldRecurringEnd = oldRecurrencePattern.endCondition.value; - const newEndDate = new Date(newRecurringEnd); - const oldEndDate = new Date(oldRecurringEnd); - - // check if new start date is greater than old start date - - if (nstartDate === ostartDate && nstartTime !== ostartTime) { - throw new BadRequestException( - 'Recurring Start Time cannot be changed pass orignal start time', - ); - } - // new start date is passed if (nstartDate !== ostartDate && oldStartDate < currentDate) { throw new BadRequestException( @@ -398,12 +399,10 @@ export class EventService { ); } - // new End date is passed - if (newRecurringEnd !== oldRecurringEnd && oldEndDate < currentDate) { - throw new BadRequestException( - 'End Date can not be changes beacuse it is passed away', - ); - } + // either add or subtract events as pattern is same + currentEventRepetition['recurrencePattern'] = oldRecurrencePattern; + // remove lines of code and put it on out of the function + // check if new start date is greater than old start date if ( newRecurringStart === oldRecurringStart && @@ -523,11 +522,6 @@ export class EventService { currentEventRepetition.createdAt = new Date(); currentEventRepetition.updatedAt = new Date(); - // const newlyAddedEvents = await this.addEventsInRange( - // newStartDate, - // oldStartDate, - // currentEventRepetition, - // ); const removedEvents = await this.removeEventsLessInRange( currentEventRepetition.startDateTime, currentEventRepetition.eventId, @@ -627,14 +621,6 @@ export class EventService { } else { // Frequency and interval are different // make start date as end date for old events and create new events - console.log( - newRecurrencePattern.daysOfWeek, - oldRecurrencePattern.daysOfWeek, - compareArrays( - newRecurrencePattern.daysOfWeek, - oldRecurrencePattern.daysOfWeek, - ), - ); throw new NotImplementedException('Pattern different'); } } @@ -740,6 +726,20 @@ export class EventService { } } + checkIfPatternIsSame(newdaysOfWeek, olddaysOfWeek) { + if (newdaysOfWeek.length !== olddaysOfWeek.length) { + return false; + } + newdaysOfWeek.sort(); + olddaysOfWeek.sort(); + for (let i = 0; i <= newdaysOfWeek.length; i++) { + if (newdaysOfWeek[i] !== olddaysOfWeek[i]) { + return false; + } + } + return true; + } + checkValidRecurrenceTimeForUpdate(endDate, recurrenceEndDate) { if (endDate.split('T')[1] !== recurrenceEndDate.split('T')[1]) { throw new BadRequestException( @@ -764,16 +764,6 @@ export class EventService { let updateResult: UpdateResult = {}; - // console.log(updateBody.recurrencePattern, 'new'); - // console.log(event.recurrencePattern, 'old'); - // Get all event which date is equal and greater than cuurent selected event date [use for update] - // const recurrenceRecordss = await this.eventRepetitionRepository.find({ - // where: { - // eventId: eventId, - // startDateTime: MoreThanOrEqual(eventRepetition.startDateTime), - // }, - // }); - const recurrenceRecords = await this.eventRepetitionRepository .createQueryBuilder('eventRepetition') .innerJoinAndSelect('eventRepetition.eventDetail', 'eventDetail') @@ -874,13 +864,18 @@ export class EventService { event.recurrencePattern.endCondition.value, ); + const isWeekPatternChange = this.checkIfPatternIsSame( + updateBody.recurrencePattern.daysOfWeek, + event.recurrencePattern.daysOfWeek, + ); + console.log(isDateTimeUpdate, 'isDateTimeUpdate'); // when date is different regenerate new events if ( updateBody.recurrencePattern && event.recurrencePattern?.frequency && - !isDateTimeUpdate.dateSame + (!isDateTimeUpdate.dateSame || !isWeekPatternChange) ) { console.log( updateBody.recurrencePattern,