🏕️상황
- 원래 게시판 쪽은 내 담당이 아니었지만 사성으로 인하여 게시판도 내가 맡게 되었다.
- 이번에 내가 맡으면서 글 작성만 가능했던 게시판에 이미지 기능도 추가하였다.
🗝️개발 코드
게시글 작성 코드
// BoardService
public ResponseDTO<?> create(final Board entity, final List<MultipartFile> imageList) {
try {
validate(entity);
boardRepository.save(entity); //이미지를 뺀 나머지 컬럼 저장
imageService.upload(imageList, entity.getId()); //이미지 저장 코드
return ResponseDTO.success(boardRepository.findById(entity.getId()));
} catch (Exception e) {
String error = e.getMessage();
return ResponseDTO.fail("Error", error);
}
}
게시글 전체 조회
//BoardRepositoryImpl
@Override
public List<BoardWithImageDTO> findBoardList(Long schId, Long cateNo) {
QBoard qBoard = QBoard.board;
QImage qImage = QImage.image;
List<Tuple> tuples = jpaQueryFactory
.select(qBoard, qImage.imageUrl)
.from(qBoard)
.leftJoin(qImage)
.on(qImage.boardId.eq(qBoard.id))
.where(qBoard.school.id.eq(schId))
.where(qBoard.category.eq(cateNo))
.fetch();
Map<Board, List<String>> boardImageMap = new HashMap<>();
tuples.forEach(tuple -> {
Board board = tuple.get(qBoard);
String imageUrl = tuple.get(qImage.imageUrl);
if (imageUrl != null) {
boardImageMap.computeIfAbsent(board, k -> new ArrayList<>()).add(imageUrl);
}
});
List<BoardWithImageDTO> resultList = boardImageMap.entrySet().stream()
.map(entry -> new BoardWithImageDTO(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
return resultList;
}
게시글 상세 조회
// BoardRepositoryImpl
@Override
public Optional<ResponseBoardDTO> findBoardDetail(Long userNo, Long boardId) {
QBoard qBoard = QBoard.board;
QHeart qHeart = QHeart.heart;
QImage qImage = QImage.image;
ResponseBoardDTO responseBoardDTO = jpaQueryFactory
.select(new QResponseBoardDTO(qBoard, qHeart, qBoard.user))
.from(qBoard)
.leftJoin(qHeart)
.on(qBoard.id.eq(qHeart.board.id))
.on(qHeart.user.id.eq(userNo))
.fetchJoin()
.where(qBoard.id.eq(boardId))
.fetchOne();
List<String> imageUrls = jpaQueryFactory
.select(qImage.imageUrl)
.from(qImage)
.where(qImage.boardId.eq(boardId))
.fetch();
assert responseBoardDTO != null; //responseBoardDTO의 null값 여부 확인
responseBoardDTO.setImageUrls(imageUrls);
return Optional.of(responseBoardDTO);
}

'개발일지 > 2023_한이음' 카테고리의 다른 글
[spring boot] aws 백엔드 배포하기(3. 서버 빌드 오류잡기) (0) | 2023.08.17 |
---|---|
[spring boot] aws 백엔드 배포하기(2. 서버에서 빌드) (0) | 2023.08.10 |
🤦🏻♀️고민하기 - entity 클래스_관련은 있지만 저장되지 않는 컬럼을 어떻게 처리해야 하나? (0) | 2023.08.04 |
[spring boot] aws 백엔드 배포하기(1. jar파일로 빌드) (0) | 2023.08.03 |
list null(empty)체크하기 (0) | 2023.08.02 |