diff --git a/src/main/java/org/kau/kkoolbeeServer/S3/S3UploaderService.java b/src/main/java/org/kau/kkoolbeeServer/S3/S3UploaderService.java index 75c4a79..937707e 100644 --- a/src/main/java/org/kau/kkoolbeeServer/S3/S3UploaderService.java +++ b/src/main/java/org/kau/kkoolbeeServer/S3/S3UploaderService.java @@ -3,6 +3,7 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.PutObjectRequest; +import org.apache.commons.codec.binary.Hex; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -11,6 +12,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.UUID; @Service @@ -25,7 +28,7 @@ public S3UploaderService(AmazonS3 amazonS3Client) { this.amazonS3Client = amazonS3Client; } - public String upload(MultipartFile file) throws IOException { + /* public String upload(MultipartFile file) throws IOException { String fileName = UUID.randomUUID().toString() + "-" + file.getOriginalFilename(); File convertedFile = convertMultiPartToFile(file); @@ -33,8 +36,30 @@ public String upload(MultipartFile file) throws IOException { convertedFile.delete(); // 임시 파일 삭제 return amazonS3Client.getUrl(bucketName, fileName).toString(); + }*/ + public String upload(MultipartFile file) throws IOException, NoSuchAlgorithmException { + String fileHash = calculateFileHash(file); + String fileName = fileHash + "-" + file.getOriginalFilename(); + + if (!amazonS3Client.doesObjectExist(bucketName, fileName)) { + File convertedFile = convertMultiPartToFile(file); + amazonS3Client.putObject(new PutObjectRequest(bucketName, fileName, convertedFile)); + convertedFile.delete(); + } + + return amazonS3Client.getUrl(bucketName, fileName).toString(); + } + + private String calculateFileHash(MultipartFile file) throws IOException, NoSuchAlgorithmException { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] fileBytes = file.getBytes(); + byte[] hash = digest.digest(fileBytes); + return Hex.encodeHexString(hash); } + + + private File convertMultiPartToFile(MultipartFile file) throws IOException { File tempDir = new File(System.getProperty("java.io.tmpdir")); File convertedFile = new File(tempDir,file.getOriginalFilename()); @@ -43,12 +68,12 @@ private File convertMultiPartToFile(MultipartFile file) throws IOException { } return convertedFile; } - public void deleteFileFromS3(String fileUrl) { + /*public void deleteFileFromS3(String fileUrl) { // URL에서 파일 이름 추출 String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1); // 파일 삭제 amazonS3Client.deleteObject(bucketName, fileName); - } + }*/ } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java index 73f3b8e..de8d885 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java @@ -39,7 +39,7 @@ public class Diary extends BaseTimeEntity { @Column(nullable = false,columnDefinition = "LONGTEXT") private String content; - + @Column(columnDefinition = "LONGTEXT") private String imageurl; private String title; diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java index 7b6810b..b823556 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java @@ -5,11 +5,8 @@ import org.kau.kkoolbeeServer.domain.advice.dto.AdviceResponseDto; import org.kau.kkoolbeeServer.domain.diary.Diary; import org.kau.kkoolbeeServer.domain.diary.Feeling; -import org.kau.kkoolbeeServer.domain.diary.dto.request.DiaryUpdateRequestDto; -import org.kau.kkoolbeeServer.domain.diary.dto.request.FeelingListRequestDto; +import org.kau.kkoolbeeServer.domain.diary.dto.request.*; import org.kau.kkoolbeeServer.domain.diary.dto.response.*; -import org.kau.kkoolbeeServer.domain.diary.dto.request.CurrentDateRequestDto; -import org.kau.kkoolbeeServer.domain.diary.dto.request.DiaryContentRequestDto; import org.kau.kkoolbeeServer.domain.diary.service.DiaryService; import org.kau.kkoolbeeServer.domain.member.Member; import org.kau.kkoolbeeServer.domain.member.service.MemberService; @@ -214,7 +211,7 @@ public ResponseEntity> createSlowTypeDiary(@RequestPart("imageurl } }*/ @PostMapping("/api/diary/create/slow") - public ResponseEntity> createSlowTypeDiary(@RequestHeader(value = "Authorization") String authHeader, @RequestPart(value = "imageurl",required = false)MultipartFile image, + public ResponseEntity> createSlowTypeDiary(@RequestHeader(value = "Authorization") String authHeader, @RequestPart(value = "imageUrl",required = false)MultipartFile image, @RequestPart(value = "diaryTitle") String diaryTitle, @RequestPart(value = "diaryContent") String diaryContent){ @@ -376,6 +373,34 @@ public ResponseEntity updateDiary( +} + +@DeleteMapping("api/diary/delete") + public ResponseEntitydeleteDiary(@RequestHeader(value = "Authorization") String authHeader,@RequestBody DiaryDeleteRequestDto diaryDeleteRequestDto){ + String accessToken = null; + if (authHeader != null && authHeader.startsWith("Bearer ")) { + accessToken = authHeader.substring(7); + Long memberID= jwtProvider.getUserFromJwt(accessToken); + Diary diary=diaryService.findDiaryById(diaryDeleteRequestDto.getDiaryId()).orElseThrow(()->new NoSuchElementException("해당 ID의 일기를 찾을 수 없습니다.")); + if(diary.getMember().getId()!=memberID){ + + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ApiResponse.error(ErrorType.NOT_YOUR_DIARY)); + } + } + else{ + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ApiResponse.error(ErrorType.INVALID_HTTP_REQUEST_ERROR)); + + } + diaryService.deleteDiary(diaryDeleteRequestDto.getDiaryId()); + return ResponseEntity.status(HttpStatus.OK).body(ApiResponse.success(SuccessType.PROCESS_SUCCESSED)); + + + + + + + + } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryDeleteRequestDto.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryDeleteRequestDto.java new file mode 100644 index 0000000..92fca08 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryDeleteRequestDto.java @@ -0,0 +1,14 @@ +package org.kau.kkoolbeeServer.domain.diary.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class DiaryDeleteRequestDto { + private Long diaryId; +} diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/SlowTypeCreateResponseDto.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/SlowTypeCreateResponseDto.java index 3cded2f..1b4ec3e 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/SlowTypeCreateResponseDto.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/SlowTypeCreateResponseDto.java @@ -13,5 +13,5 @@ public class SlowTypeCreateResponseDto { private Long diaryId; private String diaryContent; private String diaryTitle; - private String imageurl; + private String imageUrl; } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java index 8fb0be9..757a7b1 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java @@ -6,6 +6,7 @@ import org.kau.kkoolbeeServer.domain.diary.dto.response.UpdateDiaryResponseDto; import org.kau.kkoolbeeServer.domain.diary.repository.DiaryRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -63,10 +64,11 @@ public Diary saveDiary(Diary diary){ public UpdateDiaryResponseDto updateDiary(Long diaryId,String diaryContent,String diaryTitle,String imageUrl){ Diary diary=findDiaryById(diaryId).orElseThrow(()->new NoSuchElementException("해당 ID의 일기를 찾을 수 없습니다.")); - if(diary.getImageurl()!=null){ + /* if(diary.getImageurl()!=null){ s3UploaderService.deleteFileFromS3(diary.getImageurl()); - } + }*/ + diary.setImageurl(imageUrl); if(!diary.getContent().equals(diaryContent)){ diary.setFeeling(null); @@ -111,6 +113,14 @@ public UpdateDiaryResponseDto updateDiaryWithoutImage(Long diaryId,String diaryC + } + + public void deleteDiary(Long diaryId){ + Diary diary=findDiaryById(diaryId).orElseThrow(()->new NoSuchElementException()); + diaryRepository.delete(diary); + + + } diff --git a/src/main/java/org/kau/kkoolbeeServer/global/common/exception/GlobalExceptionHandler.java b/src/main/java/org/kau/kkoolbeeServer/global/common/exception/GlobalExceptionHandler.java index 0b48f7c..60b715e 100644 --- a/src/main/java/org/kau/kkoolbeeServer/global/common/exception/GlobalExceptionHandler.java +++ b/src/main/java/org/kau/kkoolbeeServer/global/common/exception/GlobalExceptionHandler.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.NoSuchElementException; import static org.kau.kkoolbeeServer.global.common.dto.enums.ErrorType.INTERNAL_SERVER_ERROR; import static org.kau.kkoolbeeServer.global.common.dto.enums.ErrorType.REQUEST_VALIDATION_ERROR; @@ -104,6 +105,16 @@ protected ApiResponse handleIllegalArgumentException(IllegalArgumentException return ApiResponse.error(REQUEST_VALIDATION_ERROR, "잘못된 요청 형식입니다."); } + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(NoSuchElementException.class) + protected ApiResponse handleNoSuchElementException(NoSuchElementException e) { + // 로그 기록, 오류 메시지 생성 및 기타 필요한 처리 + log.error("Unexpected error occurred", e); + return ApiResponse.error(REQUEST_VALIDATION_ERROR, "해당 Id의 일기는 이미 존재하지 않습니다."); + } + + + //이부분추가