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

+ Recent posts