728x90
컨트롤러에서 삭제 기능을 구현했지만, 서비스와 컨트롤러를 분리하게 위해 리팩토링 했다.
컨트롤러를 구현했다. 스터드 룸의 id 보다 이름으로 제거하는 게 실용성이 있다고 생각해서 이름을 파라미터로 받았다. removeRoom 의 boolean 값으로 제거의 유무를 판단했다. 제거 기능은 모두 removeRoom으로 넘겨주었다. boolean 값에 따라 model 에 알맞은 message 를 담아주어 view 로 넘겨주었다.
// 스터디룸 제거
@PostMapping("/admin/remove")
public String RemoveRoom(@RequestParam("remove_name") String remove_name,Model model){
removeRoom removeRoom = new removeRoom(roomRepository);
// 존재하지 않는 룸이면
if(removeRoom.removeRoom(remove_name)==false){
model.addAttribute("remove_fail","존재하지 않는 스터디 룸 입니다.");
return "admin/remove_fail";
}
// 룸 정상 제거 시
else{
model.addAttribute("remove_success",remove_name + " 룸이 제거되었습니다.");
return "admin/remove_success";
}
}
@PostMapping("/admin/remove")
public String RemoveRoom(@RequestParam("remove_name") String remove_name,Model model){
removeRoom removeRoom = new removeRoom(roomRepository);
// 존재하지 않는 룸이면
if(removeRoom.removeRoom(remove_name)==false){
model.addAttribute("remove_fail","존재하지 않는 스터디 룸 입니다.");
return "admin/remove_fail";
}
// 룸 정상 제거 시
else{
model.addAttribute("remove_success",remove_name + " 룸이 제거되었습니다.");
return "admin/remove_success";
}
}
removeRoom 클래스이다. 삭제할 룸이 존재하는지 여부를 판단 후, boolean 값을 return 해준다. 룸이 존재하면 이를 삭제해준다.
@RequiredArgsConstructor
public class removeRoom {
final roomRepository roomRepository;
public boolean removeRoom(String remove_name){
boolean remove = false;
// 존재하지 않는 룸이면
if(roomRepository.findByroomName(remove_name).isEmpty()==true){
return false;
}
// 룸 정상 제거 시
else{
List room = roomRepository.findByroomName(remove_name);
roomRepository.delete((StudyRoom.StudyRoom.entity.room) room.get(0));
return true;
}
}
}
public class removeRoom {
final roomRepository roomRepository;
public boolean removeRoom(String remove_name){
boolean remove = false;
// 존재하지 않는 룸이면
if(roomRepository.findByroomName(remove_name).isEmpty()==true){
return false;
}
// 룸 정상 제거 시
else{
List room = roomRepository.findByroomName(remove_name);
roomRepository.delete((StudyRoom.StudyRoom.entity.room) room.get(0));
return true;
}
}
}
룸 제거 기능 테스트를 만들었고 이상 없이 돌아간다. 기본적인 기능 말고 추가적으로 난이도 있는 기능을 기획하고 구현해야 겠다.
@SpringBootTest
public class roomRemoveTest {
@Autowired
StudyRoom.StudyRoom.repository.roomRepository roomRepository;
// 스터디 룸이 정상적으로 제거 되는 경우
@Test
void 룸_제거_성공() {
// given
roomDto roomDto = new roomDto(roomRepository);
String roomName = "test123";
roomDto.create_room(roomName,10L,15000L,"test room 입니다");
// when
removeRoom removeRoom = new removeRoom(roomRepository);
// then
Assertions.assertThat(removeRoom.removeRoom(roomName)==true);
Assertions.assertThat(roomRepository.findByroomName(roomName).isEmpty()==true);
}
// 제거할 스터디 룸이 존재하지 않는 경우
@Test
void 룸_제거_실패() {
// given
String roomName = "test123";
// when
removeRoom removeRoom = new removeRoom(roomRepository);
// then
Assertions.assertThat(roomRepository.findByroomName(roomName).isEmpty()==false);
}
}
public class roomRemoveTest {
@Autowired
StudyRoom.StudyRoom.repository.roomRepository roomRepository;
// 스터디 룸이 정상적으로 제거 되는 경우
@Test
void 룸_제거_성공() {
// given
roomDto roomDto = new roomDto(roomRepository);
String roomName = "test123";
roomDto.create_room(roomName,10L,15000L,"test room 입니다");
// when
removeRoom removeRoom = new removeRoom(roomRepository);
// then
Assertions.assertThat(removeRoom.removeRoom(roomName)==true);
Assertions.assertThat(roomRepository.findByroomName(roomName).isEmpty()==true);
}
// 제거할 스터디 룸이 존재하지 않는 경우
@Test
void 룸_제거_실패() {
// given
String roomName = "test123";
// when
removeRoom removeRoom = new removeRoom(roomRepository);
// then
Assertions.assertThat(roomRepository.findByroomName(roomName).isEmpty()==false);
}
}
타임리프를 통해 관리자 페이지에 현재 존재하는 룸들을 표시해주었다.
<table class="room">
<p>
<tr>
<td>id</font></td>
<td></td>
<td>이름</td>
<td></td>
<td>수용 인원</td>
<td></td>
<td>가격</td>
<td></td>
<td>설명</td>
</tr>
<tr th:each="room : ${room}">
<td th:text="${room.roomId}"></td>
<td></td>
<td th:text="${room.roomName}"></td>
<td></td>
<td th:text="${room.roomPerson}"></td>
<td></td>
<td th:text="${room.roomPrice}"></td>
<td></td>
<td th:text="${room.roomInformation}"></td>
<td></td>
</tr>
</table>
728x90
'🟢 프로젝트 > [Spring Boot] 스터디 룸 관리 웹' 카테고리의 다른 글
| 비밀번호 암호화 구현 및 테스트 코드 작성 (0) | 2023.05.23 |
|---|---|
| 리뷰 수정 페이지 구현 및 테스트 완료 (0) | 2023.05.12 |
| 관리자 페이지 view, 스터디 룸 생성 기능 구현 (1) | 2023.05.06 |
| 파트 분배 및 계획 (0) | 2023.05.02 |
| 기획 (0) | 2023.04.04 |