Skip to content

Commit 9b86c08

Browse files
authored
Merge pull request #25 from YAPP-Github/feat/T3-109
[T3-109] 루틴 완료 여부 갱신
2 parents 2ecd5a0 + e252b95 commit 9b86c08

17 files changed

Lines changed: 344 additions & 6 deletions

src/main/java/bitnagil/bitnagil_backend/changedRoutine/repository/ChangedRoutineRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@
88
import java.time.LocalDate;
99
import java.time.LocalDateTime;
1010
import java.util.List;
11+
import java.util.Optional;
1112
import java.util.UUID;
1213

1314
public interface ChangedRoutineRepository extends JpaRepository<ChangedRoutine, HistoryPk> {
1415

16+
Optional<ChangedRoutine> findByChangedRoutinePk(HistoryPk changedRoutinePk);
17+
18+
List<ChangedRoutine> findByChangedRoutinePk_Id(UUID changedRoutineId);
19+
1520
/**
1621
* 현재 시점을 기준으로 유저의 살아있는 변경루틴 이력을 조회
1722
* historyStartDateTime < systime <= historyEndDateTime

src/main/java/bitnagil/bitnagil_backend/changedRoutine/repository/ChangedSubRoutineRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77

88
import java.time.LocalDateTime;
99
import java.util.List;
10+
import java.util.Optional;
1011
import java.util.UUID;
1112

1213
public interface ChangedSubRoutineRepository extends JpaRepository<ChangedSubRoutine, HistoryPk> {
1314

15+
Optional<ChangedSubRoutine> findByChangedSubRoutinePk(HistoryPk changedSubRoutinePk);
16+
1417
/**
1518
* 현재 시점을 기준으로 살아있는 변경 서브루틴 이력을 조회
1619
* historyStartDateTime < systime <= historyEndDateTime

src/main/java/bitnagil/bitnagil_backend/global/entity/BaseTimeEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ public class BaseTimeEntity {
2424
@Column(columnDefinition = "TIMESTAMP")
2525
private LocalDateTime updatedAt;
2626

27-
private LocalDateTime deletedAt;
27+
protected LocalDateTime deletedAt;
2828
}

src/main/java/bitnagil/bitnagil_backend/global/errorcode/ErrorCode.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ public enum ErrorCode {
5858

5959
// 서브 루틴 관련 에러 코드
6060
NOT_FOUND_SUB_ROUTINE("SR001", HttpStatus.NOT_FOUND, "해당 복합 키에 맞는 서브 루틴이 존재하지 않습니다."),
61+
SUB_ROUTINE_USER_NOT_MATCHED("SR002", HttpStatus.FORBIDDEN, "서브루틴의 유저 정보와 로그인 유저 정보가 일치하지 않습니다."),
62+
63+
// 변경 루틴 관련 에러 코드
64+
NOT_FOUND_CHANGED_ROUTINE("CR001", HttpStatus.NOT_FOUND, "존재하지 않는 변경 루틴입니다."),
65+
CHANGED_ROUTINE_USER_NOT_MATCHED("CR002", HttpStatus.FORBIDDEN, "변경 루틴의 유저 정보와 로그인 유저 정보가 일치하지 않습니다."),
66+
67+
// 변경 서브루틴 관련 에러 코드
68+
NOT_FOUND_CHANGED_SUB_ROUTINE("CSR001", HttpStatus.NOT_FOUND, "존재하지 않는 변경 서브루틴입니다."),
69+
CHANGED_SUB_ROUTINE_USER_NOT_MATCHED("CSR002", HttpStatus.FORBIDDEN, "변경 서브루틴의 유저 정보와 로그인 유저 정보가 일치하지 않습니다."),
70+
71+
// 루틴 타입 관련 에러 코드
6172

6273
// 온보딩 관련 에러 코드
6374
NOT_FOUND_RECOMMENDED_ROUTINE("ON000", HttpStatus.NOT_FOUND, "조건에 맞는 추천 루틴을 찾을 수 없습니다."),

src/main/java/bitnagil/bitnagil_backend/routine/controller/RoutineController.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import java.time.LocalDate;
44
import java.util.UUID;
55

6+
import bitnagil.bitnagil_backend.routine.domain.enums.RoutineType;
7+
import bitnagil.bitnagil_backend.routine.request.UpdateRoutineCompletionRequest;
68
import jakarta.validation.constraints.NotNull;
9+
10+
import org.springframework.security.core.parameters.P;
711
import org.springframework.web.bind.annotation.DeleteMapping;
812
import org.springframework.web.bind.annotation.PatchMapping;
913
import org.springframework.web.bind.annotation.PathVariable;
@@ -64,4 +68,16 @@ public CustomResponseDto<RoutineSearchResponse> getRoutines(@CurrentUser User us
6468
@RequestParam @NotNull LocalDate endDate) {
6569
return CustomResponseDto.from(routineService.getRoutines(user, startDate, endDate));
6670
}
71+
72+
/**
73+
* 루틴 완료 여부 업데이트
74+
* 새 엔티티를 생성할 수도, 부분 수정할 수도 있기에 PATCH를 쓰지 않고 POST를 씁니다.
75+
*/
76+
@PostMapping("/completions")
77+
public CustomResponseDto<Object> updateRoutineCompletionStatus(@CurrentUser User user,
78+
@RequestBody UpdateRoutineCompletionRequest updateRoutineCompletionRequest) {
79+
routineService.updateRoutineCompletionStatus(user, updateRoutineCompletionRequest);
80+
81+
return CustomResponseDto.from(null);
82+
}
6783
}

