From c4bb590e3f5f7a130e993ae27491af1bb52d2145 Mon Sep 17 00:00:00 2001 From: chae_1 <129128205+sungchaewon@users.noreply.github.com> Date: Sun, 22 Jun 2025 19:33:51 +0900 Subject: [PATCH 1/5] Update WebConfig.java --- src/main/java/com/example/FixLog/config/WebConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/FixLog/config/WebConfig.java b/src/main/java/com/example/FixLog/config/WebConfig.java index 3da71a9..00b5a09 100644 --- a/src/main/java/com/example/FixLog/config/WebConfig.java +++ b/src/main/java/com/example/FixLog/config/WebConfig.java @@ -10,7 +10,7 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 모든 경로에 대해 - .allowedOriginPatterns("https://fixlog.netlify.app", "http://localhost:3000") // 모든 도메인 허용 (개발용) → 배포 시 정확한 프론트 주소로 수정 권장 + .allowedOriginPatterns("*") // 모든 도메인 허용 (개발용) → 배포 시 정확한 프론트 주소로 수정 권장 .allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS") .allowedHeaders("*") .allowCredentials(true); // 인증정보(쿠키, Authorization) 허용 From e7d0d4a5c412eedb467e42bdcd698c90cffca100 Mon Sep 17 00:00:00 2001 From: youngseo22 Date: Mon, 23 Jun 2025 11:20:25 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix(image)=20:=20#97=20-=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FixLog/service/MainPageService.java | 27 ++++++++++++------- .../example/FixLog/service/PostService.java | 19 ++++++++----- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/example/FixLog/service/MainPageService.java b/src/main/java/com/example/FixLog/service/MainPageService.java index 3b27b2d..cdc1ec5 100644 --- a/src/main/java/com/example/FixLog/service/MainPageService.java +++ b/src/main/java/com/example/FixLog/service/MainPageService.java @@ -27,13 +27,20 @@ public MainPageService(PostRepository postRepository, MemberService memberServic this.memberService = memberService; } - // 이미지 null일 때 default 사진으로 변경 (프로필 사진, - public String getDefaultImage(String image){ + // 이미지 null일 때 default 사진으로 변경 - 프로필 사진 + public String getDefaultProfile(String image){ String imageUrl = (image == null || image.isBlank()) ? "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png" : image; System.out.println(imageUrl); return imageUrl; } + // 이미지 null일 때 default 사진으로 변경 - 썸네일 + public String getDefaultCover(String image){ + String imageUrl = (image == null || image.isBlank()) + ? "https://core-cdn-fe.toss.im/image/optimize/?src=https://blog-cdn.tosspayments.com/wp-content/uploads/2021/08/28011146/semo9.png?&w=3840&q=75" : image; + System.out.println(imageUrl); + return imageUrl; + } // 메인페이지 보기 public MainPageResponseDto mainPageView(int sort, int size){ @@ -44,9 +51,9 @@ public MainPageResponseDto mainPageView(int sort, int size){ if (optionalMember.isPresent()) { Member member = optionalMember.get(); String imageUrl = member.getProfileImageUrl(); - profileImageUrl = getDefaultImage(imageUrl); + profileImageUrl = getDefaultProfile(imageUrl); } else { - profileImageUrl = "https://example.com/default-cover-image.png"; // 비로그인 기본 이미지 + profileImageUrl = "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png"; // 비로그인 기본 이미지 } // 페이지 (글 12개) 불러오기 @@ -67,11 +74,11 @@ public MainPageResponseDto mainPageView(int sort, int size){ List postList = posts.stream() .map(post -> new MainPagePostResponseDto( post.getPostTitle(), - getDefaultImage(post.getCoverImage()), + getDefaultCover(post.getCoverImage()), post.getPostTags().stream() .map(postTag -> postTag.getTagId().getTagName()) .collect(Collectors.toList()), - getDefaultImage(post.getUserId().getProfileImageUrl()), + getDefaultProfile(post.getUserId().getProfileImageUrl()), post.getUserId().getNickname(), post.getCreatedAt().toLocalDate(), post.getPostLikes().size() @@ -90,9 +97,9 @@ public MainPageResponseDto mainPageFullView(int sort, int page, int size){ if (optionalMember.isPresent()) { Member member = optionalMember.get(); String imageUrl = member.getProfileImageUrl(); - profileImageUrl = getDefaultImage(imageUrl); + profileImageUrl = getDefaultProfile(imageUrl); } else { - profileImageUrl = "https://example.com/default-cover-image.png"; // 비로그인 기본 이미지 + profileImageUrl = "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png"; // 비로그인 기본 이미지 } // 페이지 설정 (한 페이지당 12개) @@ -109,11 +116,11 @@ public MainPageResponseDto mainPageFullView(int sort, int page, int size){ List postList = postPage.stream() .map(post -> new MainPagePostResponseDto( post.getPostTitle(), - getDefaultImage(post.getCoverImage()), + getDefaultCover(post.getCoverImage()), post.getPostTags().stream() .map(postTag -> postTag.getTagId().getTagName()) .collect(Collectors.toList()), - getDefaultImage(post.getUserId().getProfileImageUrl()), + getDefaultProfile(post.getUserId().getProfileImageUrl()), post.getUserId().getNickname(), post.getCreatedAt().toLocalDate(), post.getPostLikes().size() diff --git a/src/main/java/com/example/FixLog/service/PostService.java b/src/main/java/com/example/FixLog/service/PostService.java index 6970fe5..8aeccc1 100644 --- a/src/main/java/com/example/FixLog/service/PostService.java +++ b/src/main/java/com/example/FixLog/service/PostService.java @@ -20,9 +20,9 @@ import com.example.FixLog.repository.post.PostRepository; import com.example.FixLog.repository.tag.TagRepository; import jakarta.transaction.Transactional; -import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; @@ -55,13 +55,20 @@ public PostService(PostRepository postRepository, PostLikeRepository postLikeRep this.s3Service = s3Service; } - // 이미지 null일 때 default 사진으로 변경 (프로필 사진, - public String getDefaultImage(String image){ + // 이미지 null일 때 default 사진으로 변경 - 프로필 사진 + public String getDefaultProfile(String image){ String imageUrl = (image == null || image.isBlank()) ? "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png" : image; System.out.println(imageUrl); return imageUrl; } + // 이미지 null일 때 default 사진으로 변경 - 썸네일 + public String getDefaultCover(String image){ + String imageUrl = (image == null || image.isBlank()) + ? "https://core-cdn-fe.toss.im/image/optimize/?src=https://blog-cdn.tosspayments.com/wp-content/uploads/2021/08/28011146/semo9.png?&w=3840&q=75" : image; + System.out.println(imageUrl); + return imageUrl; + } // 게시글 작성하기 @Transactional @@ -233,7 +240,7 @@ public PostResponseDto viewPost(Long postId){ currentPost.getUserId().getUserId(), currentPost.getUserId().getNickname(), currentPost.getPostTitle(), - getDefaultImage(currentPost.getCoverImage()), + getDefaultCover(currentPost.getCoverImage()), currentPost.getProblem(), currentPost.getErrorMessage(), currentPost.getEnvironment(), @@ -253,7 +260,7 @@ public PostResponseDto viewPost(Long postId){ Member member = optionalMember.get(); nickname = member.getNickname(); String imageUrl = member.getProfileImageUrl(); - profileImageUrl = getDefaultImage(imageUrl); + profileImageUrl = getDefaultProfile(imageUrl); isLiked = currentPost.getPostLikes().stream() .anyMatch(postLike -> postLike.getUserId().equals(member)); @@ -261,7 +268,7 @@ public PostResponseDto viewPost(Long postId){ .anyMatch(bookmark -> bookmark.getFolderId().getUserId().equals(member)); } else { nickname = "로그인하지 않았습니다."; - profileImageUrl = "https://example.com/default-cover-image.png"; // 비로그인 기본 이미지 + profileImageUrl = "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png"; // 비로그인 기본 이미지 isLiked = false; isMarked = false; } From 7be13b5a10ce7e370f9b4f8813a2778f712868ac Mon Sep 17 00:00:00 2001 From: youngseo22 Date: Mon, 23 Jun 2025 11:23:58 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix(eidt=20post)=20:=20=ED=95=84=EC=88=98?= =?UTF-8?q?=20=ED=95=AD=EB=AA=A9=20=EC=9E=91=EC=84=B1=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?,=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=9E=91=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EB=B3=B8=EC=9D=B8=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/FixLog/exception/ErrorCode.java | 1 + .../example/FixLog/service/PostService.java | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/FixLog/exception/ErrorCode.java b/src/main/java/com/example/FixLog/exception/ErrorCode.java index db86c04..d1eeb1a 100644 --- a/src/main/java/com/example/FixLog/exception/ErrorCode.java +++ b/src/main/java/com/example/FixLog/exception/ErrorCode.java @@ -24,6 +24,7 @@ public enum ErrorCode { TAG_NOT_FOUND(HttpStatus.NOT_FOUND, "없는 태그 번호입니다."), SORT_NOT_EXIST(HttpStatus.BAD_REQUEST, "사용할 수 없는 정렬입니다."), INVALID_PASSWORD(HttpStatus.UNAUTHORIZED, "비밀번호가 일치하지 않습니다."), + POST_UPDATE_FORBIDDEN(HttpStatus.BAD_REQUEST, "본인 게시글만 수정할 수 있습니다."), REQUIRED_TAGS_MISSING(HttpStatus.BAD_REQUEST, "태그를 선택해주세요."), REQUIRED_CONTENT_MISSING(HttpStatus.BAD_REQUEST, "필수 본문이 입력되지 않았습니다."), SAME_AS_OLD_PASSWORD(HttpStatus.BAD_REQUEST, "다른 비밀번호 입력 바랍니다."), diff --git a/src/main/java/com/example/FixLog/service/PostService.java b/src/main/java/com/example/FixLog/service/PostService.java index 8aeccc1..797ae3d 100644 --- a/src/main/java/com/example/FixLog/service/PostService.java +++ b/src/main/java/com/example/FixLog/service/PostService.java @@ -151,15 +151,21 @@ else if (categories.size() > 1) // 게시글 필수 항목 다 작성했는지 private void validatePost(PostRequestDto postRequestDto){ - if (postRequestDto.getPostTitle().isBlank() | postRequestDto.getProblem().isBlank() - | postRequestDto.getErrorMessage().isBlank() | postRequestDto.getEnvironment().isBlank() - | postRequestDto.getReproduceCode().isBlank() | postRequestDto.getSolutionCode().isBlank()) + if (!StringUtils.hasText(postRequestDto.getPostTitle()) + || !StringUtils.hasText(postRequestDto.getProblem()) + || !StringUtils.hasText(postRequestDto.getErrorMessage()) + || !StringUtils.hasText(postRequestDto.getEnvironment()) + || !StringUtils.hasText(postRequestDto.getReproduceCode()) + || !StringUtils.hasText(postRequestDto.getSolutionCode())) throw new CustomException(ErrorCode.REQUIRED_CONTENT_MISSING); } private void validatePost(NewPostRequestDto newPostRequestDto){ - if (newPostRequestDto.getPostTitle().isBlank() | newPostRequestDto.getProblem().isBlank() - | newPostRequestDto.getErrorMessage().isBlank() | newPostRequestDto.getEnvironment().isBlank() - | newPostRequestDto.getReproduceCode().isBlank() | newPostRequestDto.getSolutionCode().isBlank()) + if (!StringUtils.hasText(newPostRequestDto.getPostTitle()) + || !StringUtils.hasText(newPostRequestDto.getProblem()) + || !StringUtils.hasText(newPostRequestDto.getErrorMessage()) + || !StringUtils.hasText(newPostRequestDto.getEnvironment()) + || !StringUtils.hasText(newPostRequestDto.getReproduceCode()) + || !StringUtils.hasText(newPostRequestDto.getSolutionCode())) throw new CustomException(ErrorCode.REQUIRED_CONTENT_MISSING); } @@ -176,12 +182,18 @@ public String uploadImage(MultipartFile imageFile){ return "![image](" + imageUrl + ")"; } + // 게시글 수정하기 @Transactional public void editPost(Long postId, NewPostRequestDto newPostRequestDto) { Member member = memberService.getCurrentMemberInfo(); Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); + // 게시글 작성자가 본인이 맞는지 + if (!member.getUserId().equals(post.getUserId().getUserId())) { + throw new CustomException(ErrorCode.POST_UPDATE_FORBIDDEN); + } + // 북마크 카테고리별로 선택 제한 두기 List tags = fetchAndValidateTags(newPostRequestDto.getTags()); @@ -201,6 +213,8 @@ & compareTags(post.getPostTags(), tags)){ } // 필드 업데이트 + validatePost(newPostRequestDto); + post.changeTitle(newPostRequestDto.getPostTitle()); post.changeCoverImage(newPostRequestDto.getCoverImageUrl()); post.changeProblem(newPostRequestDto.getProblem()); From 7edda349dd6bd01fd58b97316f6d611aa12868fc Mon Sep 17 00:00:00 2001 From: youngseo22 Date: Mon, 23 Jun 2025 12:23:18 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix(coverImage)=20:=20#96=20-=20=EC=8D=B8?= =?UTF-8?q?=EB=84=A4=EC=9D=BC=20=EB=A7=81=ED=81=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/FixLog/service/MainPageService.java | 2 +- src/main/java/com/example/FixLog/service/PostService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/FixLog/service/MainPageService.java b/src/main/java/com/example/FixLog/service/MainPageService.java index cdc1ec5..9c8ff00 100644 --- a/src/main/java/com/example/FixLog/service/MainPageService.java +++ b/src/main/java/com/example/FixLog/service/MainPageService.java @@ -37,7 +37,7 @@ public String getDefaultProfile(String image){ // 이미지 null일 때 default 사진으로 변경 - 썸네일 public String getDefaultCover(String image){ String imageUrl = (image == null || image.isBlank()) - ? "https://core-cdn-fe.toss.im/image/optimize/?src=https://blog-cdn.tosspayments.com/wp-content/uploads/2021/08/28011146/semo9.png?&w=3840&q=75" : image; + ? "https://fixlogsmwubucket.s3.ap-northeast-2.amazonaws.com/default/DefaulThumnail.png" : image; System.out.println(imageUrl); return imageUrl; } diff --git a/src/main/java/com/example/FixLog/service/PostService.java b/src/main/java/com/example/FixLog/service/PostService.java index 797ae3d..720178e 100644 --- a/src/main/java/com/example/FixLog/service/PostService.java +++ b/src/main/java/com/example/FixLog/service/PostService.java @@ -65,7 +65,7 @@ public String getDefaultProfile(String image){ // 이미지 null일 때 default 사진으로 변경 - 썸네일 public String getDefaultCover(String image){ String imageUrl = (image == null || image.isBlank()) - ? "https://core-cdn-fe.toss.im/image/optimize/?src=https://blog-cdn.tosspayments.com/wp-content/uploads/2021/08/28011146/semo9.png?&w=3840&q=75" : image; + ? "https://fixlogsmwubucket.s3.ap-northeast-2.amazonaws.com/default/DefaulThumnail.png" : image; System.out.println(imageUrl); return imageUrl; } From 62124801a849573eaea357a75288e8308aff5860 Mon Sep 17 00:00:00 2001 From: youngseo22 Date: Mon, 23 Jun 2025 13:09:07 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix(image)=20:=20#96=20-=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/post/MyPostPageResponseDto.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/FixLog/dto/post/MyPostPageResponseDto.java b/src/main/java/com/example/FixLog/dto/post/MyPostPageResponseDto.java index e83f70e..49db433 100644 --- a/src/main/java/com/example/FixLog/dto/post/MyPostPageResponseDto.java +++ b/src/main/java/com/example/FixLog/dto/post/MyPostPageResponseDto.java @@ -25,10 +25,19 @@ public class MyPostPageResponseDto { private String nickname; private String profileImageUrl;; - public static String getDefaultImage(String image) { - return (image == null || image.isBlank()) - ? "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png" - : image; + // 이미지 null일 때 default 사진으로 변경 - 프로필 사진 + public static String getDefaultProfile(String image){ + String imageUrl = (image == null || image.isBlank()) + ? "https://fixlog-bucket.s3.ap-northeast-2.amazonaws.com/default/profile.png" : image; + System.out.println(imageUrl); + return imageUrl; + } + // 이미지 null일 때 default 사진으로 변경 - 썸네일 + public static String getDefaultCover(String image){ + String imageUrl = (image == null || image.isBlank()) + ? "https://fixlogsmwubucket.s3.ap-northeast-2.amazonaws.com/default/DefaulThumnail.png" : image; + System.out.println(imageUrl); + return imageUrl; } public static MyPostPageResponseDto from(Post post, int forkCount) { @@ -37,8 +46,8 @@ public static MyPostPageResponseDto from(Post post, int forkCount) { .nickname(post.getUserId().getNickname()) .postTitle(post.getPostTitle()) .postSummary(generateSummary(post.getProblem())) - .imageUrl(getDefaultImage(post.getCoverImage())) - .profileImageUrl(getDefaultImage(post.getUserId().getProfileImageUrl())) + .imageUrl(getDefaultCover(post.getCoverImage())) + .profileImageUrl(getDefaultProfile(post.getUserId().getProfileImageUrl())) .tags(post.getPostTags().stream().map(tag -> tag.getTagId().getTagName()).toList()) .createdAt(post.getCreatedAt()) .likeCount(post.getPostLikes().size())