Skip to content

Commit

Permalink
Merge pull request #143 from KUSITMS-29th-TEAM-B/feat/flight-127
Browse files Browse the repository at this point in the history
feat:북마크 경험 태그 필터링 API 구현(#127)
  • Loading branch information
whereami2048 authored May 22, 2024
2 parents a55cb81 + c393ac4 commit b7d5836
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 216 deletions.
11 changes: 3 additions & 8 deletions Api-Module/src/docs/asciidoc/Experience.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,12 @@ operation::ExperienceControllerTest/getExperienceDetailTest/[snippets='http-requ
[[GetExperiencesTest]]
=== 경험 목록 조회 API

operation::ExperienceControllerTest/getExperienceYearAndChildTagTest/[snippets='http-request,request-headers,request-body,http-response,response-body']

[[GetBookmarkExperiencesTest]]
=== 북마크 경험 전체 조회 API

operation::ExperienceControllerTest/getAllBookmarkExperienceYearTest/[snippets='http-request,request-headers,path-parameters,request-body,http-response,response-body']
operation::ExperienceControllerTest/getExperienceYearAndTagIdTest/[snippets='http-request,request-headers,request-body,query-parameters,http-response,response-body']

[[GetBookmarkExperienceSearchTest]]
=== 북마크 경험 검색 API
=== 북마크 경험 조회(문자열 검색, 태그 필터링) API

operation::ExperienceControllerTest/getBookmarkExperienceBySearchYearTest/[snippets='http-request,request-headers,path-parameters,request-body,http-response,response-body']
operation::ExperienceControllerTest/getBookmarkExperienceByFilterTest/[snippets='http-request,request-headers,path-parameters,query-parameters,request-body,http-response,response-body']

[[getExperienceYearsTest]]
=== 유저 경험 내 존재 연도 조회 API
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class ExperienceGetService(
private val bookMarkReader: BookmarkReader,
) {
@Transactional(readOnly = true)
fun getExperienceDetailById(experienceId: UUID) : GetExperience.DetailExperience {
fun getExperienceDetailById(experienceId: UUID): GetExperience.DetailExperience {
val oneExperience = experienceReader.readExperience(experienceId)
return createExperienceDetailResponse(oneExperience)
}
Expand Down Expand Up @@ -77,7 +77,8 @@ class ExperienceGetService(

@Transactional(readOnly = true)
fun getAllBookmarkExperiences(jobDescriptionId: UUID): GetExperience.BookmarkResponse {
val experienceIds = bookMarkReader.readByStatusAndJobDescriptionId(jobDescriptionId, BookmarkStatus.ON).map { it.experienceId }
val experienceIds =
bookMarkReader.readByStatusAndJobDescriptionId(jobDescriptionId, BookmarkStatus.ON).map { it.experienceId }

val userExperiences = experienceReader.readAllByUserId(getAuthenticationPrincipal())

Expand Down Expand Up @@ -105,7 +106,9 @@ class ExperienceGetService(
}

val searchExperiences = experienceReader.readByIds(experiencesIds)
val bookmarkExperienceIds = bookMarkReader.readByBookmarkStatusAndExperienceIds(experiencesIds, BookmarkStatus.ON).map { it.experienceId }
val bookmarkExperienceIds =
bookMarkReader.readByBookmarkStatusAndExperienceIds(experiencesIds, BookmarkStatus.ON)
.map { it.experienceId }
println(bookmarkExperienceIds)
val bookmarkExperienceDetails = searchExperiences.map {
when {
Expand All @@ -117,6 +120,70 @@ class ExperienceGetService(
return GetExperience.BookmarkResponse(bookmarkExperienceDetails)
}

@Transactional(readOnly = true)
fun getAllExperienceByYear(year: Int): GetExperience.Response {
val experiences = experienceReader.readByYear(year).map {
createExperienceDetailResponse(it)
}

return GetExperience.Response(experiences)
}

@Transactional(readOnly = true)
fun getBookmarkExperienceFilterByTagId(
jobDescriptionId: UUID,
parentTagId: UUID?,
childTagId: UUID?
): GetExperience.BookmarkResponse =
when {
parentTagId == null -> getAllBookmarkExperiences(jobDescriptionId)
childTagId == null -> getBookmarkExperienceByParentTagId(jobDescriptionId, parentTagId)
else -> getBookmarkExperienceByChildTagId(jobDescriptionId, childTagId)
}

@Transactional(readOnly = true)
fun getBookmarkExperienceByParentTagId(
jobDescriptionId: UUID,
tagId: UUID?
): GetExperience.BookmarkResponse {
val bookmarkDetailExperiences = getAllBookmarkExperiences(jobDescriptionId).experiences.filter {
it.parentTag.id == tagId
}

return GetExperience.BookmarkResponse(bookmarkDetailExperiences)
}

@Transactional(readOnly = true)
fun getBookmarkExperienceByChildTagId(
jobDescriptionId: UUID,
tagId: UUID?
): GetExperience.BookmarkResponse {
val bookmarkDetailExperiences = getAllBookmarkExperiences(jobDescriptionId).experiences.filter {
it.childTag.id == tagId
}

return GetExperience.BookmarkResponse(bookmarkDetailExperiences)
}

@Transactional(readOnly = true)
fun getBookmarkExperience(
jobDescriptionId: UUID,
search: String?,
parentTagId: UUID?,
childTagId: UUID?,
): GetExperience.BookmarkResponse = when {
search != null -> getBookmarkExperienceBySearch(jobDescriptionId, search.trim())
else -> getBookmarkExperienceFilterByTagId(jobDescriptionId, parentTagId, childTagId)
}

@Transactional(readOnly = true)
fun getExperienceFilter(year: Int, parentTagId: UUID?, childTagId: UUID?): GetExperience.Response =
when {
childTagId == null && parentTagId == null -> getAllExperienceByYear(year)
childTagId == null && parentTagId != null -> getExperienceByYearAndParentTag(year, parentTagId)
else -> childTagId?.let { getExperienceByYearAndChildTag(year, it) } ?: GetExperience.Response(emptyList())
}

private fun createExperienceDetailResponse(experience: Experience): GetExperience.DetailExperience {
val detailExperienceContents = convertExperienceContent(experience.contents)
val strongPointDetails = convertStrongPoints(experience.strongPoints)
Expand Down Expand Up @@ -186,12 +253,4 @@ class ExperienceGetService(
)
}
}

fun getAllExperienceByYear(year: Int): GetExperience.Response {
val experiences = experienceReader.readByYear(year).map {
createExperienceDetailResponse(it)
}

return GetExperience.Response(experiences)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,17 @@ class ExperienceController(
fun getBookMarkExperiences(
@PathVariable("jobDescriptionId") jobDescriptionId: UUID,
@RequestParam("search", required = false) search: String?,
) : GetExperience.BookmarkResponse =
when (search) {
null -> experienceGetService.getAllBookmarkExperiences(jobDescriptionId)
else -> experienceGetService.getBookmarkExperienceBySearch(jobDescriptionId, search.trim())
}
@RequestParam("parent-tag", required = false) parentTagId: UUID?,
@RequestParam("child-tag", required = false) childTagId: UUID?,
): GetExperience.BookmarkResponse =
experienceGetService.getBookmarkExperience(jobDescriptionId, search, parentTagId, childTagId)

@GetMapping(ExperienceApi.BASE_URL)
fun getExperienceByFilter(@RequestParam("year") year: Int,
@RequestParam("parent-tag", required = false) parentTagId: UUID?,
@RequestParam("child-tag", required = false) childTagId: UUID?
) : GetExperience.Response =
when {
childTagId == null && parentTagId == null -> experienceGetService.getAllExperienceByYear(year)
childTagId == null && parentTagId != null -> experienceGetService.getExperienceByYearAndParentTag(year, parentTagId)
else -> experienceGetService.getExperienceByYearAndChildTag(year, childTagId!!)
}
experienceGetService.getExperienceFilter(year, parentTagId, childTagId)

@GetMapping(ExperienceApi.EXPERIENCE_PATH_VARIABLE_URL)
fun getExperience(@PathVariable("experienceId") experienceId: UUID): GetExperience.DetailExperience {
Expand Down
Loading

0 comments on commit b7d5836

Please sign in to comment.