package com.example.scheduleappserver.service;
import com.example.scheduleappserver.dto.ScheduleRequestDto;
import com.example.scheduleappserver.dto.ScheduleResponseDto;
import com.example.scheduleappserver.entity.Schedule;
import com.example.scheduleappserver.repository.ScheduleRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class ScheduleService {
private final ScheduleRepository scheduleRepository;
@Transactional
public void save(Schedule schedule){
scheduleRepository.save(schedule);
}
@Transactional
public List<Schedule> findAll() {
List <Schedule> scheduleList = scheduleRepository.findAllByOrderByCreatedAtDesc();
return scheduleList;
}
@Transactional
public ScheduleResponseDto findById(Long id) { //Optional을 쓰는 이유는 id값이 null일 수도 있기 때문이다.
Schedule schedule = findSchedule(id);
ScheduleResponseDto scheduleResponseDto = new ScheduleResponseDto(schedule);
return scheduleResponseDto;
}
@Transactional
public ScheduleResponseDto update(Long id, ScheduleRequestDto requestDto) {
Schedule schedule = findSchedule(id);
schedule.setPassword(requestDto.getPassword());
schedule.setManager(requestDto.getManager());
schedule.setContent(requestDto.getContent());
schedule.setTitle(requestDto.getTitle());
ScheduleResponseDto scheduleResponseDto = new ScheduleResponseDto(schedule);
return scheduleResponseDto;
}
@Transactional
public void deleteFindIdPassword(Long id, Integer password){
scheduleRepository.deleteByIdAndPassword(id, password);
}
private Schedule findSchedule(Long id) {
return scheduleRepository.findById(id).orElseThrow(() ->
new IllegalArgumentException("해당 일정은 존재하지 않습니다.")
);
}
}
처음에 모든 service의 함수들을 void로 잡아주었었다. 이때 코드가 잘 돌아가는 것으로 작동하여 디비에서도 잘 작동하는 것으로 판단하여서 제출했는데 이것이 잘못판단하였다는 것을 깨달았다.
void로 반환값을 준다면 sql문만 뽑아와서 이에 대한 데이터를 반환해주지 않는 다는 것을 알았다.그래서 데이터 반환값을 넘겨주는 것이 필요하다. 이때 List , Optional이런 구조를 사용하는 것보다는 ResponseDto를 이용해서 직접접근보다는 간접적으로 접근하는 것이 좋다.
'TIL' 카테고리의 다른 글
240523 TIL : @Annotation (0) | 2024.05.23 |
---|---|
240521 TIL : REST, REST API, RESTful (0) | 2024.05.22 |
240516 TIL (0) | 2024.05.16 |
240514 TIL (0) | 2024.05.14 |
240510 TIL (0) | 2024.05.10 |