From 7f033e4469c984c4f01d49fdc27d0ea90b8b4417 Mon Sep 17 00:00:00 2001 From: whereami0404 Date: Tue, 21 May 2024 02:39:13 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B6=81=EB=A7=88=ED=81=AC=ED=95=9C=20?= =?UTF-8?q?=EA=B2=BD=ED=97=98=20=EC=A1=B0=ED=9A=8C=20APi=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84(#115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ExperienceGetService.kt | 53 ++++++++++++++----- .../experience/presentation/ExperienceApi.kt | 1 + .../presentation/ExperienceController.kt | 12 ++++- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt index f4889ab3..a3690691 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt @@ -3,7 +3,10 @@ package com.bamyanggang.apimodule.domain.experience.application.service import com.bamyanggang.apimodule.common.getAuthenticationPrincipal import com.bamyanggang.apimodule.domain.experience.application.dto.ExperienceYear import com.bamyanggang.apimodule.domain.experience.application.dto.GetExperience +import com.bamyanggang.domainmodule.domain.bookmark.service.BookmarkReader import com.bamyanggang.domainmodule.domain.experience.aggregate.Experience +import com.bamyanggang.domainmodule.domain.experience.aggregate.ExperienceContent +import com.bamyanggang.domainmodule.domain.experience.aggregate.ExperienceStrongPoint import com.bamyanggang.domainmodule.domain.experience.service.ExperienceReader import com.bamyanggang.domainmodule.domain.strongpoint.service.StrongPointReader import com.bamyanggang.domainmodule.domain.tag.service.TagReader @@ -16,6 +19,7 @@ class ExperienceGetService( private val experienceReader: ExperienceReader, private val strongPointReader: StrongPointReader, private val tagReader: TagReader, + private val bookMarkReader: BookmarkReader ) { @Transactional(readOnly = true) fun getExperienceDetailById(experienceId: UUID) : GetExperience.DetailExperience { @@ -49,11 +53,36 @@ class ExperienceGetService( return GetExperience.Response(experiences) } + @Transactional(readOnly = true) + fun getBookMarkExperiences(jobDescriptionId: UUID): GetExperience.Response { + val experienceIds = bookMarkReader.readByStatusOnAndJobDescriptionId(jobDescriptionId).map { it.experienceId } + + val detailExperiences = experienceReader.readByIds(experienceIds).map { + val detailParentTag = convertParentTag(it.parentTagId) + val detailChildTag = convertChildTag(it.childTagId) + val detailStrongPoints = convertStrongPoints(it.strongPoints) + val detailContents = convertDetailExperienceContent(it.contents) + + GetExperience.DetailExperience( + id = it.id, + title = it.title, + parentTag = detailParentTag, + childTag = detailChildTag, + strongPoints = detailStrongPoints, + contents = detailContents, + startedAt = it.startedAt, + endedAt = it.endedAt + ) + } + + return GetExperience.Response(detailExperiences) + } + private fun createExperienceDetailResponse(experience: Experience): GetExperience.DetailExperience { - val detailExperienceContents = convertDetailExperienceContent(experience) - val strongPointDetails = convertStrongPoints(experience) - val detailParentTag = convertParentTag(experience) - val detailChildTag = convertChildTag(experience) + val detailExperienceContents = convertDetailExperienceContent(experience.contents) + val strongPointDetails = convertStrongPoints(experience.strongPoints) + val detailParentTag = convertParentTag(experience.parentTagId) + val detailChildTag = convertChildTag(experience.childTagId) return GetExperience.DetailExperience( id = experience.id, @@ -67,31 +96,31 @@ class ExperienceGetService( ) } - private fun convertChildTag(oneExperience: Experience) = - tagReader.readById(oneExperience.childTagId).let { + private fun convertChildTag(childTagId: UUID) = + tagReader.readById(childTagId).let { GetExperience.DetailTag( it.id, it.name ) } - private fun convertParentTag(oneExperience: Experience) = - tagReader.readById(oneExperience.parentTagId).let { + private fun convertParentTag(parentTagId: UUID) = + tagReader.readById(parentTagId).let { GetExperience.DetailTag( it.id, it.name ) } - private fun convertDetailExperienceContent(experience: Experience) = - experience.contents.map { GetExperience.DetailExperienceContent( + private fun convertDetailExperienceContent(contents: List) = + contents.map { GetExperience.DetailExperienceContent( it.question, it.answer ) } - private fun convertStrongPoints(experience: Experience) = - experience.strongPoints.map { it.strongPointId }.let { + private fun convertStrongPoints(strongPoints: List) = + strongPoints.map { it.strongPointId }.let { strongPointReader.readByIds(it).map { strongPoint -> GetExperience.DetailStrongPoint( strongPoint.id, diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceApi.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceApi.kt index 9f597e3f..5319b617 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceApi.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceApi.kt @@ -4,4 +4,5 @@ object ExperienceApi { const val BASE_URL = "/api/experiences" const val EXPERIENCE_PATH_VARIABLE_URL = "$BASE_URL/{experienceId}" const val ALL_YEARS = "$BASE_URL/all-years" + const val BOOKMARK_EXPERIENCE_URL = "$BASE_URL/{jobDescriptionId}" } diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt index e412fb6c..0cd422aa 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt @@ -1,6 +1,9 @@ package com.bamyanggang.apimodule.domain.experience.presentation -import com.bamyanggang.apimodule.domain.experience.application.dto.* +import com.bamyanggang.apimodule.domain.experience.application.dto.CreateExperience +import com.bamyanggang.apimodule.domain.experience.application.dto.EditExperience +import com.bamyanggang.apimodule.domain.experience.application.dto.ExperienceYear +import com.bamyanggang.apimodule.domain.experience.application.dto.GetExperience import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceCreateService import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceDeleteService import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceEditService @@ -15,6 +18,13 @@ class ExperienceController( private val experienceEditService: ExperienceEditService, private val experienceGetService: ExperienceGetService ) { + @GetMapping(ExperienceApi.BOOKMARK_EXPERIENCE_URL) + fun getBookMarkExperiences( + @PathVariable("jobDescriptionId") jobDescriptionId: UUID + ) : GetExperience.Response{ + return experienceGetService.getBookMarkExperiences(jobDescriptionId) + } + @GetMapping(ExperienceApi.BASE_URL) fun getExperienceByFilter(@RequestParam("year") year: Int, @RequestParam("parent-tag") parentTagId: UUID,