src/main/java/bitnagil/bitnagil_backend/routine/controller/spec/RoutineSpec.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import bitnagil.bitnagil_backend.global.swagger.ApiErrorCodeExamples;
99
import bitnagil.bitnagil_backend.global.swagger.ApiTags;
1010
import bitnagil.bitnagil_backend.routine.request.RegisterRoutineRequest;
11+
import bitnagil.bitnagil_backend.routine.request.UpdateRoutineCompletionRequest;
1112
import bitnagil.bitnagil_backend.routine.request.UpdateRoutineRequest;
12-
import bitnagil.bitnagil_backend.routine.request.RoutineSearchRequest;
1313
import bitnagil.bitnagil_backend.routine.response.RoutineSearchResponse;
1414
import bitnagil.bitnagil_backend.user.domain.User;
1515
import io.swagger.v3.oas.annotations.Operation;
@@ -40,4 +40,8 @@ public interface RoutineSpec {
4040
@Operation(summary = "루틴 및 서브 루틴을 모두 삭제합니다.")
4141
@ApiErrorCodeExamples({ErrorCode.NOT_FOUND_ROUTINE, ErrorCode.ROUTINE_USER_NOT_MATCHED})
4242
CustomResponseDto<Object> deleteRoutine(User user, UUID routineId);
43+
44+
@Operation(summary = "여러 루틴의 완료 여부를 갱신합니다.")
45+
CustomResponseDto<Object> updateRoutineCompletionStatus(User user,
46+
UpdateRoutineCompletionRequest updateRoutineCompletionRequest);
4347
}

src/main/java/bitnagil/bitnagil_backend/routine/domain/Routine.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,9 @@ public Routine(HistoryPk routinePk, String name, List<DayOfWeek> repeatDay, Loca
7373
public void updateHistoryEndDateTime(LocalDateTime updateDateTime) {
7474
this.historyEndDateTime = updateDateTime;
7575
}
76+
77+
// sort delete
78+
public void setDeleteAt(LocalDateTime deleteAt) {
79+
this.deletedAt = deleteAt;
80+
}
7681
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package bitnagil.bitnagil_backend.routine.domain;
2+
3+
import java.time.LocalDate;
4+
import java.util.UUID;
5+
6+
import bitnagil.bitnagil_backend.global.entity.BaseTimeEntity;
7+
import bitnagil.bitnagil_backend.routine.domain.enums.RoutineType;
8+
import jakarta.persistence.Column;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.EnumType;
11+
import jakarta.persistence.Enumerated;
12+
import jakarta.persistence.GeneratedValue;
13+
import jakarta.persistence.GenerationType;
14+
import jakarta.persistence.Id;
15+
import jakarta.validation.constraints.NotNull;
16+
import lombok.AccessLevel;
17+
import lombok.Builder;
18+
import lombok.Getter;
19+
import lombok.NoArgsConstructor;
20+
21+
/**
22+
* 루틴 완료 여부를 관리하는 엔티티 클래스입니다.
23+
*/
24+
@Getter
25+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
26+
@Entity
27+
public class RoutineCompletion extends BaseTimeEntity {
28+
29+
@Id
30+
@GeneratedValue(strategy = GenerationType.IDENTITY)
31+
private Long routineCompletionId;
32+
33+
@NotNull
34+
private Boolean completeYn;
35+
36+
@NotNull
37+
private LocalDate performedDate;
38+
39+
@NotNull
40+
private UUID routineId;
41+
42+
@NotNull
43+
private Long routineHistorySeq;
44+
45+
@Enumerated(EnumType.STRING)
46+
@Column(columnDefinition = "varchar(40)", nullable = false)
47+
private RoutineType routineType;
48+
49+
@Builder
50+
public RoutineCompletion(Boolean completeYn, LocalDate performedDate, UUID routineId, Long routineHistorySeq,
51+
RoutineType routineType) {
52+
this.completeYn = completeYn;
53+
this.performedDate = performedDate;
54+
this.routineId = routineId;
55+
this.routineHistorySeq = routineHistorySeq;
56+
this.routineType = routineType;
57+
}
58+
59+
public void updateCompleteYn(Boolean completeYn) {
60+
this.completeYn = completeYn;
61+
}
62+
}

src/main/java/bitnagil/bitnagil_backend/routine/domain/SubRoutine.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,8 @@ public void updateSortOrder(Integer sortOrder) {
7070
this.sortOrder = sortOrder;
7171
}
7272

73+
// sort delete
74+
public void setDeleteAt(LocalDateTime deleteAt) {
75+
this.deletedAt = deleteAt;
76+
}
7377
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package bitnagil.bitnagil_backend.routine.domain.enums;
2+
3+
import bitnagil.bitnagil_backend.enums.EnumType;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
7+
@RequiredArgsConstructor
8+
@Getter
9+
public enum RoutineType implements EnumType {
10+
ROUTINE("루틴"),
11+
SUB_ROUTINE("서브루틴"),
12+
CHANGED_ROUTINE("변경 루틴"),
13+
CHANGED_SUB_ROUTINE("변경 서브루틴"),
14+
;
15+
16+
private final String description;
17+
}

0 commit comments

Comments
 (0)