Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion src/main/java/com/example/FixLog/config/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) 허용
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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())
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/example/FixLog/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -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, "다른 비밀번호 입력 바랍니다."),
Expand Down
27 changes: 17 additions & 10 deletions src/main/java/com/example/FixLog/service/MainPageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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://fixlogsmwubucket.s3.ap-northeast-2.amazonaws.com/default/DefaulThumnail.png" : image;
System.out.println(imageUrl);
return imageUrl;
}

// 메인페이지 보기
public MainPageResponseDto mainPageView(int sort, int size){
Expand All @@ -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개) 불러오기
Expand All @@ -67,11 +74,11 @@ public MainPageResponseDto mainPageView(int sort, int size){
List<MainPagePostResponseDto> 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()
Expand All @@ -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개)
Expand All @@ -109,11 +116,11 @@ public MainPageResponseDto mainPageFullView(int sort, int page, int size){
List<MainPagePostResponseDto> 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()
Expand Down
45 changes: 33 additions & 12 deletions src/main/java/com/example/FixLog/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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://fixlogsmwubucket.s3.ap-northeast-2.amazonaws.com/default/DefaulThumnail.png" : image;
System.out.println(imageUrl);
return imageUrl;
}

// 게시글 작성하기
@Transactional
Expand Down Expand Up @@ -144,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);
}

Expand All @@ -169,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<Tag> tags = fetchAndValidateTags(newPostRequestDto.getTags());

Expand All @@ -194,6 +213,8 @@ & compareTags(post.getPostTags(), tags)){
}

// 필드 업데이트
validatePost(newPostRequestDto);

post.changeTitle(newPostRequestDto.getPostTitle());
post.changeCoverImage(newPostRequestDto.getCoverImageUrl());
post.changeProblem(newPostRequestDto.getProblem());
Expand Down Expand Up @@ -233,7 +254,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(),
Expand All @@ -253,15 +274,15 @@ 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));
isMarked = currentPost.getBookmarks().stream()
.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;
}
Expand Down