diff --git a/src/event/event.controller.ts b/src/event/event.controller.ts index 4fc14fb..8496fba 100644 --- a/src/event/event.controller.ts +++ b/src/event/event.controller.ts @@ -15,10 +15,12 @@ import { ApiBody, ApiCreatedResponse, ApiHeader, + ApiOkResponse, ApiOperation, ApiParam, ApiResponse, ApiTags, + ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { JwtPayload } from 'src/interfaces/auth'; import { Request, Response } from 'express'; @@ -31,6 +33,7 @@ import { } from 'src/dtos/blurtingPage.dto'; import { BlurtingService } from 'src/blurting/blurting.service'; import { UserProfileDto } from 'src/dtos/user.dto'; +import { OtherPeopleInfoDto } from 'src/blurting/dtos/otherPeopleInfo.dto'; @Controller('event') @ApiTags('event') @@ -144,6 +147,22 @@ export class EventController { return matchedUser; } + @UseGuards(AuthGuard('access')) + @Get('/group-info') + @ApiOperation({ + summary: '이벤트 그룹 정보', + description: '그룹 정보', + }) + @ApiUnauthorizedResponse({ description: '토큰 만료' }) + @ApiOkResponse({ + description: '그룹 정보', + type: [OtherPeopleInfoDto], + }) + async getGroupInfo(@Req() req: Request): Promise { + const { id } = req.user as JwtPayload; + return await this.eventService.getGroupInfo(id); + } + @UseGuards(AuthGuard('access')) @Get('/:no') @ApiHeader({ diff --git a/src/event/event.module.ts b/src/event/event.module.ts index fa49b83..803f6d9 100644 --- a/src/event/event.module.ts +++ b/src/event/event.module.ts @@ -9,6 +9,7 @@ import { BlurtingEventEntity, BlurtingGroupEntity, BlurtingQuestionEntity, + UserEntity, } from 'src/entities'; import { FcmModule } from 'src/firebase/fcm.module'; import { UserModule } from 'src/user/user.module'; @@ -24,6 +25,7 @@ import { BlurtingModule } from 'src/blurting/blurting.module'; BlurtingQuestionEntity, BlurtingAnswerEntity, BLurtingArrowEntity, + UserEntity, ]), CacheModule.register({ // eslint-disable-next-line @typescript-eslint/ban-ts-comment diff --git a/src/event/event.service.ts b/src/event/event.service.ts index be5385f..66eb8fc 100644 --- a/src/event/event.service.ts +++ b/src/event/event.service.ts @@ -19,6 +19,7 @@ import { Repository } from 'typeorm'; import { Sex } from 'src/common/enums'; import { BlurtingService } from 'src/blurting/blurting.service'; import { ArrowInfoResponseDto } from 'src/blurting/dtos/arrowInfoResponse.dto'; +import { OtherPeopleInfoDto } from 'src/blurting/dtos/otherPeopleInfo.dto'; @Injectable() export class EventService { @@ -33,6 +34,8 @@ export class EventService { private readonly answerRepository: Repository, @InjectRepository(BLurtingArrowEntity) private readonly arrowRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, @Inject(CACHE_MANAGER) private cacheManager: Cache, @InjectQueue('blurtingQuestions') private readonly queue: Queue, private readonly fcmService: FcmService, @@ -279,4 +282,43 @@ export class EventService { blur: 2, }; } + + async getGroupInfo(userId: number): Promise { + const eventUser = await this.eventRepository.findOne({ + where: { id: userId }, + relations: ['group'], + }); + if (!eventUser?.group) return []; + + const users = await this.eventRepository.find({ + where: { group: eventUser.group }, + relations: ['user'], + }); + + const groupUsers = await Promise.all( + users.map((user) => { + return this.userService.findUserByVal('id', user.userId); + }), + ); + + const userSex = groupUsers.filter((user) => user.id === userId)[0].userInfo + .sex; + + const filteredSex = []; + + const sex = userSex === Sex.Female ? Sex.Male : Sex.Female; + filteredSex.push(sex); + + const result = groupUsers + .filter((user) => filteredSex.includes(user.userInfo.sex)) + .map((user) => { + return { + userId: user.id, + userNickname: user.userNickname, + userSex: user.userInfo.sex, + reported: false, + }; + }); + return result; + } }