Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
jjunjji committed Sep 30, 2023
2 parents e673047 + 972d123 commit 3644a0b
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ public enum BaseResponseStatus {
ALREADY_DELETE_BOARD(false, 4020, "이미 삭제된 게시물입니다."),


LOCATION_ERROR(false, 4021, "위치정보에 오류가 발생했습니다."),
LOCATION_TRUE_ERROR(false, 4021, "indicate_location이 true이면 위,경도는 0이면 안됩니다."),
MESSAGEDURATION_ERROR(false, 4022, "메세지 지속시간에 오류가 발생했습니다."),
LOCATION_FALSE_ERROR(false, 4023, "indicate_location이 false이면 위,경도는 0이어야 합니다."),

NON_EXIST_CHARACTER_VALUE(false, 4031, "캐릭터 생성에 필요한 값이 모두 입력되지 않았습니다."),

Expand Down
149 changes: 79 additions & 70 deletions src/main/java/com/back/handsUp/service/BoardService.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public BoardDto.SingleBoardRes boardViewByIdx(Principal principal, Long boardIdx

//조회하는 게시물
Optional<Board> optionalBoard = this.boardRepository.findByBoardIdx(boardIdx);
if(optionalBoard.isEmpty()){
if (optionalBoard.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDIDX);
}
Board board = optionalBoard.get();
Expand All @@ -75,9 +75,9 @@ public BoardDto.SingleBoardRes boardViewByIdx(Principal principal, Long boardIdx
Optional<BoardUser> optionalBoardUserEntity = boardUserRepository.findBoardUserByBoardIdxAndUserIdx(board, user);

String didLike;
if(optionalBoardUserEntity.isEmpty()){
if (optionalBoardUserEntity.isEmpty()) {
didLike = "false";
}else {
} else {
BoardUser boardUserEntity = optionalBoardUserEntity.get();
didLike = boardUserEntity.getStatus();
}
Expand All @@ -89,14 +89,14 @@ public BoardDto.SingleBoardRes boardViewByIdx(Principal principal, Long boardIdx

//게시글 작성자
Optional<User> optionalBoardUser = this.boardUserRepository.findUserIdxByBoardIdxAndStatus(boardIdx, "WRITE");
if(optionalBoardUser.isEmpty()){
if (optionalBoardUser.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDUSERIDX);
}
User boardUser = optionalBoardUser.get();

//태그
Optional<Tag> optionalTag = this.boardTagRepository.findTagIdxByBoardIdx(boardIdx);
if(optionalTag.isEmpty()){
if (optionalTag.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_TAG_VALUE);
}
Tag tag = optionalTag.get();
Expand Down Expand Up @@ -161,25 +161,28 @@ public BoardDto.GetBoardMapAndSchool showBoardMapList(Principal principal) throw

List<BoardDto.GetBoardMap> getBoardsMapList = new ArrayList<>();

for(BoardDto.BoardWithTag b : getBoards) {
for (BoardDto.BoardWithTag b : getBoards) {

Optional<String> opTagName = this.boardTagRepository.findTagNameByBoard(b.getBoard());
String tagName;
if (opTagName.isEmpty()) {
tagName = null;
} else tagName = opTagName.get();

BoardDto.GetBoardMap getBoardMap = BoardDto.GetBoardMap.builder()
.boardIdx(b.getBoard().getBoardIdx())
.nickname(b.getNickname())
.character(b.getCharacter())
.latitude(b.getBoard().getLatitude())
.longitude(b.getBoard().getLongitude())
.createdAt(b.getBoard().getCreatedAt())
.tag(tagName)
.build();
//위치 정보 true인 경우만 조회 가능
if (b.getBoard().getIndicateLocation().equals("true")) {
BoardDto.GetBoardMap getBoardMap = BoardDto.GetBoardMap.builder()
.boardIdx(b.getBoard().getBoardIdx())
.nickname(b.getNickname())
.character(b.getCharacter())
.latitude(b.getBoard().getLatitude())
.longitude(b.getBoard().getLongitude())
.createdAt(b.getBoard().getCreatedAt())
.tag(tagName)
.build();

getBoardsMapList.add(getBoardMap);
getBoardsMapList.add(getBoardMap);
}
}

BoardDto.GetBoardMapAndSchool getBoardMapAndSchool = BoardDto.GetBoardMapAndSchool.builder()
Expand Down Expand Up @@ -211,7 +214,7 @@ public List<BoardDto.BoardWithTag> getBoards(Principal principal, School school)

LocalDateTime currentTime = LocalDateTime.now();

for (BoardUser b: getSchoolBoards) {
for (BoardUser b : getSchoolBoards) {
//시간 만료 체크
Duration timeCheck = Duration.between(b.getBoardIdx().getCreatedAt(), currentTime);
// log.info("timecheck={}",timeCheck.getSeconds());
Expand All @@ -226,9 +229,10 @@ public List<BoardDto.BoardWithTag> getBoards(Principal principal, School school)

return getBoards;
}

//게시물 조회 리스트,지도 중복 코드 - 태그, 캐릭터, 하트 관련
private void addGetBoards(User user, List<BoardDto.BoardWithTag> getBoards, List<BoardUser> nonBlockBoards) {
for(BoardUser b1: nonBlockBoards){
for (BoardUser b1 : nonBlockBoards) {

Character character = b1.getUserIdx().getCharacter();
CharacterDto.GetCharacterInfo characterInfo = new CharacterDto.GetCharacterInfo(character.getEye(),
Expand All @@ -242,14 +246,14 @@ private void addGetBoards(User user, List<BoardDto.BoardWithTag> getBoards, List
Optional<String> opTagName = this.boardTagRepository.findTagNameByBoard(shownBoard);
if (opTagName.isEmpty()) {
tagName = null;
}else tagName = opTagName.get();
} else tagName = opTagName.get();

//like 확인
Optional<BoardUser> opBoard = boardUserRepository.findBoardUserByBoardIdxAndUserIdx(shownBoard, user);
String didLike;
if(opBoard.isEmpty()){
if (opBoard.isEmpty()) {
didLike = "false";
}else {
} else {
BoardUser boardUserEntity = opBoard.get();
didLike = boardUserEntity.getStatus();
}
Expand Down Expand Up @@ -341,8 +345,9 @@ public String likeBoard(Principal principal, Long boardIdx) throws BaseException
return "해당 게시글에 좋아요를 눌렀습니다.";

}

//내 게시물 조회 페이징
public BoardDto.MyBoard viewMyBoard(Principal principal, Pageable pageable) throws BaseException{
public BoardDto.MyBoard viewMyBoard(Principal principal, Pageable pageable) throws BaseException {

Optional<User> optionalUser = userRepository.findByEmailAndStatus(principal.getName(), "ACTIVE");
if (optionalUser.isEmpty()) {
Expand All @@ -363,8 +368,6 @@ public BoardDto.MyBoard viewMyBoard(Principal principal, Pageable pageable) thro
}




public void addBoard(Principal principal, BoardDto.GetBoardInfo boardInfo) throws BaseException {

checkLocationError(boardInfo);
Expand All @@ -377,15 +380,15 @@ public void addBoard(Principal principal, BoardDto.GetBoardInfo boardInfo) throw
.location(boardInfo.getLocation())
.messageDuration(boardInfo.getMessageDuration())
.build();
try{
try {
this.boardRepository.save(boardEntity);
setTags(boardInfo, boardEntity);
} catch (Exception e) {
throw new BaseException(DATABASE_INSERT_ERROR);
}

Optional<User> optional = this.userRepository.findByEmailAndStatus(principal.getName(), "ACTIVE");
if(optional.isEmpty()){
if (optional.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_EMAIL);
}
User userEntity = optional.get();
Expand All @@ -394,7 +397,7 @@ public void addBoard(Principal principal, BoardDto.GetBoardInfo boardInfo) throw
.userIdx(userEntity)
.status("WRITE")
.build();
try{
try {
this.boardUserRepository.save(boardUserEntity);
} catch (Exception e) {
throw new BaseException(DATABASE_INSERT_ERROR);
Expand All @@ -404,33 +407,33 @@ public void addBoard(Principal principal, BoardDto.GetBoardInfo boardInfo) throw


//게시물 삭제
public void deleteBoard(Principal principal, Long boardIdx) throws BaseException{
public void deleteBoard(Principal principal, Long boardIdx) throws BaseException {
Optional<User> optional = this.userRepository.findByEmailAndStatus(principal.getName(), "ACTIVE");
if(optional.isEmpty()){
if (optional.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_USERIDX);
}
User userEntity = optional.get();

Optional<Board> myBoards = this.boardRepository.findByBoardIdx(boardIdx);
if(myBoards.isEmpty()){
if (myBoards.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDIDX);
}
Board myBoardsEntity = myBoards.get();

Optional<BoardUser> boardUser = this.boardUserRepository.findBoardUserByBoardIdxAndStatus(myBoardsEntity, "WRITE").stream().findFirst();

//게시물이 존재하는지 체크
if(boardUser.isEmpty()){
if (boardUser.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARD_LIST);
}

//해당 게시물을 로그인한 유저가 작성했는지 체크
if(!Objects.equals(boardUser.get().getUserIdx().getUserIdx(), userEntity.getUserIdx())){
if (!Objects.equals(boardUser.get().getUserIdx().getUserIdx(), userEntity.getUserIdx())) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDUSERIDX);
}

//이미 삭제된 게시물인지 체크
if(myBoardsEntity.getStatus().equals("DELETE")){
if (myBoardsEntity.getStatus().equals("DELETE")) {
throw new BaseException(BaseResponseStatus.ALREADY_DELETE_BOARD);
}

Expand All @@ -440,51 +443,56 @@ public void deleteBoard(Principal principal, Long boardIdx) throws BaseException

}

public void patchBoard(Principal principal, Long boardIdx, BoardDto.GetBoardInfo boardInfo) throws BaseException{
public void patchBoard(Principal principal, Long boardIdx, BoardDto.GetBoardInfo boardInfo) throws BaseException {
checkLocationError(boardInfo);

Optional<Board> optional = this.boardRepository.findByBoardIdx(boardIdx);
if(optional.isEmpty()){
if (optional.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDIDX);
}
Board boardEntity = optional.get();


Optional<User> optional1 = this.userRepository.findByEmailAndStatus(principal.getName(), "ACTIVE");
if(optional1.isEmpty()){
if (optional1.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_EMAIL);
}
User userEntity = optional1.get();

Optional<BoardUser> optionalBoardUser = this.boardUserRepository.findBoardUserByBoardIdxAndUserIdx(boardEntity, userEntity);
if(optionalBoardUser.isEmpty()){
if (optionalBoardUser.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_BOARDUSERIDX);
}

boardEntity.changeBoard(boardInfo.getContent(), boardInfo.getLatitude(), boardInfo.getLongitude(), boardInfo.getLocation(), boardInfo.getIndicateLocation(), boardInfo.getMessageDuration());
try{
try {
this.boardRepository.save(boardEntity);
} catch (Exception e) {
throw new BaseException(DATABASE_INSERT_ERROR);
}

List<BoardTag> boardTagEntityList = this.boardTagRepository.findAllByBoardIdx(boardEntity);
for(BoardTag boardTag : boardTagEntityList){
for (BoardTag boardTag : boardTagEntityList) {
boardTag.changeStatus("INACTIVE");
}
try{
try {
setTags(boardInfo, boardEntity);
} catch (Exception e) {
throw new BaseException(DATABASE_INSERT_ERROR);
}
}

private void checkLocationError(BoardDto.GetBoardInfo boardInfo) throws BaseException {
if(boardInfo.getIndicateLocation().equals("true") && boardInfo.getLatitude() == 0.0 && boardInfo.getLongitude() == 0.0){
throw new BaseException(BaseResponseStatus.LOCATION_ERROR);
if (boardInfo.getIndicateLocation().equals("true") && boardInfo.getLatitude() == 0.0 && boardInfo.getLongitude() == 0.0) {
throw new BaseException(LOCATION_TRUE_ERROR);
}

//위치 정보 false면 latitude, longitude는 무조건 0
if (boardInfo.getIndicateLocation().equals("false") && boardInfo.getLatitude() > 0 && boardInfo.getLongitude() > 0) {
throw new BaseException(LOCATION_FALSE_ERROR);
}

if(boardInfo.getMessageDuration()<1 || boardInfo.getMessageDuration()>48){
if (boardInfo.getMessageDuration() < 1 || boardInfo.getMessageDuration() > 48) {
throw new BaseException(BaseResponseStatus.MESSAGEDURATION_ERROR);
}
}
Expand Down Expand Up @@ -543,37 +551,37 @@ public String blockBoard(Principal principal, Long boardIdx) throws BaseExceptio
}

private void setTags(BoardDto.GetBoardInfo boardInfo, Board boardEntity) {
Optional<Tag> tagEntity = this.tagRepository.findTagByName(boardInfo.getTag());
Tag targetTag;
Optional<Tag> tagEntity = this.tagRepository.findTagByName(boardInfo.getTag());
Tag targetTag;

if(tagEntity.isEmpty()){
targetTag = Tag.builder()
.name(boardInfo.getTag())
.build();
this.tagRepository.save(targetTag);
} else {
targetTag = tagEntity.get();
if (tagEntity.isEmpty()) {
targetTag = Tag.builder()
.name(boardInfo.getTag())
.build();
this.tagRepository.save(targetTag);
} else {
targetTag = tagEntity.get();

}
}

Optional<BoardTag> optional = this.boardTagRepository.findByBoardIdxAndTagIdx(boardEntity, targetTag);
if(optional.isEmpty()){
BoardTag boardTagEntity = BoardTag.builder()
.boardIdx(boardEntity)
.tagIdx(targetTag)
.build();
this.boardTagRepository.save(boardTagEntity);
Optional<BoardTag> optional = this.boardTagRepository.findByBoardIdxAndTagIdx(boardEntity, targetTag);
if (optional.isEmpty()) {
BoardTag boardTagEntity = BoardTag.builder()
.boardIdx(boardEntity)
.tagIdx(targetTag)
.build();
this.boardTagRepository.save(boardTagEntity);

} else{
BoardTag boardTagEntity = optional.get();
boardTagEntity.changeStatus("ACTIVE");
}
} else {
BoardTag boardTagEntity = optional.get();
boardTagEntity.changeStatus("ACTIVE");
}
}

//받은 하트 목록 조회
public BoardDto.TotalReceivedLikeRes fetchReceivedLikePagesBy (Principal principal, int size, Long lastIdx) throws BaseException {
public BoardDto.TotalReceivedLikeRes fetchReceivedLikePagesBy(Principal principal, int size, Long lastIdx) throws BaseException {
Optional<User> optional = this.userRepository.findByEmailAndStatus(principal.getName(), "ACTIVE");
if(optional.isEmpty()){
if (optional.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_USERIDX);
}
User user = optional.get();
Expand All @@ -582,12 +590,12 @@ public BoardDto.TotalReceivedLikeRes fetchReceivedLikePagesBy (Principal princip

//페이징 처리
Page<BoardUser> boardUsers = fetchReceivedLikes(size, lastIdx, boardList);
if(boardUsers.getContent().isEmpty()){
if (boardUsers.getContent().isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_LIKE_BOARDS);
}
//dto 생성
List<BoardDto.ReceivedLikeInfo> receivedLikeInfoList = new ArrayList<>();
for(BoardUser boardUser: boardUsers.getContent()){
for (BoardUser boardUser : boardUsers.getContent()) {
Character character = boardUser.getUserIdx().getCharacter();
CharacterDto.GetCharacterInfo characterInfo = new CharacterDto.GetCharacterInfo(character.getEye(),
character.getEyeBrow(), character.getGlasses(), character.getNose(), character.getMouth(),
Expand All @@ -613,10 +621,11 @@ public BoardDto.TotalReceivedLikeRes fetchReceivedLikePagesBy (Principal princip
.build();
return receivedLikeRes;
}

//받은 좋아요(하트) 목록 페이징으로 가져오기
private Page<BoardUser> fetchReceivedLikes(int size, Long lastIdx, List<Board> boardList){
private Page<BoardUser> fetchReceivedLikes(int size, Long lastIdx, List<Board> boardList) {
PageRequest pageRequest = PageRequest.of(0, size); //페이지는 0으로 고정, 페이지에 표시되는 개수는 size로 결정
return lastIdx == null? boardUserRepository.findAllByStatusAndBoardIdxInOrderByBoardUserIdxDesc("LIKE", boardList, pageRequest):
return lastIdx == null ? boardUserRepository.findAllByStatusAndBoardIdxInOrderByBoardUserIdxDesc("LIKE", boardList, pageRequest) :
boardUserRepository.findByBoardUserIdxLessThanAndStatusAndBoardIdxInOrderByBoardUserIdxDesc(lastIdx, "LIKE", boardList, pageRequest);
}

Expand Down

0 comments on commit 3644a0b

Please sign in to comment.