728x90
우선 기본 Entity 두 가지를 생성해주었다. 스터디 룸 설명 부분에는 @Lob 어노테이션을 이용해서 긴 텍스트를 받을 수 있도록 해주었다.
room 엔티티에는 기존에 없던 roomName 을 추가해서 중복되는 스터디 룸인지 체크할 수 있도록 해주었다.
@Entity
public class reservation {
// 예약일 기본 키
@Id @GeneratedValue
Long possibleDtid;
// 예약 가능 일자
Date possibleRoomDt;
Long roomId;
}
@Entity
public class room {
@Id @GeneratedValue
Long roomId;
// 스터디 룸 이름
String roomName;
// 수용 가능 인원
Long roomPerson;
// 스터디 룸 가격
Long roomPrice;
// 스터티 룸 설명
@Lob
String information;
public room(String roomName, Long roomPerson, Long roomPrice, String roomInformation) {
this.roomName = roomName;
this.roomPerson = roomPerson;
this.roomPrice = roomPrice;
this.information = roomInformation;
}
public room() {
}
}
roomDto 를 통해 새로운 스터디 룸의 저장을 가능하게 해주었다. Controller 에서 create_room 에 접근이 안되는 오류가 발생했었는데, 메서드 public 으로 해주지 않아서 발생한 문제였다.
@RequiredArgsConstructor
public class roomDto {
final roomRepository roomRepository;
String roomName;
Long roomPerson;
Long roomPrice;
String roomInformation;
// 새로운 스터디 룸 저장
@Transactional
public void create_room(String roomName, Long roomPerson, Long roomPrice, String roomInformation){
this.roomName = roomName;
this.roomPerson = roomPerson;
this.roomPrice = roomPrice;
this.roomInformation = roomInformation;
room new_room = new room(roomName,roomPerson,roomPrice,roomInformation);
roomRepository.save(new_room);
}
}
스터디 룸 추가 기능을 구현했다. 스터디 룸의 이름으로 중복 체크를 해주었고, 중복 이라면 alert 을 띄워 중복임을 알리도록 하였다. 중복이 아니라면 위의 DTO 를 이용해서 저장을 해주었다.
// 스터디룸 추가
@GetMapping("/admin/add")
public String AddRoom(){
return "admin/add";
}
@PostMapping("/admin/add")
public String AddRoom(@RequestParam("add_name") String add_name,@RequestParam("add_person") Long add_person,
@RequestParam("add_price") Long add_price, @RequestParam("add_information") String add_information,Model model ){
// 룸 정상 추가 성공 시
if(roomRepository.findByroomName(add_name).isEmpty()){
System.out.println("성공 시");
roomDto roomDto = new roomDto(roomRepository);
roomDto.create_room(add_name,add_person,add_price,add_information);
return "redirect:/admin";
}
// 이미 존재하는 룸이면
else{
model.addAttribute("add_fail","이미 존재하는 스터디 룸 입니다.");
return "admin/add_fail";
}
}
테스트 코드도 짜주었다. 입력 값을 bindingResult 로 제어하는 부분도 개발해야 겠다.
@SpringBootTest
class roomCreateTest {
@Autowired roomRepository roomRepository;
// 스터디 룸이 정상적으로 저장되는 경우
@Test
void 룸_생성_성공() {
// given
roomDto roomDto = new roomDto(roomRepository);
String roomName = "test123";
roomDto.create_room(roomName,10L,15000L,"test room 입니다");
// when
List test = roomRepository.findByroomName(roomName);
// then
Assertions.assertThat(test.isEmpty()==false);
}
// 스터디 룸이 중복인 경우
@Test
void 룸_생성_실패() {
// given
roomDto roomDto = new roomDto(roomRepository);
String roomName = "test123";
roomDto.create_room(roomName,10L,15000L,"test room 입니다");
// when
roomDto roomDto1 = new roomDto(roomRepository);
roomDto.create_room(roomName,9L,1500L,"test room2 입니다");
// then
int room_count = roomRepository.findByroomName(roomName).size();
Assertions.assertThat(room_count == 1);
}
}
728x90
'🟢 프로젝트 > [Spring Boot] 스터디 룸 관리 웹' 카테고리의 다른 글
| 비밀번호 암호화 구현 및 테스트 코드 작성 (0) | 2023.05.23 |
|---|---|
| 리뷰 수정 페이지 구현 및 테스트 완료 (0) | 2023.05.12 |
| 룸 삭제 기능 , 테스트 구현 (0) | 2023.05.08 |
| 파트 분배 및 계획 (0) | 2023.05.02 |
| 기획 (0) | 2023.04.04 |