From c7ac7823a1fd4862518ed60bfe23c6a0904104e0 Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Mon, 21 Jul 2025 18:10:40 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=BD=80=EB=AA=A8=EB=8F=84=EB=A1=9C=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84(#33)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: PomodoroFactory 클래스에 엔티티를 생성하는 create() 메서드 추가 --- .../domain/factory/PomodoroFactory.java | 17 ++++++++ .../pomodoro/domain/model/Pomodoro.java | 43 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/main/java/com/ject/studytrip/pomodoro/domain/factory/PomodoroFactory.java create mode 100644 src/main/java/com/ject/studytrip/pomodoro/domain/model/Pomodoro.java diff --git a/src/main/java/com/ject/studytrip/pomodoro/domain/factory/PomodoroFactory.java b/src/main/java/com/ject/studytrip/pomodoro/domain/factory/PomodoroFactory.java new file mode 100644 index 0000000..cc5df8f --- /dev/null +++ b/src/main/java/com/ject/studytrip/pomodoro/domain/factory/PomodoroFactory.java @@ -0,0 +1,17 @@ +package com.ject.studytrip.pomodoro.domain.factory; + +import com.ject.studytrip.pomodoro.domain.model.Pomodoro; +import com.ject.studytrip.trip.domain.model.DailyGoal; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class PomodoroFactory { + public static Pomodoro create( + DailyGoal dailyGoal, + int focusDurationInSeconds, + int focusCount, + int breakDurationInSeconds) { + return Pomodoro.of(dailyGoal, focusDurationInSeconds, focusCount, breakDurationInSeconds); + } +} diff --git a/src/main/java/com/ject/studytrip/pomodoro/domain/model/Pomodoro.java b/src/main/java/com/ject/studytrip/pomodoro/domain/model/Pomodoro.java new file mode 100644 index 0000000..3c7af64 --- /dev/null +++ b/src/main/java/com/ject/studytrip/pomodoro/domain/model/Pomodoro.java @@ -0,0 +1,43 @@ +package com.ject.studytrip.pomodoro.domain.model; + +import com.ject.studytrip.global.common.entity.BaseTimeEntity; +import com.ject.studytrip.trip.domain.model.DailyGoal; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Builder(access = AccessLevel.PRIVATE) +public class Pomodoro extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "daily_goal_id", nullable = false) + private DailyGoal dailyGoal; + + private int focusDurationInSeconds; // 집중 시간(초) + private int focusCount; // 집중 세션 횟수 + private int breakDurationInSeconds; // 휴식 시간(초) + private int totalFocusTimeInSeconds; // 총 집중 시간(초) + + // TODO : 추후 집중 세션 개수와 휴식 시간을 설정할 수 있는 기능이 추가될 경우 리팩토링 + // 우선은 고정 값 세팅 + public static Pomodoro of( + DailyGoal dailyGoal, + int focusDurationInSeconds, + int focusCount, + int breakDurationInSeconds) { + return Pomodoro.builder() + .dailyGoal(dailyGoal) + .focusDurationInSeconds(focusDurationInSeconds) + .focusCount(1) + .breakDurationInSeconds(0) + .totalFocusTimeInSeconds(0) + .build(); + } +}