TIL

TIL) 일정관리 과제 컨트롤러 Mapping구현

tmddnr3503 2024. 11. 5. 21:23

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을 이용한 페이지 기능 구현
  • 필수값과 유효성검사 구현