diff --git a/.prettierrc b/.prettierrc index dcb7279..f14f7c6 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,7 @@ { "singleQuote": true, - "trailingComma": "all" + "trailingComma": "all", + "printWidth": 80, + "tabWidth": 2, + "semi": true } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..59c9985 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "prettier.singleQuote": true, + "prettier.printWidth": 80, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "eslint.codeAction.showDocumentation": { + "enable": true + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "eslint.validate": ["typescript", "javascript"] +} diff --git a/package.json b/package.json index 153c82c..14c6c6c 100644 --- a/package.json +++ b/package.json @@ -44,11 +44,11 @@ "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.42.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-prettier": "^5.2.1", "jest": "^29.5.0", - "prettier": "^3.0.0", + "prettier": "^3.3.3", "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", diff --git a/src/.env.development b/src/.env.development index 8b13789..e69de29 100644 --- a/src/.env.development +++ b/src/.env.development @@ -1 +0,0 @@ - diff --git a/src/common/pipes/event-validation.pipe.ts b/src/common/pipes/event-validation.pipe.ts index ac1342b..951cd47 100644 --- a/src/common/pipes/event-validation.pipe.ts +++ b/src/common/pipes/event-validation.pipe.ts @@ -135,44 +135,17 @@ export class RecurringEndDateValidationPipe implements PipeTransform { } @Injectable() -export class ParamsValidationPipe implements PipeTransform { +export class AttendeesValidationPipe implements PipeTransform { transform(createEventDto: CreateEventDto) { - if (createEventDto.isRestricted) { - const params = createEventDto.params; - if (!params || typeof params !== 'object') { - throw new BadRequestException('Invalid params object'); - } + const attendees = createEventDto?.attendees; + console.log('attendees', attendees); - // if (!params.cohortIds && !params.userIds) { - // throw new BadRequestException( - // 'Either cohortIds or userIds must be provided in params', - // ); - // } - - // if (params.cohortIds && params.userIds) { - // throw new BadRequestException( - // 'Only one of cohortIds or userIds should be provided in params', - // ); - // } - - // if (params.cohortIds) { - // this.validateUUIDs(params.cohortIds); - // } else if (params.userIds) { - // this.validateUUIDs(params.userIds); - // } - } else if (!createEventDto.isRestricted) { - createEventDto.params = {}; + if (!createEventDto.isRestricted) { + if (attendees && attendees.length) { + throw new BadRequestException(ERROR_MESSAGES.ATTENDEES_NOT_REQUIRED); + } } return createEventDto; } - - private validateUUIDs(ids: string[]) { - const uuidRegex = /^[a-f\d]{8}(-[a-f\d]{4}){3}-[a-f\d]{12}$/i; // UUID regex pattern - for (const id of ids) { - if (!uuidRegex.test(id)) { - throw new BadRequestException(`Invalid UUID format: ${id}`); - } - } - } } diff --git a/src/common/utils/constants.util.ts b/src/common/utils/constants.util.ts index 1ded11b..ab883bc 100644 --- a/src/common/utils/constants.util.ts +++ b/src/common/utils/constants.util.ts @@ -24,8 +24,8 @@ export const ERROR_MESSAGES = { 'Registration Start Date required for event', RESTRICTED_EVENT_NO_REGISTRATION_DATE: 'Cannot have registration date for restricted event', - INVITEES_REQUIRED: 'Invitees required for private event', - INVITEES_NOT_REQUIRED: 'Invitees not required for public event', + ATTENDEES_REQUIRED: 'Attendees required for private event', + ATTENDEES_NOT_REQUIRED: 'Attendees not required for public event', EVENT_NOT_FOUND: 'Event not found', EVENT_ATTENDEE_NOT_FOUND: 'Event attendee not found', EVENT_ATTENDEE_HISTORY_NOT_FOUND: 'Event attendee history not found', diff --git a/src/common/utils/transformer/date.transformer.ts b/src/common/utils/transformer/date.transformer.ts index 6ace651..c490ec4 100644 --- a/src/common/utils/transformer/date.transformer.ts +++ b/src/common/utils/transformer/date.transformer.ts @@ -22,4 +22,3 @@ export class TimeZoneTransformer implements ValueTransformer { ); } } - diff --git a/src/modules/event/dto/create-event.dto.ts b/src/modules/event/dto/create-event.dto.ts index 55c6015..c613a7d 100644 --- a/src/modules/event/dto/create-event.dto.ts +++ b/src/modules/event/dto/create-event.dto.ts @@ -14,11 +14,14 @@ import { IsObject, ValidateIf, ValidateNested, - Validate, + IsArray, + IsDefined, + ArrayMinSize, } from 'class-validator'; import { ApiProperty } from '@nestjs/swagger'; import { Type } from 'class-transformer'; import { EventTypes } from 'src/common/utils/types'; +import { ERROR_MESSAGES } from 'src/common/utils/constants.util'; export class MeetingDetailsDto { @ApiProperty({ description: 'Meeting ID', example: 94292617 }) @@ -188,13 +191,21 @@ export class CreateEventDto { @ApiProperty({ type: Object, - description: 'Params', - // example: { cohortIds: ['eff008a8-2573-466d-b877-fddf6a4fc13e', 'e9fec05a-d6ab-44be-bfa4-eaeef2ef8fe9'] }, - // example: { userIds: ['eff008a8-2573-466d-b877-fddf6a4fc13e', 'e9fec05a-d6ab-44be-bfa4-eaeef2ef8fe9'] }, - example: { invitees: ['e9fec05a-d6ab-44be-bfa4-eaeef2ef8fe9'] }, + description: 'Attendees', + example: { + attendees: [ + 'eff008a8-2573-466d-b877-fddf6a4fc13e', + 'e9fec05a-d6ab-44be-bfa4-eaeef2ef8fe9', + ], + }, }) - @IsObject() - params: any; // direct userIds + @ValidateIf((o) => o.isRestricted === true) + @IsDefined({ message: ERROR_MESSAGES.ATTENDEES_REQUIRED }) + @IsArray() + @Type(() => String) + @ArrayMinSize(1) + @IsUUID('4', { each: true }) + attendees: string[]; @ApiProperty({ type: Object, diff --git a/src/modules/event/entities/event.entity.ts b/src/modules/event/entities/event.entity.ts index e612abd..026a043 100644 --- a/src/modules/event/entities/event.entity.ts +++ b/src/modules/event/entities/event.entity.ts @@ -70,7 +70,6 @@ export class Events { @Column({ type: 'uuid' }) eventDetailId: string; - // OR onetomany @OneToOne(() => EventDetail, (eventDetail) => eventDetail.events, { onDelete: 'CASCADE', onUpdate: 'CASCADE', @@ -78,6 +77,6 @@ export class Events { @JoinColumn({ name: 'eventDetailId' }) eventDetail: EventDetail; - // @OneToMany(() => EventRepetition, (eventRepetition) => eventRepetition.event) - // eventRepetitions: EventRepetition[]; + @OneToMany(() => EventRepetition, (eventRepetition) => eventRepetition.event) + eventRepetitions: EventRepetition[]; } diff --git a/src/modules/event/entities/eventDetail.entity.ts b/src/modules/event/entities/eventDetail.entity.ts index 0613b94..c91a124 100644 --- a/src/modules/event/entities/eventDetail.entity.ts +++ b/src/modules/event/entities/eventDetail.entity.ts @@ -5,6 +5,7 @@ import { CreateDateColumn, UpdateDateColumn, OneToMany, + OneToOne, } from 'typeorm'; import { Events } from './event.entity'; import { EventRepetition } from './eventRepetition.entity'; @@ -52,8 +53,8 @@ export class EventDetail { @Column({ type: 'text' }) description: string; - @Column({ type: 'jsonb' }) - params: object; + @Column('text', { array: true }) + attendees: string[]; @CreateDateColumn({ type: 'timestamptz', @@ -84,12 +85,12 @@ export class EventDetail { @Column({ type: 'jsonb', nullable: true }) metadata: object; - @OneToMany(() => Events, (event) => event.eventDetail) + @OneToOne(() => Events, (event) => event.eventDetail) events: Event[]; - // @OneToMany( - // () => EventRepetition, - // (eventRepetition) => eventRepetition.eventDetail, - // ) - // eventRepetitions: EventRepetition[]; + @OneToMany( + () => EventRepetition, + (eventRepetition) => eventRepetition.eventDetail, + ) + eventRepetitions: EventRepetition[]; } diff --git a/src/modules/event/entities/eventRepetition.entity.ts b/src/modules/event/entities/eventRepetition.entity.ts index a16b50a..ef72c40 100644 --- a/src/modules/event/entities/eventRepetition.entity.ts +++ b/src/modules/event/entities/eventRepetition.entity.ts @@ -42,17 +42,17 @@ export class EventRepetition { }) endDateTime: Date; - // @ManyToOne(() => Events, (event) => event.eventRepetitions, { - // onDelete: 'CASCADE', - // onUpdate: 'CASCADE', - // }) - // @JoinColumn({ name: 'eventId' }) - // event: Event; - - // @ManyToOne(() => EventDetail, (eventDetail) => eventDetail.eventRepetitions, { - // onDelete: 'CASCADE', - // onUpdate: 'CASCADE', - // }) - // @JoinColumn({ name: 'eventDetailId' }) - // eventDetail: EventDetail; + @ManyToOne(() => Events, (event) => event.eventRepetitions, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + @JoinColumn({ name: 'eventId' }) + event: Event; + + @ManyToOne(() => EventDetail, (eventDetail) => eventDetail.eventRepetitions, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + @JoinColumn({ name: 'eventDetailId' }) + eventDetail: EventDetail; } diff --git a/src/modules/event/event.controller.ts b/src/modules/event/event.controller.ts index ee5e152..7cff5fa 100644 --- a/src/modules/event/event.controller.ts +++ b/src/modules/event/event.controller.ts @@ -1,4 +1,18 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, Res, ValidationPipe, BadRequestException, ParseUUIDPipe, UseFilters } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + UsePipes, + Res, + ValidationPipe, + BadRequestException, + ParseUUIDPipe, + UseFilters, +} from '@nestjs/common'; import { EventService } from './event.service'; import { CreateEventDto } from './dto/create-event.dto'; import { UpdateEventDto } from './dto/update-event.dto'; @@ -13,43 +27,68 @@ import { } from '@nestjs/swagger'; import { Response } from 'express'; import { SearchFilterDto } from './dto/search-event.dto'; -import { DateValidationPipe, RegistrationDateValidationPipe, ParamsValidationPipe } from 'src/common/pipes/event-validation.pipe'; +import { + DateValidationPipe, + RegistrationDateValidationPipe, + AttendeesValidationPipe, +} from 'src/common/pipes/event-validation.pipe'; import { ConfigService } from '@nestjs/config'; import { AllExceptionsFilter } from 'src/common/filters/exception.filter'; -import { API_ID, ERROR_MESSAGES, SUCCESS_MESSAGES } from 'src/common/utils/constants.util'; +import { + API_ID, + ERROR_MESSAGES, + SUCCESS_MESSAGES, +} from 'src/common/utils/constants.util'; @Controller('event/v1') @ApiTags('Create Event') export class EventController { - constructor(private readonly eventService: EventService, + constructor( + private readonly eventService: EventService, private readonly configService: ConfigService, - ) { } + ) {} @UseFilters(new AllExceptionsFilter(API_ID.CREATE_EVENT)) @Post('/create') @ApiBody({ type: CreateEventDto }) - @UsePipes(new ValidationPipe({ transform: true }), new DateValidationPipe, new RegistrationDateValidationPipe, new ParamsValidationPipe) + @UsePipes( + new ValidationPipe({ transform: true }), + new DateValidationPipe(new ConfigService()), + new RegistrationDateValidationPipe(new ConfigService()), + new AttendeesValidationPipe(), + ) @ApiCreatedResponse({ description: SUCCESS_MESSAGES.EVENT_CREATED, }) @ApiBadRequestResponse({ description: ERROR_MESSAGES.INVALID_REQUEST_BODY }) - @ApiInternalServerErrorResponse({ description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR }) - async create(@Body() createEventDto: CreateEventDto, @Res() response: Response,) { + @ApiInternalServerErrorResponse({ + description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR, + }) + async create( + @Body() createEventDto: CreateEventDto, + @Res() response: Response, + ) { const userId = '016badad-22b0-4566-88e9-aab1b35b1dfc'; // later come from JWT-token this.configService; + console.log('createEventDtocontr', createEventDto); return this.eventService.createEvent(createEventDto, userId, response); } @UseFilters(new AllExceptionsFilter(API_ID.GET_EVENTS)) @Post('/list') @ApiBody({ type: SearchFilterDto }) - @ApiInternalServerErrorResponse({ description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR }) + @ApiInternalServerErrorResponse({ + description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR, + }) @UsePipes(new ValidationPipe({ transform: true })) @ApiOkResponse({ description: 'Searched', - status: 200 + status: 200, }) - async findAll(@Res() response: Response, @Body() requestBody: SearchFilterDto) { + async findAll( + @Res() response: Response, + @Body() requestBody: SearchFilterDto, + ) { // return this.eventService.getEvents(response, requestBody); } @@ -57,9 +96,11 @@ export class EventController { @Get('/:id') @ApiOkResponse({ description: 'Get event details by id', - status: 200 + status: 200, + }) + @ApiInternalServerErrorResponse({ + description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR, }) - @ApiInternalServerErrorResponse({ description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR }) findOne(@Param('id', ParseUUIDPipe) id: string, @Res() response: Response) { // return this.eventService.getEventByID(id, response); } @@ -68,11 +109,17 @@ export class EventController { @Patch('/:id') @ApiBody({ type: UpdateEventDto }) @ApiResponse({ status: 200, description: SUCCESS_MESSAGES.EVENT_UPDATED }) - @ApiInternalServerErrorResponse({ description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR }) + @ApiInternalServerErrorResponse({ + description: ERROR_MESSAGES.INTERNAL_SERVER_ERROR, + }) @UsePipes(new ValidationPipe({ transform: true })) - updateEvent(@Param('id', ParseUUIDPipe) id: string, @Body() updateEventDto: UpdateEventDto, @Res() response: Response) { + updateEvent( + @Param('id', ParseUUIDPipe) id: string, + @Body() updateEventDto: UpdateEventDto, + @Res() response: Response, + ) { if (!updateEventDto || Object.keys(updateEventDto).length === 0) { - throw new BadRequestException(ERROR_MESSAGES.INVALID_REQUEST_BODY) + throw new BadRequestException(ERROR_MESSAGES.INVALID_REQUEST_BODY); } const userId = '01455719-e84f-4bc8-8efa-7024874ade08'; // later come from JWT-token // return this.eventService.updateEvent(id, updateEventDto, userId, response); @@ -82,7 +129,10 @@ export class EventController { @Delete('/:id') @ApiResponse({ status: 200, description: SUCCESS_MESSAGES.EVENT_DELETED }) @ApiResponse({ status: 404, description: SUCCESS_MESSAGES.EVENT_NOT_FOUND }) - deleteEvent(@Param('id', ParseUUIDPipe) id: string, @Res() response: Response) { + deleteEvent( + @Param('id', ParseUUIDPipe) id: string, + @Res() response: Response, + ) { // return this.eventService.deleteEvent(id, response); } } diff --git a/src/modules/event/event.module.ts b/src/modules/event/event.module.ts index f219bbd..bdad5a5 100644 --- a/src/modules/event/event.module.ts +++ b/src/modules/event/event.module.ts @@ -9,9 +9,17 @@ import { Events } from './entities/event.entity'; import { EventDetail } from './entities/eventDetail.entity'; import { AttendeesService } from '../attendees/attendees.service'; import { EventAttendees } from '../attendees/entity/attendees.entity'; +import { EventRepetition } from './entities/eventRepetition.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Events, EventAttendees, EventDetail])], + imports: [ + TypeOrmModule.forFeature([ + Events, + EventAttendees, + EventDetail, + EventRepetition, + ]), + ], controllers: [EventController], providers: [EventService, ConfigService, AttendeesService], }) diff --git a/src/modules/event/event.service.ts b/src/modules/event/event.service.ts index fdd78b9..ef4148e 100644 --- a/src/modules/event/event.service.ts +++ b/src/modules/event/event.service.ts @@ -1,4 +1,9 @@ -import { BadRequestException, HttpStatus, Injectable } from '@nestjs/common'; +import { + BadRequestException, + HttpStatus, + Injectable, + NotImplementedException, +} from '@nestjs/common'; import { CreateEventDto } from './dto/create-event.dto'; import { UpdateEventDto } from './dto/update-event.dto'; import { InjectRepository } from '@nestjs/typeorm'; @@ -9,12 +14,13 @@ import APIResponse from 'src/common/utils/response'; import { SearchFilterDto } from './dto/search-event.dto'; import { DateValidationPipe, - DeadlineValidationPipe, - ParamsValidationPipe, + RegistrationDateValidationPipe, } from 'src/common/pipes/event-validation.pipe'; import { AttendeesService } from '../attendees/attendees.service'; import { EventAttendeesDTO } from '../attendees/dto/EventAttendance.dto'; import { EventDetail } from './entities/eventDetail.entity'; +import { ERROR_MESSAGES } from 'src/common/utils/constants.util'; +import { getTimezoneDate } from 'src/common/utils/pipe.util'; @Injectable() export class EventService { constructor( @@ -23,7 +29,7 @@ export class EventService { @InjectRepository(EventDetail) private readonly eventDetailRepository: Repository, private readonly attendeesService: AttendeesService, - ) { } + ) {} async createEvent( createEventDto: CreateEventDto, @@ -31,45 +37,60 @@ export class EventService { response: Response, ): Promise { const apiId = 'api.create.event'; - try { - this.validateCreateEventDto(createEventDto); - // true for private, false for public - if (createEventDto.isRestricted === true) { - // private event - - if (createEventDto.eventType === 'online') { - // create online event - this.createOnlineEvent(createEventDto); - } else if (createEventDto.eventType === 'offline') { - // create offline event - this.createOfflineEvent(createEventDto); - } - - // if event is private then invitees are required - // add invitees to attendees table - - } else { - // if event is public then registrationDate is required - if (createEventDto.eventType === 'online') { - // create online event - this.createOnlineEvent(createEventDto); - } else if (createEventDto.eventType === 'offline') { - // create offline event - this.createOfflineEvent(createEventDto); - } + // try { + this.validateCreateEventDto(createEventDto); + // true for private, false for public + if (createEventDto.isRestricted === true) { + // private event + + if (createEventDto.eventType === 'online') { + // create online event + this.createOnlineEvent(createEventDto); + } else if (createEventDto.eventType === 'offline') { + // create offline event + this.createOfflineEvent(createEventDto); } - const eventDetail = await this.createEventDetail(createEventDto); - } catch (error) { - return response - .status(HttpStatus.INTERNAL_SERVER_ERROR) - .json(APIResponse.error(apiId, 'Internal Server Error', error, '500')); + // if event is private then invitees are required + // add invitees to attendees table + } else { + throw new NotImplementedException(); + // if event is public then registrationDate is required + if (createEventDto.eventType === 'online') { + // create online event + + this.createOnlineEvent(createEventDto); + } else if (createEventDto.eventType === 'offline') { + // create offline event + this.createOfflineEvent(createEventDto); + } } + + const eventDetail = await this.createEventDetailDB(createEventDto); + console.log(eventDetail, 'eventDetail'); + const event = await this.createEventDB(createEventDto, eventDetail); + console.log(eventDetail, 'eventDetail'); + console.log(event, 'event'); + return response + .status(HttpStatus.CREATED) + .json(APIResponse.success(apiId, event, 'Created')); + // } catch (error) { + // return response + // .status(HttpStatus.INTERNAL_SERVER_ERROR) + // .json( + // APIResponse.error( + // apiId, + // ERROR_MESSAGES.INTERNAL_SERVER_ERROR, + // error, + // '500', + // ), + // ); + // } } - async createEvents(createEventDto, response) { } + async createEvents(createEventDto, response) {} - async createEventDetail( + async createEventDetailDB( createEventDto: CreateEventDto, ): Promise { const eventDetail = new EventDetail(); @@ -85,7 +106,9 @@ export class EventService { eventDetail.maxAttendees = createEventDto.maxAttendees; eventDetail.recordings = createEventDto.recordings; eventDetail.status = createEventDto.status; - eventDetail.params = createEventDto.params; + eventDetail.attendees = createEventDto.attendees.length + ? createEventDto.attendees + : null; eventDetail.meetingDetails = createEventDto.meetingDetails; eventDetail.idealTime = createEventDto.idealTime; eventDetail.metadata = createEventDto.metaData; @@ -93,68 +116,95 @@ export class EventService { eventDetail.updatedBy = createEventDto.updatedBy; eventDetail.createdAt = new Date(); eventDetail.updatedAt = new Date(); - + console.log( + eventDetail, + 'eventDetail before save', + getTimezoneDate('Asia/Kolkata', new Date()), + ); return this.eventDetailRepository.save(eventDetail); } + async createEventDB( + createEventDto: CreateEventDto, + eventDetail: EventDetail, + ) { + const { + isRecurring, + recurrencePattern, + recurrenceEndDate, + registrationStartDate, + registrationEndDate, + } = createEventDto; + const event = new Events(); + + event.isRecurring = isRecurring; + event.recurrenceEndDate = recurrenceEndDate + ? new Date(recurrenceEndDate) + : null; + event.recurrencePattern = recurrencePattern ?? {}; + event.createdAt = new Date(); + event.updatedAt = new Date(); + console.log(event.createdAt, 'event.createdAt'); + event.autoEnroll = createEventDto.autoEnroll; + event.registrationStartDate = registrationStartDate + ? new Date(registrationStartDate) + : null; + event.registrationEndDate = registrationEndDate + ? new Date(registrationEndDate) + : null; + event.createdBy = createEventDto.createdBy; + event.updatedBy = createEventDto.updatedBy; + event.eventDetail = eventDetail; + + return this.eventRespository.save(event); + } + validateCreateEventDto(createEventDto: CreateEventDto) { + console.log(createEventDto, 'createEventDtogggggggg'); + // use pipes here https://chatgpt.com/share/88d5301b-5517-4f49-b81d-164757bcabfc if (createEventDto.isRestricted === true) { // private event - - // if event is private then invitees are required - if (!createEventDto?.params?.invitees.length) { - throw new BadRequestException('Invitees required for private event'); - } - } else { - // if event is public then registration is required - if (createEventDto?.params?.invitees.length) { - throw new BadRequestException('Invitees not required for public event'); - } - - if (!createEventDto.registrationStartDate) { - throw new BadRequestException( - 'Registration Start Date required for event', - ); - } + console.log(createEventDto?.attendees, 'createEventDto'); } if (createEventDto.isRecurring) { // recurring event if (!createEventDto.recurrencePattern) { - throw new BadRequestException('Recurrence Pattern required for event'); + throw new BadRequestException( + ERROR_MESSAGES.RECURRING_PATTERN_REQUIRED, + ); } - } else { // non recurring event - } - if (createEventDto.eventType === 'offline') { - if (!createEventDto.location) { - throw new BadRequestException('Location required for offline event'); - } - } else if (createEventDto.eventType === 'online') { - if (!createEventDto.onlineProvider) { - throw new BadRequestException( - 'Online Provider required for online event', - ); - } - } + // if (createEventDto.eventType === 'offline') { + // if (!createEventDto.location) { + // throw new BadRequestException('Location required for offline event'); + // } + // } else if (createEventDto.eventType === 'online') { + // if (!createEventDto.onlineProvider) { + // throw new BadRequestException( + // 'Online Provider required for online event', + // ); + // } + // } } createOnlineEvent(createEventDto: CreateEventDto) { // recurring & non-recurring + throw new NotImplementedException(); } createOfflineEvent(createEventDto: CreateEventDto) { // recurring & non-recurring } - createRecurringEvent(createEventDto: CreateEventDto) { } + createRecurringEvent(createEventDto: CreateEventDto) {} - createNonRecurringEvent(createEventDto: CreateEventDto) { } + createNonRecurringEvent(createEventDto: CreateEventDto) {} - generateEventOccurences(createEventDto: CreateEventDto) { } + generateEventOccurences(createEventDto: CreateEventDto) {} // async getEventOccurrences(eventId: string): Promise { // return this.eventOccurrenceRepository.find({ where: { event: eventId } });