Skip to content

Commit 69dd4e0

Browse files
committed
feat ( #12 ) : UpdateScreenService
1 parent d890d28 commit 69dd4e0

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package hs.kr.entrydsm.feed.application.screen.service
2+
3+
import hs.kr.entrydsm.feed.adapter.`in`.screen.dto.response.ScreenResponse
4+
import hs.kr.entrydsm.feed.application.screen.exception.ScreenNotFoundException
5+
import hs.kr.entrydsm.feed.application.screen.port.`in`.UpdateScreenUseCase
6+
import hs.kr.entrydsm.feed.application.screen.port.out.FindScreenPort
7+
import hs.kr.entrydsm.feed.infrastructure.s3.PathList
8+
import hs.kr.entrydsm.feed.infrastructure.s3.util.FileUtil
9+
import jakarta.transaction.Transactional
10+
import org.springframework.stereotype.Service
11+
import org.springframework.web.multipart.MultipartFile
12+
import java.util.UUID
13+
14+
/**
15+
* 화면 이미지 업데이트를 처리하는 서비스 클래스입니다.
16+
*
17+
* @property fileUtil 파일 업로드 및 삭제를 위한 유틸리티
18+
* @property findScreenPort 화면 조회를 위한 포트
19+
*/
20+
@Transactional
21+
@Service
22+
class UpdateScreenService(
23+
private val fileUtil: FileUtil,
24+
private val findScreenPort: FindScreenPort,
25+
) : UpdateScreenUseCase {
26+
/**
27+
* 지정된 ID의 화면 이미지를 새로운 이미지로 업데이트합니다.
28+
* 기존 이미지는 삭제됩니다.
29+
*
30+
* @param screenId 업데이트할 화면의 고유 식별자
31+
* @param file 새로운 이미지 파일
32+
* @return 업데이트된 화면 이미지의 URL이 포함된 응답
33+
* @throws hs.kr.entrydsm.feed.application.screen.exception.ScreenNotFoundException 지정된 ID의 화면을 찾을 수 없는 경우
34+
*/
35+
override fun execute(
36+
screenId: UUID,
37+
file: MultipartFile,
38+
): ScreenResponse {
39+
val screen =
40+
findScreenPort.findByIdOrNull(screenId)
41+
?: throw ScreenNotFoundException
42+
val fileName = fileUtil.upload(file, PathList.SCREEN)
43+
fileUtil.delete(screen.image, PathList.SCREEN)
44+
screen.updateImage(fileName)
45+
46+
return ScreenResponse(fileUtil.generateObjectUrl(fileName, PathList.SCREEN))
47+
}
48+
}

0 commit comments

Comments
 (0)