TIL) 일정관리 과제 컨트롤러 Mapping구현
1. 일정 생성 @PostMapping 구현
일정 생성구현코드는 각각 (클래스) ScheduleController, (인터페이스) ScheduleService, (인터페이스) ScheduleRepository에 구현할 수 있습니다.
ScheduleController.java
@PostMapping
public ResponseEntity<ScheduleResponseDto> createSchedule(@RequestBody ScheduleRequestDto dto) {
return new ResponseEntity<>(scheduleService.saveSchedule(dto), HttpStatus.CREATED);
}
이때, ScheduleService에 saveSchedule을 구현해야 합니다.
saveScheduleImpl.java (ScheduleService 인터페이스의 구현체)
@Override
public ScheduleResponseDto saveSchedule(ScheduleRequestDto dto) {
Schedule schedule = new Schedule(dto.getUserId(),dto.getScheduleTitle(), dto.getName(), dto.getPassword(), dto.getCreatedDate());
return scheduleRepository.saveSchedule(schedule);
}
이 부분에서는 Schedule를 구현하여 데이터베이스에 저장하는 ScheduleRepository에 넘겨줍니다.
Schedule의 생성자는 아래와 같습니다.
public Schedule(long userId, String scheduleTitle, String name, String password, LocalDate createdDate) {
this.userId = userId;
this.scheduleTitle = scheduleTitle;
this.name = (name==null)?"":name;
this.password = password;
this.createdDate = (createdDate==null)?LocalDate.now():createdDate;
this.updatedDate = LocalDate.EPOCH;
}
이때, name과 createdDate는 null이 아닌 값을 입력 받을 수 있게 구현하였습니다. 만일 name이 입력되지 않았다면, 공백(""), createdDate가 입력되지 않았다면 오늘날짜(LocalDate.now())가 입력되도록 하였습니다. 또한 updatedDate는 LocalDate.EPOCH로 초기화 됩니다.
JdbcTemplateScheduleRepository.java (ScheduleRepository 인터페이스의 구현체)
@Override
public ScheduleResponseDto saveSchedule(Schedule schedule) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("schedule").usingGeneratedKeyColumns("schedule_id");
if(schedule.getScheduleTitle()==null) worngRequestBody();
if(schedule.getPassword()==null) worngRequestBody();
if(schedule.getScheduleTitle().length() > 200) worngRequestBody();
Map<String, Object> parameters = new HashMap<>();
parameters.put("user_id", schedule.getUserId());
parameters.put("schedule_title", schedule.getScheduleTitle());
parameters.put("name", schedule.getName());
parameters.put("password", schedule.getPassword());
parameters.put("created_date", schedule.getCreatedDate());
parameters.put("updated_date", schedule.getUpdatedDate());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
return new ScheduleResponseDto(key.longValue(), schedule.getUserId(), schedule.getScheduleTitle(), schedule.getName(), schedule.getPassword(), schedule.getCreatedDate(), schedule.getUpdatedDate());
}
위에서 구현한 schedule 객체를 데이터 베이스에 넣는 코드입니다. 이때, 아래 코드는 schedule_id가 PRIMARY KEY,
AUTO INCREMENT라는 의미입니다.
jdbcInsert.withTableName("schedule").usingGeneratedKeyColumns("schedule_id");
이렇게 데이터베이스에 정보를 넣을 수 있습니다. 위와 같은 방법으로 GetMapping, PatchMapping, DeleteMapping을 구현할 수 있습니다.
2. 내일 구현 해아햘 것
- 예외처리를 담당하는 ExceptionController.java 클래스 구현 (@ControllerAdvice, @ExceptionHandler 이용)
- Pageable을 이용한 페이지 기능 구현
- 필수값과 유효성검사 구현