diff --git a/server/src/user/dto/uploaded-video-response.dto.ts b/server/src/user/dto/uploaded-video-response.dto.ts deleted file mode 100644 index 93cba2a..0000000 --- a/server/src/user/dto/uploaded-video-response.dto.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { VideoResponseDto } from 'src/video/dto/video-response.dto'; -import { UploaderResponseDto } from './uploader-response.dto'; - -export class UploadedVideoResponseDto { - constructor(init: UploadedVideoResponseDto) { - Object.assign(this, init); - } - - uploader: UploaderResponseDto; - - videos: VideoResponseDto[]; -} diff --git a/server/src/user/dto/user.dto.ts b/server/src/user/dto/user.dto.ts index d3abac5..6db14f4 100644 --- a/server/src/user/dto/user.dto.ts +++ b/server/src/user/dto/user.dto.ts @@ -12,7 +12,7 @@ export class UserDto { * 프로필 이미지 확장자 * @example 'webp' */ - profileImageExtension?: string; + profileImageExtension?: string | null = null; /** * 유저 닉네임 diff --git a/server/src/user/user.controller.ts b/server/src/user/user.controller.ts index 92a0747..b514eeb 100644 --- a/server/src/user/user.controller.ts +++ b/server/src/user/user.controller.ts @@ -16,9 +16,9 @@ import { TokenExpiredException } from 'src/exceptions/token-expired.exception'; import { ApiSuccessResponse } from 'src/decorators/api-succes-response'; import { UserNotFoundException } from 'src/exceptions/user-not-found.exception'; import { ProfileUploadRequiredException } from 'src/exceptions/profile-upload-required-exception'; +import { VideoListResponseDto } from 'src/video/dto/video-list-response.dto'; import { UserService } from './user.service'; import { ProfileDto } from './dto/profile.dto'; -import { UploadedVideoResponseDto } from './dto/uploaded-video-response.dto'; import { UserUploadedVideoQueryDto } from './dto/uploaded-video-request.dto'; import { UserRatedVideoQueryDto } from './dto/rated-video-request.dto'; import { RatedVideoResponseDto } from './dto/rated-video-response.dto'; @@ -56,12 +56,12 @@ export class UserController { * 특정 유저가 업로드 한 비디오 정보 반환 */ @Get(':userId/videos/uploaded') - @ApiSuccessResponse(200, '비디오 반환 성공', UploadedVideoResponseDto) + @ApiSuccessResponse(200, '비디오 반환 성공', VideoListResponseDto) @ApiFailResponse('조회 실패', [UserNotFoundException]) getUploadedVideos( @Param('userId') userId: string, @Query() query: UserUploadedVideoQueryDto, - ): Promise { + ) { return this.userService.getUploadedVideos( userId, query.limit, diff --git a/server/src/user/user.service.ts b/server/src/user/user.service.ts index 0aed113..2d5b80f 100644 --- a/server/src/user/user.service.ts +++ b/server/src/user/user.service.ts @@ -6,12 +6,10 @@ import { Video } from 'src/video/schemas/video.schema'; import { UserNotFoundException } from 'src/exceptions/user-not-found.exception'; import * as _ from 'lodash'; import { deleteObject } from 'src/ncpAPI/deleteObject'; -import { getBucketImage } from 'src/ncpAPI/getBucketImage'; import { VideoService } from 'src/video/video.service'; import { createPresignedUrl } from 'src/ncpAPI/presignedURL'; import { ProfileUploadRequiredException } from 'src/exceptions/profile-upload-required-exception'; import { checkUpload } from 'src/ncpAPI/listObjects'; -import { UploadedVideoResponseDto } from './dto/uploaded-video-response.dto'; import { User } from './schemas/user.schema'; import { ProfileDto } from './dto/profile.dto'; import { RatedVideoResponseDto } from './dto/rated-video-response.dto'; @@ -93,11 +91,7 @@ export class UserService { }; } - async getUploadedVideos( - uuid: string, - limit: number, - lastId: string, - ): Promise { + async getUploadedVideos(uuid: string, limit: number, lastId: string) { const uploaderData = await this.UserModel.findOne({ uuid }, { actions: 0 }); const { uploader, uploaderId } = await this.getUploaderInfo( uuid, @@ -118,8 +112,8 @@ export class UserService { .sort({ _id: -1 }) .limit(limit); - const videos = await this.getVideoInfos(videoData); - return { videos, uploader }; + const videos = await this.getVideoInfos(videoData, uploader); + return { videos }; } async getUploaderInfo(uuid: string, uploaderData) { @@ -142,7 +136,7 @@ export class UserService { return { uploader, uploaderId }; } - async getVideoInfos(videoData: Array) { + async getVideoInfos(videoData: Array, uploader: object) { const videos = await Promise.all( videoData.map(async (video) => { const { thumbnailExtension, raterCount, totalRating, ...videoInfo } = @@ -151,12 +145,15 @@ export class UserService { ? (totalRating / raterCount).toFixed(1) : null; const manifest = `${process.env.MANIFEST_URL_PREFIX}${videoInfo._id}_,${process.env.ENCODING_SUFFIXES}${process.env.ABR_MANIFEST_URL_SUFFIX}`; - const thumbnailImage = await getBucketImage( + const thumbnailImageUrl = await createPresignedUrl( process.env.THUMBNAIL_BUCKET, - thumbnailExtension, - videoInfo._id, + `${videoInfo._id}.${thumbnailExtension}`, + 'GET', ); - return { ...videoInfo, manifest, rating, thumbnailImage }; + return { + video: { ...videoInfo, manifest, rating, thumbnailImageUrl }, + uploader, + }; }), ); return videos;