improve calendar event creation

This commit is contained in:
Roland Schneider
2025-11-26 16:48:20 +01:00
parent 2934e099b1
commit 71a8e267dc
8 changed files with 88 additions and 34 deletions

View File

@@ -148,10 +148,15 @@ export class CalendarService {
if (!freq) continue;
let untilDate: Date|undefined = undefined;
// typeorm does not convert postgres type 'date' to javascript date object
if (event?.recurrenceRule?.endDate) {
untilDate = new Date(event.recurrenceRule.endDate);
}
const rrule = new RRule({
freq,
dtstart: event.startTime,
until: event.recurrenceRule.endDate,
until: untilDate,
count: event.recurrenceRule.count,
interval: event.recurrenceRule.interval,
byweekday: byweekday?.length > 0 ? byweekday : undefined,
@@ -199,7 +204,9 @@ export class CalendarService {
// --- Other service methods (createEvent, etc.) remain unchanged ---
async createEvent(createEventDto: CreateEventDto): Promise<Event> {
console.info('createEvent', createEventDto);
console.log('[CalendarService] Entering createEvent method.');
console.log('[CalendarService] Received DTO:', JSON.stringify(createEventDto, null, 2));
const { recurrenceRule, ...eventData } = createEventDto;
const newEvent: Omit<
@@ -211,36 +218,52 @@ export class CalendarService {
updatedAt: new Date(),
timezone: 'Europe/Budapest',
eventType: undefined,
isRecurring: recurrenceRule ? true : false,
isRecurring: !!recurrenceRule,
};
console.log('[CalendarService] Prepared base event object:', newEvent);
// check if event type exists
if (eventData.eventTypeId) {
console.info('eventTypeId found');
console.log(`[CalendarService] Event has eventTypeId: ${eventData.eventTypeId}. Fetching event type...`);
const eventType = await this.eventTypeRepository.findOneBy({
id: eventData.eventTypeId,
});
if (!eventType) {
console.error(`[CalendarService] Event type with ID ${eventData.eventTypeId} not found.`);
throw new BadRequestException(
{},
'Event type not found ' + eventData.eventTypeId,
);
}
newEvent.eventType = eventType;
console.log('[CalendarService] Successfully attached event type:', eventType);
} else {
console.log('[CalendarService] No eventTypeId provided.');
}
console.log('[CalendarService] Creating event entity...');
const event = this.eventRepository.create(newEvent);
console.log('[CalendarService] Saving event entity to the database...');
const savedEvent = await this.eventRepository.save(event);
console.log('[CalendarService] Event saved successfully. Saved event ID:', savedEvent.id);
if (event.isRecurring && recurrenceRule) {
if (savedEvent.isRecurring && recurrenceRule) {
console.log(`[CalendarService] Event is recurring. Creating recurrence rule...`);
const rule = this.recurrenceRuleRepository.create({
...recurrenceRule,
event: savedEvent,
});
await this.recurrenceRuleRepository.save(rule);
console.log('[CalendarService] Recurrence rule saved successfully.');
} else {
console.log('[CalendarService] Event is not recurring or no recurrence rule provided.');
}
return this.getEventById(savedEvent.id);
console.log(`[CalendarService] Fetching final event by ID ${savedEvent.id} to return.`);
const finalEvent = await this.getEventById(savedEvent.id);
console.log('[CalendarService] Exiting createEvent method.');
return finalEvent;
}
async createException(

View File

@@ -52,7 +52,10 @@ export class EventsController {
}
@Patch(':id')
update(@Param('id', ParseIntPipe) id: number, @Body() updateEventDto: UpdateEventDto) {
update(
@Param('id', ParseIntPipe) id: number,
@Body() updateEventDto: UpdateEventDto,
) {
return this.eventsService.update(id, updateEventDto);
}
@@ -60,4 +63,4 @@ export class EventsController {
remove(@Param('id', ParseIntPipe) id: number) {
return this.eventsService.remove(id);
}
}
}