Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REFACTOR: imageurl LONGTEXT로변경 #90

Merged
merged 49 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c79b73b
chore: 환경변수 세팅
Mar 29, 2024
562a909
Merge branch 'chore/#2-aws_settings' of https://github.com/KAU2024-SA…
Mar 29, 2024
cae4c98
chore: aws secret manager 설정
Apr 1, 2024
fbd8664
Merge pull request #11 from KAU2024-SANHAK/chore/#2-aws_settings
hoeun0723 Apr 1, 2024
1b3f0ee
[chore] CI/CD settings (#13)
hoeun0723 Apr 3, 2024
e32370f
feat/14-entity develop브랜치에 merge
jms0324 Apr 10, 2024
b810ab8
Feat/#14 entity (#15)
jms0324 Apr 10, 2024
4959fa4
refactor: entity에 감정,조언 분리
jms0324 Apr 10, 2024
92f38b2
refactor:수정완료
jms0324 Apr 10, 2024
acf5dae
Merge branch 'develop' into refactor/#17-entity-retouch
jms0324 Apr 10, 2024
ba7962f
Merge pull request #18 from KAU2024-SANHAK/refactor/#17-entity-retouch
jms0324 Apr 10, 2024
a378d32
refactor: feeling클래스 감정추가
jms0324 Apr 12, 2024
bd24f25
feat: summary엔티티따로생성 후 member와 다대일양방향관계생성
jms0324 Apr 12, 2024
d8429e4
worried 스펠링수정
jms0324 Apr 12, 2024
2bfa311
Merge pull request #23 from KAU2024-SANHAK/refactor/#22-entity-feelin…
jms0324 Apr 12, 2024
e326417
feat: 카카오 로그인 구현+s3서버 세팅 (#31)
hoeun0723 Apr 29, 2024
d6645e8
Merge branch 'main' into develop
hoeun0723 Apr 29, 2024
58aa184
fix: build.gradle 파일 최신화
Apr 29, 2024
acb9ade
Feat/#30 slowtype save api (#32)
jms0324 Apr 30, 2024
a776f79
fix: bootstarp 파일이 없는 오류 해결
Apr 30, 2024
4219070
Merge branch 'develop' of https://github.com/KAU2024-SANHAK/SANHAK_Se…
Apr 30, 2024
4d614a2
refactor: 카카오 인가코드 프론트측엫서 받아오는 방식으로 수정 (#36)
hoeun0723 Apr 30, 2024
6364cfb
[refactor] kakao login 기존 프론트가 토큰 가져오는 방식으로 수정 (#38)
hoeun0723 May 2, 2024
f17b08e
Merge branch 'main' into develop
hoeun0723 May 2, 2024
d2b6f8c
Refactor/#40 slow type diary retry (#41)
jms0324 May 4, 2024
8debb90
Refactor/#40 slow type diary retry (#44)
jms0324 May 4, 2024
67f46db
Merge branch 'main' into develop
jms0324 May 4, 2024
4fcf436
Refactor/#46 choose diary type api retry (#47)
jms0324 May 5, 2024
4f39a5e
feeling별 diary list조회 api수정 (#50)
jms0324 May 6, 2024
c6cacf6
refactor:content api코드수정및 responseDto 수정 (#53)
jms0324 May 7, 2024
cc50f3d
Refactor/#55 list calendar api retry (#56)
jms0324 May 9, 2024
0ace7b3
Merge branch 'main' into develop
jms0324 May 9, 2024
e62b550
refactor:content api에서 advice와 feeling값 null값허용 (#59)
jms0324 May 9, 2024
b2fb077
Refactor/#58 diary content api exception retry (#61)
jms0324 May 9, 2024
769fe10
Merge branch 'main' into develop
jms0324 May 9, 2024
95f2c16
FeelingListResponseDto의 imageUrl필드추가 (#64)
jms0324 May 11, 2024
564a19b
CalendarDiaryResponseDto의 ImageUrl필드추가 (#67)
jms0324 May 11, 2024
9b528dd
feeling list,slowtype생성 request오류 추가
jms0324 May 12, 2024
3e479e1
refactor:ZonedDatetime추가 (#70)
jms0324 May 13, 2024
82f8c08
Merge branch 'main' into develop
jms0324 May 13, 2024
eba831e
refactor: imageFile 안줘도 가능하게 코드수정 (#73)
jms0324 May 14, 2024
93f26f5
feat: 수정 api구현 (#76)
jms0324 May 14, 2024
6f917c0
refactor: logging추가 (#80)
jms0324 May 14, 2024
fc6e4df
Merge branch 'main' into develop
jms0324 May 14, 2024
c59d21f
refactor-requestpart대신 modelattribute (#83)
jms0324 May 15, 2024
97256df
refactor:s3파일중복체크후 업로드하는 로직 추가 (#86)
jms0324 May 16, 2024
df5c542
Merge branch 'main' into develop
jms0324 May 16, 2024
0a7cd4d
feat: 일기삭제api구현 및 에러타입추가,slowtypeapi요청값대문자로수정 (#88)
jms0324 May 16, 2024
4fd5245
refactor:imageurl LONGTEXT로변경
jms0324 May 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/main/java/org/kau/kkoolbeeServer/S3/S3UploaderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -25,16 +28,38 @@ 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);
amazonS3Client.putObject(new PutObjectRequest(bucketName, fileName, convertedFile));
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());
Expand All @@ -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);

}
}*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -214,7 +211,7 @@ public ResponseEntity<ApiResponse<?>> createSlowTypeDiary(@RequestPart("imageurl
}
}*/
@PostMapping("/api/diary/create/slow")
public ResponseEntity<ApiResponse<?>> createSlowTypeDiary(@RequestHeader(value = "Authorization") String authHeader, @RequestPart(value = "imageurl",required = false)MultipartFile image,
public ResponseEntity<ApiResponse<?>> createSlowTypeDiary(@RequestHeader(value = "Authorization") String authHeader, @RequestPart(value = "imageUrl",required = false)MultipartFile image,
@RequestPart(value = "diaryTitle") String diaryTitle,
@RequestPart(value = "diaryContent") String diaryContent){

Expand Down Expand Up @@ -376,6 +373,34 @@ public ResponseEntity<?> updateDiary(



}

@DeleteMapping("api/diary/delete")
public ResponseEntity<?>deleteDiary(@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));








}


Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ public class SlowTypeCreateResponseDto {
private Long diaryId;
private String diaryContent;
private String diaryTitle;
private String imageurl;
private String imageUrl;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);



}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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의 일기는 이미 존재하지 않습니다.");
}



//이부분추가


Expand Down
Loading