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) + } + } + + +}