BoardService
package capoeira.capoeiraweb.service;
import capoeira.capoeiraweb.dto.BoardDTO;
import capoeira.capoeiraweb.entity.BoardEntity;
import capoeira.capoeiraweb.entity.BoardFileEntity;
import capoeira.capoeiraweb.repository.BoardFileRepository;
import capoeira.capoeiraweb.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.transaction.Transactional;
import java.io.File;
import java.io.IOException;
import java.net.ProxySelector;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
// DTO -> Entity (Entity Class)
// Entity -> DTO (DTO Class)
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
private final BoardFileRepository boardFileRepository;
public void save(BoardDTO boardDTO) throws IOException {
// 파일 첨부 여부에 따라 로직 분리
if (boardDTO.getBoardFile().isEmpty()) {
// 첨부 파일 없음.
BoardEntity boardEntity = BoardEntity.toSaveEntity(boardDTO);
boardRepository.save(boardEntity);
}else {
//첨부 파일 있음.
/*
1. DTO에 담긴 파일을 꺼냄
2. 파일의 이름 가져옴
3. 서버 저장용 이름을 만듦
// 내사진.jpg => 839738375892_내사진.jpg
4. 저장 경로 설정
5. 해당 경로에 파일 저장
6. board_table에 해당 데이터 save 처리
7. board_file_table에 해당 데이터 save 처리
*/
BoardEntity boardEntity = BoardEntity.toSaveFileEntity(boardDTO);
Long savedId = boardRepository.save(boardEntity).getId();
BoardEntity board = boardRepository.findById(savedId).get();
for (MultipartFile boardFile: boardDTO.getBoardFile()) {
// MultipartFile boardFile = boardDTO.getBoardFile();//1.
String originalFilename = boardFile.getOriginalFilename();// 2.
String storedFileName = System.currentTimeMillis() + "_" + originalFilename;
String savePath = "C:/capoeiraweb_img/" + storedFileName; // C:/springboot_img/839738375892_내사진.jpg
boardFile.transferTo(new File(savePath)); //5.
BoardFileEntity boardFileEntity = BoardFileEntity.toBoardFileEntity(board, originalFilename, storedFileName);
boardFileRepository.save(boardFileEntity);
}
}
}
@Transactional
public List<BoardDTO> findAll() {
List<BoardEntity> boardEntityList = boardRepository.findAll();
List<BoardDTO> boardDTOList = new ArrayList<>();
for(BoardEntity boardEntity: boardEntityList) {
boardDTOList.add(BoardDTO.toBoardDTO(boardEntity));
}
return boardDTOList;
}
@Transactional
public void updateHits(long id) {
boardRepository.updateHits(id);
}
@Transactional
public BoardDTO findById(long id) {
Optional<BoardEntity> optionalBoardEntity = boardRepository.findById(id);
if (optionalBoardEntity.isPresent()) {
BoardEntity boardEntity = optionalBoardEntity.get();
BoardDTO boardDTO = BoardDTO.toBoardDTO(boardEntity);
return boardDTO;
}else {
return null;
}
}
public BoardDTO update(BoardDTO boardDTO) {
BoardEntity boardEntity = BoardEntity.toUpdateEntity(boardDTO);
boardRepository.save(boardEntity);
return findById(boardDTO.getId());
}
public void delete(Long id) {
boardRepository.deleteById(id);
}
public Page<BoardDTO> paging(Pageable pageable) {
int page = pageable.getPageNumber() - 1;
int pageLimit = 15; // 한 페이지에 보여줄 글의 갯수
// 한페이자당 3개씩 글을 보여주고 정렬 기준은 id 기준으로 내림차순 정렬
// page 위치에 있는 값은 0부터 시작
Page<BoardEntity> boardEntities =
boardRepository.findAll(PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "id")));
System.out.println("boardEntities.getContent() = " + boardEntities.getContent()); // 요청 페이지에 해당하는 글
System.out.println("boardEntities.getTotalElements() = " + boardEntities.getTotalElements()); // 전체 글갯수
System.out.println("boardEntities.getNumber() = " + boardEntities.getNumber()); // DB로 요청한 페이지 번호
System.out.println("boardEntities.getTotalPages() = " + boardEntities.getTotalPages()); // 전체 페이지 갯수
System.out.println("boardEntities.getSize() = " + boardEntities.getSize()); // 한 페이지에 보여지는 글 갯수
System.out.println("boardEntities.hasPrevious() = " + boardEntities.hasPrevious()); // 이전 페이지 존재 여부
System.out.println("boardEntities.isFirst() = " + boardEntities.isFirst()); // 첫 페이지 여부
System.out.println("boardEntities.isLast() = " + boardEntities.isLast()); // 마지막 페이지 여부
// 목록: id, writer, title, hits, createdTime
Page<BoardDTO> boardDTOS = boardEntities.map(board -> new BoardDTO(board.getId(), board.getBoardWriter(), board.getBoardTitle(), board.getBoardHits(), board.getCreatedTime()));
return boardDTOS;
}
}
package capoeira.capoeiraweb.service;
import capoeira.capoeiraweb.dto.CommentDTO;
import capoeira.capoeiraweb.entity.BoardEntity;
import capoeira.capoeiraweb.entity.CommentEntity;
import capoeira.capoeiraweb.repository.BoardRepository;
import capoeira.capoeiraweb.repository.CommentRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class CommentService {
private final CommentRepository commentRepository;
private final BoardRepository boardRepository;
public Long save(CommentDTO commentDTO) {
/* 부모엔티티(BoardEntity) 조회 */
Optional<BoardEntity> optionalBoardEntity = boardRepository.findById(commentDTO.getBoardId());
if (optionalBoardEntity.isPresent()) {
BoardEntity boardEntity = optionalBoardEntity.get();
CommentEntity commentEntity = CommentEntity.toSaveEntity(commentDTO, boardEntity);
return commentRepository.save(commentEntity).getId();
}else {
return null;
}
// builder
}
public List<CommentDTO> findAll(Long boardId) {
// select * from comment_table where board_id=? order by id desc;
BoardEntity boardEntity = boardRepository.findById(boardId).get();
List<CommentEntity> commentEntityList = commentRepository.findAllByBoardEntityOrderByIdDesc(boardEntity);
/* EntityList -> DTOList */
List<CommentDTO> commentDTOList = new ArrayList<>();
for (CommentEntity commentEntity: commentEntityList) {
CommentDTO commentDTO = CommentDTO.toCommentDTO(commentEntity, boardId);
commentDTOList.add(commentDTO);
}
return commentDTOList;
}
}
MemberService
package capoeira.capoeiraweb.service;
import capoeira.capoeiraweb.dto.MemberDTO;
import capoeira.capoeiraweb.entity.MemberEntity;
import capoeira.capoeiraweb.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
public void login_info(MemberDTO memberDTO) {
// 1. dto -> entity 변환
// 2. repositoty의 login_info 메서드 호출
MemberEntity memberEntity = MemberEntity.toMemberEntity(memberDTO);
memberRepository.save(memberEntity);
//repositoty의 login_info메서드 호출 (조건. entity객체를 넘겨줘야 한다)
}
public MemberDTO login(MemberDTO memberDTO) {
/*
1.회원이 입력한 아이디로 DB에서 조회를 함
2.DB에서 조회한 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 판단
*/
Optional<MemberEntity> byId = memberRepository.findById(memberDTO.getId());
if (byId.isPresent()) {
//조회 결과가 있다 (해당 아이디를 가진 회원이 있다)
MemberEntity memberEntity = byId.get();
System.out.println("서비스 조회 결과가 있다");
if (memberEntity.getPassword().equals(memberDTO.getPassword())) {
//비밀번호 일치
//entity -> dto 변환 후 리턴
MemberDTO dto = MemberDTO.toMemberDTO(memberEntity);
System.out.println("서비스 성공");
return dto;
}else {
// 비밀번호 불일치 (로그인 실패)
System.out.println("서비스 실패");
return null;
}
}else {
//조회 결과가 없다 (해당 아이디를 가진 회원이 없다)
System.out.println("서비스 조회결과 없음");
return null;
}
}
public String idChenk(String id) {
Optional<MemberEntity> byId = memberRepository.findById(id);
if (byId.isPresent()) {
//조회결과가 있다 -> 사용할수 없다.
return null;
}else {
//조회결과가 없다 -> 사용할수 있다.
return "ok";
}
}
}