diff --git a/app/src/api/cursusUser/cursusUser.service.ts b/app/src/api/cursusUser/cursusUser.service.ts index d6f7b94d..872c9362 100644 --- a/app/src/api/cursusUser/cursusUser.service.ts +++ b/app/src/api/cursusUser/cursusUser.service.ts @@ -78,15 +78,17 @@ export class CursusUserService { } async getuserIdByLogin(login: string): Promise { - const userId = await this.findOneAndLean({ - filter: { 'user.login': login }, - }).then((user) => user?.user.id); + const cursusUser: { user: Pick } | null = + await this.findOneAndLean({ + filter: { 'user.login': login }, + select: { 'user.id': 1 }, + }); - if (!userId) { + if (!cursusUser) { return null; } - return userId; + return cursusUser.user.id; } async findAllAndLean( diff --git a/app/src/follow/follow.resolver.ts b/app/src/follow/follow.resolver.ts index bdca5d19..308e962d 100644 --- a/app/src/follow/follow.resolver.ts +++ b/app/src/follow/follow.resolver.ts @@ -63,44 +63,14 @@ export class FollowResolver { } @UseGuards(StatAuthGuard) - @Query((_returns) => Boolean, { nullable: true }) + @Query((_returns) => Boolean) async getIsFollowing( @MyUserId() userId: number, - @Args('target') target: string, - ): Promise { - const targetId = await this.followService.userIdByLogin(target); - + @Args('targetId') targetId: number, + ): Promise { return await this.followService.isFollowing(userId, targetId); } - @UseGuards(StatAuthGuard) - @Query((_returns) => FollowListWithCount) - async getFollowerList( - @MyUserId() userId: number, - @Args('target') target: string, - @Args('limit', { defaultValue: 3 }) limit: number, - @Args('sortOrder', { - type: () => FollowSortOrder, - defaultValue: FollowSortOrder.FOLLOW_AT_DESC, - }) - sortOrder: FollowSortOrder, - ): Promise { - const targetId = await this.followService.userIdByLogin(target); - const count = await this.followService.followerCount(targetId); - - const followerList = await this.followService.followerList( - userId, - target, - limit, - sortOrder, - ); - - return { - count, - followList: followerList, - }; - } - @UseGuards(StatAuthGuard) @Query((_returns) => FollowListPaginated) async getFollowerPaginated( @@ -110,34 +80,6 @@ export class FollowResolver { return await this.followService.followerPaginated(userId, args); } - @UseGuards(StatAuthGuard) - @Query((_returns) => FollowListWithCount) - async getFollowingList( - @MyUserId() userId: number, - @Args('target') target: string, - @Args('limit', { defaultValue: 3 }) limit: number, - @Args('sortOrder', { - type: () => FollowSortOrder, - defaultValue: FollowSortOrder.FOLLOW_AT_DESC, - }) - sortOrder: FollowSortOrder, - ): Promise { - const targetId = await this.followService.userIdByLogin(target); - const count = await this.followService.followingCount(targetId); - - const followingList = await this.followService.followingList( - userId, - target, - limit, - sortOrder, - ); - - return { - count, - followList: followingList, - }; - } - @UseGuards(StatAuthGuard) @Query((_returns) => FollowListPaginated) async getFollowingPaginated( diff --git a/app/src/follow/follow.service.ts b/app/src/follow/follow.service.ts index 57f93b9e..39af7be6 100644 --- a/app/src/follow/follow.service.ts +++ b/app/src/follow/follow.service.ts @@ -62,12 +62,15 @@ export class FollowService { ): Promise { const following = await this.cursusUserService.getuserIdByLogin(target); - const alreadyFollow = await this.followModel.find({ - userId: userId, - followId: following, - }); + const alreadyFollow = await this.followModel.findOne( + { + userId: userId, + followId: following, + }, + { _id: 1 }, + ); - if (!following || userId === following || alreadyFollow.length) { + if (!following || userId === following || alreadyFollow) { return { message: 'fail' }; } @@ -112,7 +115,6 @@ export class FollowService { return { message: 'fail' }; } - // getFollowerList("yeju") -> yeju를 팔로우 하는 사람들 async followerList( userId: number, target: string, @@ -313,20 +315,11 @@ export class FollowService { return await this.followModel.countDocuments({ userId, filter }); } - async isFollowing( - userId: number, - targetId: number, - ): Promise { - let isFollowing: boolean | undefined = undefined; - - if (userId !== targetId) { - isFollowing = !!(await this.followModel.findOne({ - userId, - targetId, - })); - } - - return isFollowing; + async isFollowing(userId: number, targetId: number): Promise { + return !!(await this.followModel.findOne({ + userId, + targetId, + })); } async checkFollowing( diff --git a/app/src/page/evalLog/evalLog.service.ts b/app/src/page/evalLog/evalLog.service.ts index 38bdf8c5..4b1477f5 100644 --- a/app/src/page/evalLog/evalLog.service.ts +++ b/app/src/page/evalLog/evalLog.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { BadRequestException, Injectable } from '@nestjs/common'; import { FilterQuery } from 'mongoose'; import { scale_team } from 'src/api/scaleTeam/db/scaleTeam.database.schema'; import { @@ -143,7 +143,20 @@ const cursorExtractor: CursorExtractor = (doc) => doc.id.toString() + '_' + doc.header.beginAt.toISOString(); const fieldExtractor: FieldExtractor = (cursor: string) => { - const [idString, dateString] = cursor.split('_'); + const cursorDataList = cursor.split('_'); + if (cursorDataList.length !== 2) { + throw new BadRequestException('Invalid Cursor'); + } + + const userId = parseInt(cursorDataList[0]); + if (isNaN(userId)) { + throw new BadRequestException('Invalid Cursor'); + } + + const date = new Date(cursorDataList[1]).getTime(); + if (isNaN(date)) { + throw new BadRequestException('Invalid Cursor'); + } - return [parseInt(idString), new Date(dateString)]; + return [userId, new Date(date)]; }; diff --git a/app/src/schema.gql b/app/src/schema.gql index a2f6f3b5..1a24bd4e 100644 --- a/app/src/schema.gql +++ b/app/src/schema.gql @@ -80,11 +80,6 @@ type FollowListPaginated { pageInfo: CursorPageInfo! } -type FollowListWithCount { - followList: [FollowList!]! - count: Int! -} - type LinkableAccount { platform: String! id: String! @@ -641,10 +636,8 @@ type Query { getEvalLogs(after: String, first: Int! = 20, corrector: String, corrected: String, projectName: String, outstandingOnly: Boolean! = false, imperfectOnly: Boolean! = false, sortOrder: EvalLogSortOrder! = BEGIN_AT_DESC): EvalLogsPaginated! getSetting: Setting! getExpTable: [ExpTable!]! - getIsFollowing(target: String!): Boolean - getFollowerList(target: String!, limit: Int! = 3, sortOrder: FollowSortOrder! = FOLLOW_AT_DESC): FollowListWithCount! + getIsFollowing(targetId: Int!): Boolean! getFollowerPaginated(after: String, first: Int! = 20, target: String!, sortOrder: FollowSortOrder! = FOLLOW_AT_DESC): FollowListPaginated! - getFollowingList(target: String!, limit: Int! = 3, sortOrder: FollowSortOrder! = FOLLOW_AT_DESC): FollowListWithCount! getFollowingPaginated(after: String, first: Int! = 20, target: String!, sortOrder: FollowSortOrder! = FOLLOW_AT_DESC): FollowListPaginated! }