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

feat: 리스트 삭제 API 구현 #83

Merged
merged 2 commits into from
Feb 8, 2024
Merged

feat: 리스트 삭제 API 구현 #83

merged 2 commits into from
Feb 8, 2024

Conversation

kdkdhoho
Copy link
Collaborator

@kdkdhoho kdkdhoho commented Feb 8, 2024

Description

  • 리스트 삭제 API를 구현했습니다.
    • 해당 리스트에 속한 아이템의 사진을 지우는 로직은 ImageService에 만들어두었습니다.
      GPT랑 짰는데 제대로 동작할지는 모르겠네요...
      S3 전문가 정수님이 한번 봐주시면 감사하겠습니다 😅
    • Item, Labels는 cascade 옵션으로 제거됩니다.
    • Collaborator, Comment, Reply는 따로 삭제 처리 했습니다.

Relation Issues

@kdkdhoho kdkdhoho added the 기능 label Feb 8, 2024
@kdkdhoho kdkdhoho self-assigned this Feb 8, 2024
@kdkdhoho kdkdhoho requested a review from pparkjs as a code owner February 8, 2024 07:00
@kdkdhoho kdkdhoho linked an issue Feb 8, 2024 that may be closed by this pull request
4 tasks
Copy link
Collaborator

@pparkjs pparkjs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파일 삭제 구현 제가 직접 테스트 해서 안되는 부분 삭제하고 좋은 방안 제안해 놓았습니다.
리스트 삭제 API 구현하느라 수고하셨습니다! 변경사항 변경해주시고 merge해주세요!

Comment on lines 206 to 221
@Async
public void deleteAllOfListImages(Long listId) {
String path = "/" + getCurrentProfile() + "/lists_item/" + listId + "/";

ListObjectsV2Result listObjects;
do {
listObjects = amazonS3.listObjectsV2(bucket, path);
for (S3ObjectSummary object : listObjects.getObjectSummaries()) {
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey()));
}
listObjects.setContinuationToken(listObjects.getNextContinuationToken());
} while (listObjects.isTruncated());

try {
amazonS3.deleteObject(bucket, path);
} catch (AmazonServiceException e) {
throw new CustomException(S3_DELETE_OBJECTS_EXCEPTION);
}
}
Copy link
Collaborator

@pparkjs pparkjs Feb 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로직을 실제로 실행 시켜봤습니다.
동호님이 작성하신 로직은 s3 bucket에 해당하는 폴더안에 있는 모든 파일을 listObjects에 가져와 반복문으로 해당 파일을 삭제 시켜주는 것 같습니다.

한가지 문제는 path에 맨앞에 /를 제외시켜야한다는 점입니다.
또한 해당 폴더 안에 모든 요소를 삭제한경우 폴더는 비워져있어 s3에서 자체적으로 폴더를 지워버리는것을 확인했습니다.
그래서 해당 try catch로 묶여있는 폴더 제거 로직은 없어도 될 거 같습니다.
image

아래 코드처럼 하시는게 더 깔끔하고 좋을 거 같네요!
그리고 맨 아래에 있는 메서드는 폴더안에 파일을 전체 삭제안하고 개별 삭제를 해야하는 경우 사용하시면 좋을 거 같아서 참고하라고 적어놓습니다!! 맨 아래에 있는 메서드는 폴더로 접근 못하고 파일 풀네임이 필요하단점 ! (테스트 해보니 그럼)

Suggested change
@Async
public void deleteAllOfListImages(Long listId) {
String path = "/" + getCurrentProfile() + "/lists_item/" + listId + "/";
ListObjectsV2Result listObjects;
do {
listObjects = amazonS3.listObjectsV2(bucket, path);
for (S3ObjectSummary object : listObjects.getObjectSummaries()) {
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey()));
}
listObjects.setContinuationToken(listObjects.getNextContinuationToken());
} while (listObjects.isTruncated());
try {
amazonS3.deleteObject(bucket, path);
} catch (AmazonServiceException e) {
throw new CustomException(S3_DELETE_OBJECTS_EXCEPTION);
}
}
@Async
public void deleteAllOfListImages(Long listId) {
String path = getCurrentProfile() + "/lists_item/" + listId + "/";
try {
deleteAllObjectsInPath(path);
} catch (AmazonServiceException e) {
throw new CustomException(ErrorCode.S3_DELETE_OBJECTS_EXCEPTION);
}
}
private void deleteAllObjectsInPath(String path) {
ListObjectsV2Result listObjects;
do {
listObjects = amazonS3.listObjectsV2(bucket, path);
for (S3ObjectSummary object : listObjects.getObjectSummaries()) {
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey()));
}
listObjects.setContinuationToken(listObjects.getNextContinuationToken());
} while (listObjects.isTruncated());
}
public void deleteFile(Long listId) throws IOException {
String path = "local/lists_item/8/9af94837-fe02-4cc7-a1df-a445be84d3bf.png";
try {
amazonS3.deleteObject(bucket, path);
} catch (AmazonServiceException e) {
throw new CustomException(ErrorCode.S3_DELETE_OBJECTS_EXCEPTION);
}
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트.. 제가 해봤어야 했는데 대신해주셔서 감사해요 🥲
역시 S3 장인이시군요 👍

@kdkdhoho kdkdhoho merged commit 03a0e7d into dev Feb 8, 2024
1 check passed
@kdkdhoho kdkdhoho deleted the feat/62 branch February 8, 2024 12:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

리스트 삭제 API 구현
2 participants