44 RequestNotFoundError ,
55 UnauthorizedRequestStatusChangeError ,
66 InvalidStatusTransitionError ,
7- StatusAlreadyChangedError
7+ StatusAlreadyChangedError ,
8+ RequestNotSubmittedError
89} from "../../common/errors/request.errors.js" ;
910
1011export const RequestService = {
@@ -465,5 +466,50 @@ async getCompletedRequests(userId, dto) {
465466 totalPages
466467 }
467468 } ;
469+ } ,
470+
471+ /**
472+ * 작업물 조회
473+ */
474+ async getRequestResult ( userId , dto ) {
475+ const { requestId } = dto ;
476+
477+ // Request 존재 여부 확인
478+ const request = await RequestRepository . findRequestResultById ( requestId ) ;
479+ if ( ! request ) {
480+ throw new RequestNotFoundError ( { requestId } ) ;
481+ }
482+
483+ // 권한 확인 (요청한 사용자가 해당 Request의 소유자인지)
484+ if ( request . userId !== BigInt ( userId ) ) {
485+ throw new UnauthorizedRequestStatusChangeError ( { userId, requestId } ) ;
486+ }
487+
488+ // 상태 확인 (SUBMITTED 또는 COMPLETED만 허용)
489+ if ( ! [ 'SUBMITTED' , 'COMPLETED' ] . includes ( request . status ) ) {
490+ throw new RequestNotSubmittedError ( { requestId, currentStatus : request . status } ) ;
491+ }
492+
493+ // 작업물 이미지들 조회
494+ const resultImages = await RequestRepository . findResultImagesByRequestId ( requestId ) ;
495+ const imageUrls = resultImages . map ( image => image . imageUrl ) ;
496+
497+ // 커미션 썸네일 이미지 조회
498+ const thumbnailImages = await RequestRepository . findThumbnailImagesByCommissionIds ( [ request . commission . id ] ) ;
499+ const thumbnailImageUrl = thumbnailImages . length > 0 ? thumbnailImages [ 0 ] . imageUrl : null ;
500+
501+ return {
502+ request : {
503+ requestId : request . id ,
504+ status : request . status ,
505+ title : request . commission . title ,
506+ submittedAt : request . submittedAt . toISOString ( ) ,
507+ thumbnailImageUrl : thumbnailImageUrl ,
508+ commission : {
509+ id : request . commission . id
510+ }
511+ } ,
512+ images : imageUrls
513+ } ;
468514 }
469515} ;
0 commit comments