1. 추가 구현 기능
- 전체 조회 기능 중 작성자 기준으로 전체 조회 기능 및 수정일 기준으로 내림차순 정렬하는 기능 추가
- 수정과 삭제 기능에 비밀번호 입력 을 해야 해당 기능이 작동하도록 하는 기능 추가
2. Github 주소
일정관리 github
3. 추가 구현 기능 코드
- 작성자 기준으로 조회 및 수정일 기준으로 내림차순 정렬
@GetMapping("/schedulers")
public ResponseEntity<List<SchedulerGetResponse>> getAll(
@RequestParam(required = false) String name
){
return ResponseEntity.status(HttpStatus.OK).body(schedulerService.findAll(name));
}
@Transactional(readOnly = true)
public List<SchedulerGetResponse> findAll(String name) {
List<Scheduler> schedulers;
if (!name.isEmpty()) {
schedulers = schedulerRepository.findByNameOrderByModifiedAtDesc(name);
} else {
schedulers = schedulerRepository.findAll();
}
List<SchedulerGetResponse> dtos = new ArrayList<>();
for (Scheduler scheduler : schedulers) {
SchedulerGetResponse response = new SchedulerGetResponse(
scheduler.getId(),
scheduler.getContentsName(),
scheduler.getContents(),
scheduler.getName(),
scheduler.getCreatedAt(),
scheduler.getModifiedAt()
);
dtos.add(response);
}
return dtos;
}
public interface SchedulerRepository extends JpaRepository<Scheduler, Long> {
List<Scheduler> findByNameOrderByModifiedAtDesc(String name);
}
- 수정과 삭제 기능에 비밀번호를 입력하게 하는 기능
@PutMapping("/schedulers/{schedulerId}")
public ResponseEntity<SchedulerUpdateResponse> update(
@PathVariable Long schedulerId,
@RequestParam String password,
@RequestBody SchedulerUpdateRequest request
) {
return ResponseEntity.status(HttpStatus.OK).body(schedulerService.update(schedulerId, password, request));
}
@DeleteMapping("/schedulers/{schedulerId}")
public ResponseEntity<Void> delete(
@PathVariable Long schedulerId,
@RequestParam String password
) {
schedulerService.delete(schedulerId, password);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
@Transactional
public SchedulerUpdateResponse update(Long schedulerId, String password, SchedulerUpdateRequest request) {
Scheduler scheduler = schedulerRepository.findById(schedulerId).orElseThrow(
() -> new IllegalStateException("존재하지 않는 게시글 입니다.")
);
if (!scheduler.getPassword().equals(password)) {
throw new IllegalStateException("비밀번호가 틀립니다.");
}
...
@Transactional
public void delete(Long schedulerId, String password) {
Scheduler scheduler = schedulerRepository.findById(schedulerId).orElseThrow(
() -> new IllegalStateException("존재하지 않는 게시글 입니다.")
);
if (!scheduler.getPassword().equals(password)) {
throw new IllegalStateException("비밀번호가 틀립니다.");
}
schedulerRepository.deleteById(schedulerId);
}
4. 트러블 슈팅

- RequestParam으로 추가한 name을 작성하지 않아 오류가 발생했다.

- Query Params에 key값으로 name을 넣으니 정상적으로 작동했다.
5. 마무리
- 이번 과제의 필수 기능은 전부 구현한 것 같다. 추가적으로 댓글 기능은 좀 더 공부를 하면서 추가해보도록 해야겠다.