calendar
Task 생성
로드존슨
2023. 3. 18. 01:16
728x90
Task 생성
api 컨트롤 단에서 Task 생성하는 로직을 구현한다
userId 의 정보를 가져온다음 유효검증 후 생성 한다.
1)TaskCreateReq 를 구현
2)TaskService 구현 및 create 메소드 생성
-Schedule.task 만든거 확인
3)AuthUser 클래스를 생성
-식별자id 타입이 Long이라 타입변환이 중복되니까 클래스로 만든다.
4)UserService 에서 getOrthrowById 메소드를 구현
- JpaRepo 에서 findById 를 구현하여 id 찾는 로직은 있지만 예외처리가 없어 , 혼합사용
api 컨트롤 단에서 Task 생성하는 로직을 구현한다.
@RequiredArgsConstructor
@RequestMapping("/api/schedule")
@RestController
public class ScheduleController {
private final TaskService taskService;
@PostMapping("/tasks") //할일
public ResponseEntity<Void> createTask(@RequestBody TaskCreateReq taskCreateReq,
HttpSession session){
//유저의 정보를 갖고온다
final Long userId = (Long) session.getAttribute(LOGIN_SESSION_KEY);
//유저 유효검증
if(userId==null){
throw new RuntimeException("bad request. no session");
}
taskService.create(taskCreateReq, AuthUser.of(userId));
return ResponseEntity.ok().build();
}
}
1)TaskCreateReq 를 구현
@Data
public class TaskCreateReq {
private final String title; // 제목
private final String description; //내용
private final LocalDateTime taskAt; //일정
}
2)TaskService 구현 및 create 메소드 생성
@Service
@RequiredArgsConstructor
public class TaskService {
private final UserService userService;
private final ScheduleRepository scheduleRepository;
public void create(TaskCreateReq req, AuthUser authUser) {
final Schedule taskSchedule = Schedule.task(
req.getTitle(),
req.getDescription(),
req.getTaskAt(),
userService.getOrThrowById(authUser.getId()));
scheduleRepository.save(taskSchedule);
}
}
3)AuthUser 클래스를 생성
@Getter
public class AuthUser {
private final Long id;
private AuthUser(Long id) {
this.id = id;
}
public static AuthUser of(Long id) {
return new AuthUser(id);
}
}
4)UserService 에서 getOrthrowById 메소드를 구현
public User getOrThrowById(Long id) {
return userRepository.findById(id).orElseThrow(() -> new RuntimeException("no user."));
}
728x90