-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(#10): user-image.service 추가
- Loading branch information
Showing
4 changed files
with
46 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,42 +1,14 @@ | ||
import { UserRepository } from 'src/users/repositories/user.repository'; | ||
import { Controller, InternalServerErrorException, Param, Patch, UploadedFile, UseInterceptors } from '@nestjs/common'; | ||
import { Controller, Param, Patch, UploadedFile, UseInterceptors } from '@nestjs/common'; | ||
import { FileInterceptor } from '@nestjs/platform-express'; | ||
import { S3Service } from 'src/common/s3/s3.service'; | ||
import { UserImageRepository } from '../repositories/user-image.repository'; | ||
import { UserImageService } from '../services/user-image.service'; | ||
|
||
@Controller('user/image') | ||
export class UserImageController { | ||
constructor( | ||
private readonly s3Service: S3Service, | ||
private readonly userRepository: UserRepository, | ||
private readonly userImageRepository : UserImageRepository | ||
) {} | ||
constructor(private readonly userImageService: UserImageService) {} | ||
|
||
@Patch(':userId') | ||
@UseInterceptors(FileInterceptor('file')) | ||
async uploadImage(@Param('userId') userId: number, @UploadedFile() file: Express.Multer.File) { | ||
|
||
const res = await this.s3Service.imgUpload(file, userId); // S3에 이미지 업로드 | ||
if (!res) { // S3에 이미지 업로드 실패 | ||
throw new InternalServerErrorException('S3 이미지 업로드에 실패했습니다.'); | ||
} else { // S3에 이미지 업로드 성공 | ||
const imageUrl = res.url; // S3에 업로드된 이미지 URL | ||
|
||
const checkUserImage = (await this.userImageRepository.checkUserImage(userId)).imageUrl; // DB에 이미지가 있는지 확인 | ||
const imageUrlParts = checkUserImage.split('/'); | ||
const imageKey = imageUrlParts[imageUrlParts.length - 1]; // S3에 업로드된 이미지의 키 | ||
const dbImageUrl = imageUrlParts[imageUrlParts.length - 2]; // 이미지 제공자 이름 | ||
|
||
if (dbImageUrl == 'ma6-main.s3.ap-northeast-2.amazonaws.com' && imageKey !== 'default_user_image.png') { // S3에 업로드된 이미지이고, 기본 이미지가 아닌 경우 | ||
await this.s3Service.deleteImage(imageKey); // S3에 업로드된 기존 이미지 삭제 | ||
} | ||
|
||
const updateUserImage = await this.userImageRepository.updateUserImage(userId, imageUrl); // DB에 이미지 URL 업데이트 | ||
if (!updateUserImage) { | ||
throw new InternalServerErrorException('사용자 이미지 업데이트에 실패했습니다.'); | ||
} else { | ||
return { status: 'success', message: '이미지 업데이트에 성공했습니다.'}; | ||
} | ||
} | ||
return this.userImageService.uploadImage(userId, file); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,41 @@ | ||
import { Injectable } from '@nestjs/common'; | ||
import { S3Service } from 'src/common/s3/s3.service'; | ||
import { UserImageRepository } from '../repositories/user-image.repository'; | ||
import { InternalServerErrorException } from '@nestjs/common'; | ||
|
||
@Injectable() | ||
export class UserImageService {} | ||
export class UserImageService { | ||
constructor( | ||
private readonly s3Service: S3Service, | ||
private readonly userImageRepository: UserImageRepository, | ||
) {} | ||
|
||
async uploadImage(userId: number, file: Express.Multer.File): Promise<{ status: string; message: string }> { | ||
try { | ||
const res = await this.s3Service.imgUpload(file, userId); // S3에 이미지 업로드 | ||
if (!res) { | ||
throw new InternalServerErrorException('S3 이미지 업로드에 실패했습니다.'); | ||
} | ||
|
||
const imageUrl = res.url; // S3에 업로드된 이미지 URL | ||
const checkUserImage = (await this.userImageRepository.checkUserImage(userId)).imageUrl; // DB에 이미지가 있는지 확인 | ||
const imageUrlParts = checkUserImage.split('/'); | ||
const imageKey = imageUrlParts[imageUrlParts.length - 1]; // S3에 업로드된 이미지의 키 | ||
const dbImageUrl = imageUrlParts[imageUrlParts.length - 2]; // 이미지 제공자 이름 | ||
|
||
if (dbImageUrl == 'ma6-main.s3.ap-northeast-2.amazonaws.com' && imageKey !== 'default_user_image.png') { | ||
// S3에 업로드된 이미지이고, 기본 이미지가 아닌 경우 | ||
await this.s3Service.deleteImage(imageKey); // S3에 업로드된 기존 이미지 삭제 | ||
} | ||
|
||
const updateUserImage = await this.userImageRepository.updateUserImage(userId, imageUrl); // DB에 이미지 URL 업데이트 | ||
if (!updateUserImage) { | ||
throw new InternalServerErrorException('사용자 이미지 업데이트에 실패했습니다.'); | ||
} else { | ||
return { status: 'success', message: '이미지 업데이트에 성공했습니다.' }; | ||
} | ||
} catch (error) { | ||
throw new InternalServerErrorException('이미지 업로드 및 처리 중 오류가 발생했습니다.'); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters