|
| 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