Skip to content

Commit 629b699

Browse files
authored
Feat [#42] 타이머 API 수정 (#43)
2 parents 3fa3181 + 6686449 commit 629b699

File tree

13 files changed

+64
-27
lines changed

13 files changed

+64
-27
lines changed

jaksim/src/main/java/org/sopt/jaksim/global/config/SwaggerConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class SwaggerConfig {
1212
@Bean
1313
public OpenAPI openAPI() {
1414
Info info = new Info()
15-
.title("Jaksim Swagger")
16-
.description("Jaksim Swagger dev API")
15+
.title("Morib 스웩")
16+
.description("Morib Swagger")
1717
.version("v1");
1818

1919
return new OpenAPI()

jaksim/src/main/java/org/sopt/jaksim/task/api/TimerApiController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class TimerApiController {
3030
private final TodoService todoService;
3131

3232
@GetMapping("/timer")
33-
public ResponseEntity<BaseResponse<?>> getTotalTimeToday(@RequestParam("targetDate") String targetDate) {
33+
public ResponseEntity<BaseResponse<?>> getTotalTimeToday(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate targetDate) {
3434
TotalTimeTodayResponse response = userTimerService.getTotalTimeToday(targetDate);
3535
return ApiResponseUtil.success(SuccessMessage.SUCCESS, response);
3636
}

jaksim/src/main/java/org/sopt/jaksim/task/domain/TaskTimer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import jakarta.persistence.*;
55
import lombok.*;
66
import org.sopt.jaksim.global.common.BaseTimeEntity;
7+
import org.sopt.jaksim.task.repository.TaskTimerRepository;
78

89
import java.time.LocalDate;
910

@@ -25,4 +26,12 @@ public class TaskTimer extends BaseTimeEntity {
2526
private LocalDate targetDate;
2627
private int targetTime;
2728

29+
public static TaskTimer create(Long userId, Long taskId) {
30+
return TaskTimer.builder()
31+
.userId(userId)
32+
.taskId(taskId)
33+
.targetDate(LocalDate.now())
34+
.targetTime(0)
35+
.build();
36+
}
2837
}

jaksim/src/main/java/org/sopt/jaksim/task/domain/UserTimer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import jakarta.persistence.*;
44
import lombok.*;
55
import org.sopt.jaksim.global.common.BaseTimeEntity;
6+
import org.springframework.cglib.core.Local;
7+
8+
import java.time.LocalDate;
69

710
@NoArgsConstructor(access = AccessLevel.PROTECTED)
811
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@@ -17,10 +20,10 @@ public class UserTimer extends BaseTimeEntity {
1720
@Column(nullable = false)
1821
private Long userId;
1922
@Column(nullable = false)
20-
private String targetDate;
23+
private LocalDate targetDate;
2124
private int targetTime;
2225

23-
public static UserTimer create(Long userId, String targetDate) {
26+
public static UserTimer create(Long userId, LocalDate targetDate) {
2427
return UserTimer.builder()
2528
.userId(userId)
2629
.targetDate(targetDate)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.sopt.jaksim.task.dto;
22

3+
import java.time.LocalDate;
4+
35
public record StopTimerRequest(
4-
String targetDate,
6+
LocalDate targetDate,
57
int elapsedTime
68
) {
79
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package org.sopt.jaksim.task.dto;
22

3+
import java.time.LocalDate;
4+
35
public record TotalTimeTodayResponse(
4-
String targetDate,
6+
LocalDate targetDate,
57
int targetTime
68
) {
7-
public static TotalTimeTodayResponse of(String targetDate, int targetTime) {
9+
public static TotalTimeTodayResponse of(LocalDate targetDate, int targetTime) {
810
return new TotalTimeTodayResponse(targetDate, targetTime);
911
}
1012
}

jaksim/src/main/java/org/sopt/jaksim/task/repository/TaskTimerRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import org.sopt.jaksim.task.domain.TaskTimer;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6+
import java.time.LocalDate;
67
import java.util.List;
8+
import java.util.Optional;
79

810
public interface TaskTimerRepository extends JpaRepository<TaskTimer, Long> {
9-
List<TaskTimer> findByTaskIdIn(List<Long> taskId);
11+
List<TaskTimer> findByUserIdAndTargetDateAndTaskIdIn(Long userId, LocalDate targetDate, List<Long> taskId);
12+
Optional<TaskTimer> findByUserIdAndTargetDateAndTaskId(Long userId, LocalDate targetDate, Long taskId);
1013
}

jaksim/src/main/java/org/sopt/jaksim/task/repository/UserTimerRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.data.repository.CrudRepository;
66

7+
import java.time.LocalDate;
78
import java.util.Optional;
89

910
public interface UserTimerRepository extends JpaRepository<UserTimer, Long> {
10-
UserTimer findByUserIdAndTargetDate(Long userId, String targetDate);
11+
UserTimer findByUserIdAndTargetDate(Long userId, LocalDate targetDate);
1112
UserTimer findByUserId(Long userId);
1213
}

jaksim/src/main/java/org/sopt/jaksim/task/service/TaskService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ public void toggleTaskCompletionStatus(Long taskId) {
6060
}
6161

6262
public List<Task> getTasksByTodoTask(List<TodoTask> todoTaskList) {
63-
List<Long> taskIdList = todoTaskList.stream().map(TodoTask::getId).collect(Collectors.toList());
63+
List<Long> taskIdList = todoTaskList.stream().map(TodoTask::getTaskId).collect(Collectors.toList());
6464
return taskRepository.findAllById(taskIdList);
65-
6665
}
6766

6867
}

jaksim/src/main/java/org/sopt/jaksim/task/service/TaskTimerService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import org.sopt.jaksim.global.message.ErrorMessage;
77
import org.sopt.jaksim.task.domain.Task;
88
import org.sopt.jaksim.task.domain.TaskTimer;
9-
import org.sopt.jaksim.task.domain.TodoTask;
109
import org.sopt.jaksim.task.dto.StopTimerRequest;
1110
import org.sopt.jaksim.task.repository.TaskTimerRepository;
11+
import org.sopt.jaksim.user.facade.UserFacade;
1212
import org.springframework.stereotype.Service;
1313

1414
import java.time.LocalDate;
@@ -21,17 +21,19 @@
2121
@RequiredArgsConstructor
2222
public class TaskTimerService {
2323
private final TaskTimerRepository taskTimerRepository;
24+
private final UserFacade userFacade;
2425

2526
public void calculateTaskTimerOnStop(Long taskId, StopTimerRequest stopTimerRequest) {
26-
TaskTimer taskTimer = taskTimerRepository.findById(taskId).orElseThrow(
27+
// userFacade.getUserByPrincipal().getId()
28+
TaskTimer taskTimer = taskTimerRepository.findByUserIdAndTargetDateAndTaskId(1L, stopTimerRequest.targetDate(), taskId).orElseThrow(
2729
() -> new NotFoundException(ErrorMessage.NOT_FOUND)
2830
);
2931
taskTimer.setTargetTime(taskTimer.getTargetTime() + stopTimerRequest.elapsedTime());
3032
taskTimerRepository.save(taskTimer);
3133
}
3234

33-
public Map<Long, TaskTimer> getTaskTimerMapByTaskList(List<Task> taskList) {
35+
public Map<Long, TaskTimer> getTaskTimerMapByTaskList(Long userId, LocalDate targetDate, List<Task> taskList) {
3436
List<Long> taskIdList = taskList.stream().map(Task::getId).collect(Collectors.toList());
35-
return taskTimerRepository.findByTaskIdIn(taskIdList).stream().collect(Collectors.toMap(TaskTimer::getTaskId, task -> task));
37+
return taskTimerRepository.findByUserIdAndTargetDateAndTaskIdIn(userId, targetDate, taskIdList).stream().collect(Collectors.toMap(TaskTimer::getTaskId, task -> task));
3638
}
3739
}

jaksim/src/main/java/org/sopt/jaksim/task/service/TodoService.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.sopt.jaksim.global.exception.NotFoundException;
6+
import org.sopt.jaksim.global.message.ErrorMessage;
57
import org.sopt.jaksim.task.domain.Task;
68
import org.sopt.jaksim.task.domain.TaskTimer;
79
import org.sopt.jaksim.task.domain.Todo;
@@ -55,15 +57,21 @@ public boolean isExist(LocalDate targetDate) {
5557
public TodoCardResponse getTodoCard(LocalDate targetDate) {
5658
// Long userId = userFacade.getUserByPrincipal().getId();
5759
Long userId = 1L;
60+
// 유저의 오늘 할일을 찾기 ok
5861
Todo todo = todoRepository.findByUserIdAndTargetDate(userId, targetDate);
62+
// 할일에 등록된 todoTask를 가져오기 ok
5963
List<TodoTask> todoTaskList = todoTaskService.getTodoTaskByTodoId(todo.getId());
60-
Map<Long, TodoTask> todoTaskMap = todoTaskService.getTodoTaskByTodoId(todo.getId()).stream().collect(Collectors.toMap(TodoTask::getTaskId, task -> task));
61-
int targetTime = userTimerService.getTotalTimeToday(String.valueOf(targetDate)).targetTime();
64+
// 오늘 나의 작업시간 조회
65+
int targetTime = userTimerService.getTotalTimeToday(targetDate).targetTime();
66+
// 할일에 등록된 task들 가져오기
6267
List<Task> taskList = taskService.getTasksByTodoTask(todoTaskList);
63-
Map<Long, TaskTimer> taskTimerMap = taskTimerService.getTaskTimerMapByTaskList(taskList);
68+
Map<Long, TaskTimer> taskTimerMap = taskTimerService.getTaskTimerMapByTaskList(userId, targetDate, taskList);
6469
List<TaskInTodoCard> taskInTodoCardList = new ArrayList<>();
6570
for (Task task : taskList) {
66-
taskInTodoCardList.add(TaskInTodoCard.of(task, taskTimerMap.get(task.getId())));
71+
if (taskTimerMap.get(task.getId()) == null) {
72+
throw new NotFoundException(ErrorMessage.NOT_FOUND);
73+
}
74+
else taskInTodoCardList.add(TaskInTodoCard.of(task, taskTimerMap.get(task.getId())));
6775
}
6876
return TodoCardResponse.of(targetTime, taskInTodoCardList);
6977
}

jaksim/src/main/java/org/sopt/jaksim/task/service/TodoTaskService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.sopt.jaksim.task.domain.TaskTimer;
56
import org.sopt.jaksim.task.domain.Todo;
67
import org.sopt.jaksim.task.domain.TodoTask;
8+
import org.sopt.jaksim.task.repository.TaskTimerRepository;
79
import org.sopt.jaksim.task.repository.TodoRepository;
810
import org.sopt.jaksim.task.repository.TodoTaskRepository;
11+
import org.sopt.jaksim.user.facade.UserFacade;
912
import org.springframework.stereotype.Service;
1013

1114
import java.util.*;
@@ -15,8 +18,9 @@
1518
@Service
1619
@RequiredArgsConstructor
1720
public class TodoTaskService {
21+
private final TaskTimerRepository taskTimerRepository;
1822
private final TodoTaskRepository todoTaskRepository;
19-
23+
private final UserFacade userFacade;
2024
public void excute(Todo todo, List<Long> newTaskIdList) {
2125
// 새로운 태스크들을 TodoTask로 생성
2226
List<TodoTask> newTodoTask = new ArrayList<>();
@@ -46,6 +50,7 @@ public void syncTodoTasks(List<TodoTask> previous, List<TodoTask> current) {
4650
for (TodoTask newTask : current) {
4751
if (!oldTaskMap.containsKey(newTask.getTaskId())) {
4852
oldTaskMap.put(newTask.getTaskId(), newTask);
53+
taskTimerRepository.save(TaskTimer.create(userFacade.getUserByPrincipal().getId(), newTask.getTaskId()));
4954
}
5055
}
5156

jaksim/src/main/java/org/sopt/jaksim/task/service/UserTimerService.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.sopt.jaksim.task.repository.UserTimerRepository;
1212
import org.sopt.jaksim.user.domain.User;
1313
import org.sopt.jaksim.user.facade.UserFacade;
14+
import org.springframework.data.relational.core.dialect.LockClause;
1415
import org.springframework.stereotype.Service;
1516

1617
import java.time.LocalDate;
@@ -22,7 +23,7 @@ public class UserTimerService {
2223
private final UserTimerRepository userTimerRepository;
2324
private final UserFacade userFacade;
2425

25-
public TotalTimeTodayResponse getTotalTimeToday(String targetDate) {
26+
public TotalTimeTodayResponse getTotalTimeToday(LocalDate targetDate) {
2627
if (!isToday(targetDate)) {
2728
throw new InvalidValueException(ErrorMessage.IS_NOT_TODAY);
2829
}
@@ -34,21 +35,23 @@ public TotalTimeTodayResponse getTotalTimeToday(String targetDate) {
3435
return TotalTimeTodayResponse.of(targetDate, userTimer.getTargetTime());
3536
}
3637

37-
public boolean isToday(String targetDate) {
38-
if (!LocalDate.now().equals(DateUtil.stringToDate(targetDate))) {
38+
public boolean isToday(LocalDate targetDate) {
39+
if (!LocalDate.now().equals(targetDate)) {
3940
return false;
4041
}
4142
return true;
4243
}
4344

44-
public UserTimer getUserTimerByUserIdAndTargetDate(Long userId, String targetDate) {
45+
public UserTimer getUserTimerByUserIdAndTargetDate(Long userId, LocalDate targetDate) {
4546
return userTimerRepository.findByUserIdAndTargetDate(userId, targetDate);
4647
}
4748

4849
public void calculateUserTimerOnStop(StopTimerRequest stopTimerRequest) {
49-
User user = userFacade.getUserByPrincipal();
50-
UserTimer userTimer = userTimerRepository.findByUserId(user.getId());
50+
// User user = userFacade.getUserByPrincipal();
51+
// user.getId()
52+
UserTimer userTimer = userTimerRepository.findByUserIdAndTargetDate(1L, stopTimerRequest.targetDate());
5153
userTimer.setTargetTime(userTimer.getTargetTime() + stopTimerRequest.elapsedTime());
54+
userTimerRepository.save(userTimer);
5255
}
5356

5457
}

0 commit comments

Comments
 (0)