diff --git a/backend/src/events/dto.ts b/backend/src/events/dto.ts new file mode 100644 index 00000000..875f287e --- /dev/null +++ b/backend/src/events/dto.ts @@ -0,0 +1,4 @@ +export class CreateEventDto { + name: string; + capacity: number; +} diff --git a/backend/src/events/events.controller.ts b/backend/src/events/events.controller.ts new file mode 100644 index 00000000..c0ce619f --- /dev/null +++ b/backend/src/events/events.controller.ts @@ -0,0 +1,17 @@ +import { Controller, Get, Post, Body, Param } from '@nestjs/common'; +import { EventsService } from './events.service'; + +@Controller('events') +export class EventsController { + constructor(private readonly eventsService: EventsService) {} + + @Get() + findAll() { + return this.eventsService.findAll(); + } + + @Post(':id/rsvp') + rsvp(@Param('id') id: string, @Body('userId') userId: string) { + return this.eventsService.rsvp(id, userId); + } +} diff --git a/backend/src/events/events.module.ts b/backend/src/events/events.module.ts new file mode 100644 index 00000000..bc2a1fce --- /dev/null +++ b/backend/src/events/events.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { EventsController } from './events.controller'; +import { EventsService } from './events.service'; + +@Module({ + controllers: [EventsController], + providers: [EventsService], + exports: [EventsService], +}) +export class EventsModule {} diff --git a/backend/src/events/events.service.spec.ts b/backend/src/events/events.service.spec.ts new file mode 100644 index 00000000..ac77c8a0 --- /dev/null +++ b/backend/src/events/events.service.spec.ts @@ -0,0 +1,17 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventsService } from './events.service'; + +describe('EventsService', () => { + let service: EventsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [EventsService], + }).compile(); + service = module.get(EventsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/events/events.service.ts b/backend/src/events/events.service.ts new file mode 100644 index 00000000..bff0c128 --- /dev/null +++ b/backend/src/events/events.service.ts @@ -0,0 +1,21 @@ +import { Injectable, BadRequestException } from '@nestjs/common'; + +@Injectable() +export class EventsService { + private events = [ + { id: '1', name: 'Networking Night', capacity: 50, rsvps: [] }, + ]; + + findAll() { + return this.events; + } + + rsvp(eventId: string, userId: string) { + const event = this.events.find((e) => e.id === eventId); + if (!event) throw new BadRequestException('Event not found'); + if (event.rsvps.length >= event.capacity) + throw new BadRequestException('Event is at capacity'); + event.rsvps.push(userId as never); + return { status: 'RSVP confirmed' }; + } +}