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