From 15c3ef6e2fbf9ccfa499587779e67d59bc387b6e Mon Sep 17 00:00:00 2001 From: seeunjang Date: Sun, 19 May 2024 12:54:34 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20JD=20=EC=A1=B0=ED=9A=8C=20applicatio?= =?UTF-8?q?n=20=EA=B3=84=EC=B8=B5=20=EC=83=9D=EC=84=B1,=20SliceResponse=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1(#63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apimodule/common/dto/SliceResponse.kt | 21 ++++++++ .../application/dto/GetJobDescriptionInfo.kt | 20 ++++++++ .../service/JobDescriptionInfoGetService.kt | 48 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 Api-Module/src/main/kotlin/com/bamyanggang/apimodule/common/dto/SliceResponse.kt create mode 100644 Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/dto/GetJobDescriptionInfo.kt create mode 100644 Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/service/JobDescriptionInfoGetService.kt diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/common/dto/SliceResponse.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/common/dto/SliceResponse.kt new file mode 100644 index 00000000..7d6404de --- /dev/null +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/common/dto/SliceResponse.kt @@ -0,0 +1,21 @@ +package com.bamyanggang.apimodule.common.dto + +import com.bamyanggang.domainmodule.common.pagination.SliceDomain + +data class SliceResponse( + val content: List, + val page: Int, + val size: Int, + val hasNext: Boolean +) { + companion object { + fun from(slice: SliceDomain): SliceResponse { + return SliceResponse( + content = slice.content, + page = slice.pageNumber, + size = slice.pageSize, + hasNext = slice.hasNext + ) + } + } +} diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/dto/GetJobDescriptionInfo.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/dto/GetJobDescriptionInfo.kt new file mode 100644 index 00000000..b5ce7963 --- /dev/null +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/dto/GetJobDescriptionInfo.kt @@ -0,0 +1,20 @@ +package com.bamyanggang.apimodule.domain.jobDescription.application.dto + +import com.bamyanggang.domainmodule.domain.jobDescription.enums.WriteStatus +import java.time.LocalDateTime +import java.util.UUID + +class GetJobDescriptionInfo { + + data class Response( + val jobDescriptionId: UUID, + val remainingDate: Int, + val enterpriseName: String, + val title: String, + val writeStatus: WriteStatus, + val createdAt: LocalDateTime, + val startedAt: LocalDateTime, + val endedAt: LocalDateTime, + ) + +} diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/service/JobDescriptionInfoGetService.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/service/JobDescriptionInfoGetService.kt new file mode 100644 index 00000000..7acadeb5 --- /dev/null +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/jobDescription/application/service/JobDescriptionInfoGetService.kt @@ -0,0 +1,48 @@ +package com.bamyanggang.apimodule.domain.jobDescription.application.service + +import com.bamyanggang.apimodule.common.dto.SliceResponse +import com.bamyanggang.apimodule.common.getAuthenticationPrincipal +import com.bamyanggang.apimodule.domain.jobDescription.application.dto.GetJobDescriptionInfo +import com.bamyanggang.domainmodule.common.pagination.SliceDomain +import com.bamyanggang.domainmodule.domain.jobDescription.enums.SortType +import com.bamyanggang.domainmodule.domain.jobDescription.enums.WriteStatus +import com.bamyanggang.domainmodule.domain.jobDescription.service.ApplyReader +import com.bamyanggang.domainmodule.domain.jobDescription.service.JobDescriptionReader +import org.springframework.data.domain.Pageable +import org.springframework.data.domain.SliceImpl +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + + +@Service +class JobDescriptionInfoGetService( + private val jobDescriptionReader: JobDescriptionReader, + private val applyReader: ApplyReader +) { + + @Transactional(readOnly = true) + fun getJobDescriptionInfo(pageable: Pageable, writeStatus: WriteStatus?, sortType: SortType?): SliceResponse { + return getAuthenticationPrincipal().let{ userId -> + val jobDescriptions = jobDescriptionReader.readJobDescriptionByUserIdAndSortType(userId, pageable.pageNumber, pageable.pageSize, sortType) + + val jobDescriptionInfoResponses = jobDescriptions.content.map{ jobDescription -> + val apply = applyReader.readApplyByJobDescriptionId(jobDescription.id) + GetJobDescriptionInfo.Response( + jobDescription.id, + jobDescription.getRemainingDate(), + jobDescription.enterpriseName, + jobDescription.title, + apply?.writeStatus?: WriteStatus.NOT_APPLIED, + jobDescription.createdAt, + jobDescription.startedAt, + jobDescription.endedAt + ) + } + + val jobDescriptionsSlice = SliceDomain(jobDescriptionInfoResponses, jobDescriptions.pageNumber, jobDescriptions.pageSize, jobDescriptions.hasNext) + SliceResponse.from(jobDescriptionsSlice) + } + } + + +}