diff --git a/backend/apps/client/src/problem/dto/problems.response.dto.ts b/backend/apps/client/src/problem/dto/problems.response.dto.ts index a77d367490..d816975230 100644 --- a/backend/apps/client/src/problem/dto/problems.response.dto.ts +++ b/backend/apps/client/src/problem/dto/problems.response.dto.ts @@ -8,5 +8,5 @@ export class ProblemsResponseDto { @Expose() difficulty: Level @Expose() submissionCount: number @Expose() acceptedRate: number - @Expose() tags: Partial + @Expose() tags: Partial[] } diff --git a/backend/apps/client/src/problem/problem.controller.ts b/backend/apps/client/src/problem/problem.controller.ts index b613105398..4e3b51848b 100644 --- a/backend/apps/client/src/problem/problem.controller.ts +++ b/backend/apps/client/src/problem/problem.controller.ts @@ -22,15 +22,6 @@ export class ProblemController { private readonly logger = new Logger(ProblemController.name) constructor(private readonly problemService: ProblemService) {} - @Get() - async searchProblemTitle(@Query('search') search: string) { - try { - return await this.problemService.searchProblemTitle(search) - } catch (error) { - this.logger.error(error) - throw new InternalServerErrorException() - } - } @Get() async getProblems( diff --git a/backend/apps/client/src/problem/problem.repository.ts b/backend/apps/client/src/problem/problem.repository.ts index a463e34317..c040371d46 100644 --- a/backend/apps/client/src/problem/problem.repository.ts +++ b/backend/apps/client/src/problem/problem.repository.ts @@ -91,6 +91,12 @@ export class ProblemRepository { where: { groupId, title: { + // TODO/FIXME: postgreSQL의 full text search를 사용하여 검색하려 했으나 + // 그럴 경우 띄어쓰기를 기준으로 나눠진 단어 단위로만 검색이 가능하다 + // ex) "hello world"를 검색하면 "hello"와 "world"로 검색이 된다. + // 글자 단위로 검색하기 위해서, 성능을 희생하더라도 contains를 사용하여 구현했다. + // 추후에 검색 성능을 개선할 수 있는 방법을 찾아보자 + // 아니면 텍스트가 많은 field에서는 full-text search를 사용하고, 텍스트가 적은 field에서는 contains를 사용하는 방법도 고려해보자. contains: search } }, @@ -105,23 +111,6 @@ export class ProblemRepository { }) } - // TODO/FIXME: postgreSQL의 full text search를 사용하여 검색하려 했으나 - // 그럴 경우 띄어쓰기를 기준으로 나눠진 단어 단위로만 검색이 가능하다 - // ex) "hello world"를 검색하면 "hello"와 "world"로 검색이 된다. - // 글자 단위로 검색하기 위해서, 성능을 희생하더라도 contains를 사용하여 구현했다. - // 추후에 검색 성능을 개선할 수 있는 방법을 찾아보자 - // 아니면 텍스트가 많은 field에서는 full-text search를 사용하고, 텍스트가 적은 field에서는 contains를 사용하는 방법도 고려해보자. - async searchProblemTitle(search: string): Promise[]> { - return await this.prisma.problem.findMany({ - where: { - title: { - contains: search - } - }, - select: this.problemsSelectOption - }) - } - async getProblemTags(problemId: number): Promise[]> { return ( await this.prisma.problemTag.findMany({ diff --git a/backend/apps/client/src/problem/problem.service.ts b/backend/apps/client/src/problem/problem.service.ts index afc6ce69e3..80f338402e 100644 --- a/backend/apps/client/src/problem/problem.service.ts +++ b/backend/apps/client/src/problem/problem.service.ts @@ -53,10 +53,6 @@ export class ProblemService { return plainToInstance(ProblemsResponseDto, await Promise.all(problems)) } - async searchProblemTitle(search: string) { - const data = await this.problemRepository.searchProblemTitle(search) - return plainToInstance(ProblemsResponseDto, data) - } async getProblem(problemId: number, groupId = OPEN_SPACE_ID) { const data = await this.problemRepository.getProblem(problemId, groupId) diff --git a/collection/client/Problem/Search Problem Title/Succeed.bru b/collection/client/Problem/Search Problem Title/Succeed.bru deleted file mode 100644 index fa5f8eacbf..0000000000 --- a/collection/client/Problem/Search Problem Title/Succeed.bru +++ /dev/null @@ -1,23 +0,0 @@ -meta { - name: Succeed - type: http - seq: 1 -} - -get { - url: {{baseUrl}}/problem?search=사 - body: none - auth: none -} - -query { - search: 사 -} - -docs { - # Search Problem Title - - `{{baseUrl}}/problem?search` - - query params - - `search`: 검색어 - - 검색어를 이용하여, `Problem`의 `title`을 검색합니다. -}