728x90
Guest
모임과 그 모임에 참여하는 사람들을 관리하기 위해서 guest테이블을 만들었다.
@Getter
@Builder
@Entity
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class Guest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
Long boardId;
String guestId;
boolean participate;
}
boardId와 guestId 그리고 참여 여부를 저장한다.
@Repository
public interface GuestJpaRepository extends JpaRepository<Guest,Long> {
List<Guest> findAllByBoardId(Long boardId);
List<Guest> findByGuestId(String memberId);
}
그래서 이렇게 만든 entity와 Repository에 맞춰서 service를 구성한다.
guest에 필요한 기능은 모임 참여이기 때문에 joinRunning을 구현하고, 이 모임에 참여한 사용자들을 탐색하기 위해서 findmembers를 구현했다.
@Slf4j
@Service
public class GuestService {
private final GuestJpaRepository guestJpaRepository;
private final BoardService boardService;
@Autowired
public GuestService(GuestJpaRepository guestJpaRepository, BoardService boardService) {
this.guestJpaRepository = guestJpaRepository;
this.boardService = boardService;
}
public ParticipateResult joinRunning(GuestDto guestDto){
Optional<Board> board = boardService.findByBoardId(guestDto.getBoardId());
if(board.isPresent()){
int joinMember = board.get().getJoinMember();
if(joinMember>=board.get().getTotalMember()){
return ParticipateResult.FULL;
}
else {
guestJpaRepository.save(Guest.builder()
.guestId(guestDto.getMemberId())
.boardId(guestDto.getBoardId())
.participate(guestDto.isParticipate())
.build());
boardService.increaseMember(guestDto);
return ParticipateResult.TRUE;
}
}
else {
return ParticipateResult.FALSE;
}
}
public List<Guest> findMembers(MemberDto memberDto){
log.info(memberDto.toString());
Long boardId = boardService.findByHostId(memberDto.getHostId());
log.info("boardId = {}",boardId);
return guestJpaRepository.findAllByBoardId(boardId);
}
public boolean findByMemberId(Long boardId, String memberId){
List<Guest> guests = guestJpaRepository.findAllByBoardId(boardId);
return guests.stream().anyMatch(g -> g.getGuestId().equals(memberId));
}
}
이렇게 구현한 서비스를 사용하기 위해서 memberController에 아래의 코드를 mapping했다.
@GetMapping("/members")
public List<Guest> members(@RequestBody MemberDto memberDto){
//json 배열 반환
return guestService.findMembers(memberDto);
}
@PostMapping("/participate")
public ParticipateResult participate(@RequestBody GuestDto guestDto){
return guestService.joinRunning(guestDto);
}
이를 통해서 참여인원들을 json배열로 반환하고, 참여결과로 반환하는 식으로 처리했다.
결과는 enum클래스로 정의했다.
@Getter
public enum ParticipateResult {
FULL("full"),TRUE("true"),FALSE("false");
private final String value;
ParticipateResult(String value) {
this.value = value;
}
}
728x90
'LikeLion🦁' 카테고리의 다른 글
또 떠나는 여행 이번엔 경주유🚋 (13) | 2023.09.01 |
---|---|
뛰슈 - JWT (0) | 2023.08.31 |
뛰슈 - Board관리 (1) | 2023.08.17 |
뛰슈 - LoginService (0) | 2023.08.14 |
뛰슈 - Memeber정의 (0) | 2023.08.10 |