Skip to content

Commit

Permalink
Merge pull request #51 from UMC5th-bias/feat/#33
Browse files Browse the repository at this point in the history
[FEAT] 성지순례 인증글 작성 api 개발
  • Loading branch information
ppparkta authored Feb 2, 2024
2 parents f6c520f + 3c84e9d commit abf028f
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.favoriteplace.app.service.community.GuestBookQueryService;
import com.favoriteplace.app.service.community.LikedPostService;
import com.favoriteplace.global.util.SecurityUtil;
import com.google.api.Http;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -111,4 +112,15 @@ public ResponseEntity<PostResponseDto.SuccessResponseDto> modifyGuestBookLike(
HttpStatus.OK
);
}

// 성지순례 장소 방문 인증글 작성하기
@PostMapping("/{pilgrimage_id}")
public PostResponseDto.SuccessResponseDto postToPilgrimage(
@PathVariable("pilgrimage_id") Long pilgrimageId,
@RequestPart GuestBookRequestDto.ModifyGuestBookDto data,
@RequestPart(required = false) List<MultipartFile> images
) throws IOException {
Member member = securityUtil.getUser();
return guestBookCommandService.postGuestBook(member, pilgrimageId, data, images);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.favoriteplace.app.domain.Member;
import com.favoriteplace.app.dto.CommonResponseDto;
import com.favoriteplace.app.dto.community.GuestBookRequestDto;
import com.favoriteplace.app.dto.community.PostResponseDto;
import com.favoriteplace.app.dto.travel.PilgrimageDto;
import com.favoriteplace.app.dto.travel.RallyDto;
import com.favoriteplace.app.service.PilgrimageCommandService;
Expand All @@ -13,8 +15,11 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@RestController
Expand Down Expand Up @@ -109,11 +114,4 @@ public CommonResponseDto.RallyResponseDto certifyToPilgrimage(
Member member = securityUtil.getUser();
return pilgrimageCommandService.certifyToPilgrimage(pilgrimageId, member, form);
}

// 성지순례 장소 방문 인증글 작성하기
@PostMapping("/guestbooks/{pilgrimage_id}")
public CommonResponseDto.PostResponseDto postToPilgrimage(@PathVariable("pilgrimage_id")Long pilgrimageId){
Member member = securityUtil.getUser();
return pilgrimageCommandService.postToPilgrimage(pilgrimageId, member);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class HashTag {
private Long id;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "guest_book_id", nullable = false)
@JoinColumn(name = "guest_book_id", nullable = true)
private GuestBook guestBook;

@Column(nullable = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import java.util.List;

public class GuestBookRequestDto {

@Getter
@Builder
@AllArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,5 @@ select count(distinct p.id)
Long findByVisitedCount(@Param("memberId")Long memberId);
List<VisitedPilgrimage> findByPilgrimageAndMemberOrderByCreatedAtDesc(Pilgrimage pilgrimage, Member member);
Long countByMemberIdAndPilgrimageIdIn(Long memberId, List<Long> pilgrimageIds);

}
Original file line number Diff line number Diff line change
Expand Up @@ -119,14 +119,4 @@ private void successVisitedAndPointProcess(Member member, Pilgrimage pilgrimage)
visitedPilgrimageRepository.save(newVisited);
pointHistoryRepository.save(PointHistoryConverter.toPointHistory(member, 15L, PointType.ACQUIRE));
}

/***
* 성지순례 방문 인증글 작성하기
* @param pilgrimageId 성지순례 아이디
* @param member 인증한 사용자
* @return
*/
public CommonResponseDto.PostResponseDto postToPilgrimage(Long pilgrimageId, Member member) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
package com.favoriteplace.app.service.community;
package com.favoriteplace.app.service;

import com.favoriteplace.app.domain.Image;
import com.favoriteplace.app.domain.Member;
import com.favoriteplace.app.domain.community.Comment;
import com.favoriteplace.app.domain.community.GuestBook;
import com.favoriteplace.app.domain.community.HashTag;
import com.favoriteplace.app.domain.community.LikedPost;
import com.favoriteplace.app.domain.travel.Pilgrimage;
import com.favoriteplace.app.domain.travel.VisitedPilgrimage;
import com.favoriteplace.app.dto.CommonResponseDto;
import com.favoriteplace.app.dto.community.GuestBookRequestDto;
import com.favoriteplace.app.repository.GuestBookRepository;
import com.favoriteplace.app.repository.HashtagRepository;
import com.favoriteplace.app.repository.ImageRepository;
import com.favoriteplace.app.repository.LikedPostRepository;
import com.favoriteplace.app.dto.community.PostResponseDto;
import com.favoriteplace.app.repository.*;
import com.favoriteplace.global.exception.ErrorCode;
import com.favoriteplace.global.exception.RestApiException;
import com.favoriteplace.global.gcpImage.ConvertUuidToUrl;
import com.favoriteplace.global.gcpImage.UploadImage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
Expand All @@ -31,6 +34,9 @@ public class GuestBookCommandService {
private final ImageRepository imageRepository;
private final LikedPostRepository likedPostRepository;
private final UploadImage uploadImage;
private final PilgrimageRepository pilgrimageRepository;
private final HashtagRepository hashtagRepository;
private final VisitedPilgrimageRepository visitedPilgrimageRepository;

/**
* 성지순례 인증글 수정
Expand Down Expand Up @@ -98,5 +104,41 @@ private void checkAuthOfGuestBook(Member member, GuestBook guestBook){
}
}

/***
* 성지순례 방문 인증글 작성
* @param pilgrimageId 성지순례 아이디
* @param member 인증한 사용자
* @return
*/
public PostResponseDto.SuccessResponseDto postGuestBook(Member member, Long pilgrimageId, GuestBookRequestDto.ModifyGuestBookDto data, List<MultipartFile> images) throws IOException {
Pilgrimage pilgrimage = pilgrimageRepository
.findById(pilgrimageId).orElseThrow(()->new RestApiException(ErrorCode.PILGRIMAGE_NOT_FOUND));

List<VisitedPilgrimage> visitedPilgrimageList = visitedPilgrimageRepository.findByPilgrimageAndMemberOrderByCreatedAtDesc(pilgrimage, member);

boolean hasVisited = visitedPilgrimageList.stream()
.anyMatch(visitedPilgrimage -> pilgrimageId.equals(visitedPilgrimage.getPilgrimage().getId()));

if (!hasVisited)
throw new RestApiException(ErrorCode.PILGRIMAGE_NOT_CERTIFIED);

GuestBook guestBook = GuestBook.builder()
.member(member)
.pilgrimage(pilgrimage)
.title(data.getTitle())
.content(data.getContent())
.likeCount(0L)
.view(0L)
.build();
GuestBook newGuestBook = guestBookRepository.save(guestBook);
List<HashTag> hashTagList = data.getHashtags().stream().map(hashTag -> {
HashTag newHashTag = HashTag.builder().tagName(hashTag).build();
hashtagRepository.save(newHashTag);
newGuestBook.setHashTag(newHashTag);
return newHashTag;
}).collect(Collectors.toList());
setImageList(newGuestBook, images);
log.info("get image" + newGuestBook.getImages().get(0).getUrl());
return PostResponseDto.SuccessResponseDto.builder().message("인증글 작성에 성공했습니다.").build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public enum ErrorCode {
PILGRIMAGE_NOT_FOUND(HttpStatus.BAD_REQUEST, 3001, "성지순례 정보를 찾을 수 없습니다."),
PILGRIMAGE_ALREADY_CERTIFIED(HttpStatus.BAD_REQUEST, 3002, "인증 후 24시간이 지나야 재인증할 수 있습니다."),
PILGRIMAGE_CAN_NOT_CERTIFIED(HttpStatus.BAD_REQUEST, 3003, "인증 장소와 현재 위치의 거리가 너무 멉니다."),
PILGRIMAGE_NOT_CERTIFIED(HttpStatus.BAD_REQUEST, 3004, "인증글은 인증 후 작성할 수 있습니다."),

//Rally (4000번대)
RALLY_NOT_FOUND(HttpStatus.BAD_REQUEST, 4001, "랠리 정보를 찾을 수 없습니다."),
Expand Down

0 comments on commit abf028f

Please sign in to comment.