Skip to content

Feat/일정과 작업 분리#21

Merged
GoGradually merged 107 commits into
masterfrom
feat/일정과-작업-분리
Jan 22, 2026

Hidden character warning

The head ref may contain hidden characters: "feat/\uc77c\uc815\uacfc-\uc791\uc5c5-\ubd84\ub9ac"
Merged

Feat/일정과 작업 분리#21
GoGradually merged 107 commits into
masterfrom
feat/일정과-작업-분리

Conversation

@GoGradually

Copy link
Copy Markdown
Collaborator

작업(Task)과 일정(Schedule)의 분리 필요성

  • 작업

    • 특정 시점 이전까지 완성되어야 하는 일
    • 작업은 근데 우선순위가 있다. - 사전일정/사후일정 넣기
    • 일정 쪼개기 기능은 작업에만 해당됨 - 일정 쪼개기가 아닌 작업 쪼개기
  • 일정

    • 다른 사람과 함께 정한 반드시 그 시간대에 진행되어야 하는 일
    • 일정은 우선순위가 없다. - 사전일정/사후일정 없음
    • 일정은 시작/일시정지/중지/완료 기능이 필요함
      • 일정은 현재 사용자의 진행하고 있는 상태를 반영해야 함 - ScheduleState 개념이 그대로 존재
      • 작업은 완료/미완료 상태만 반영하면 됨
    • 일정을 어느 시간에 넣어야 하는가에 대한 자동화 - 일정 자동 배치 기능
    • 진행한 일정에 대한 통계 - 일정 통계 기능
  • 일정은 반드시 작업과 연결될 필요는 없음

    • 사용자는 단순히 일정만 등록할 수 있어야 함
    • 예: 회의, 약속 등
  • 작업은 사용자의 원함에 의해, 일정으로 복사될 수 있음

    • 사용자는 작업을 오늘의 일정에 등록하고, 그 일정에 맞춰 작업을 진행할 수 있음
    • 만약 해당 일정이 완료되면, 작업도 완료 처리됨
    • 만약 해당 일정이 취소되면, 작업도 미완료 상태로 돌아감

변경된 점

Task와 Schedule의 도메인 상태 분리

  • Task

    • id
    • title
    • description
    • dueDate
    • isCompleted
    • ImportanceConstraint
    • TemporalConstraint
    • inboundTaskCount
      • createdAt
      • updatedAt
  • Schedule

    • id
    • title
    • description
    • designatedStartTime
    • state (예: 예정, 진행 중, 일시 정지, 완료)
    • ScheduleHistory
    • createdAt
    • updatedAt

둘 사이의 도메인 로직 설정

  • 일정 삭제 시 연결된 작업 삭제 금지

    • 작업 삭제 시 연결된 일정도 삭제는 있어야 하는 기능이지만,
    • 일정 삭제 시 연결된 작업 삭제는 하지 않는다.
  • ScheduleControllerAdvice에 Task 예외가 처리되고 있음

    • 이 예외 처리는 전용 TaskControllerAdvice에 존재해야 함.
  • 작업의 조회 방식

    1. 데드라인 기반 페이지네이션(정렬) 기능 지원
    2. 사용자의 선택으로, "지금 시작할 수 있는 일정" 보기
    • 작업 도메인에, 자신으로 들어오는(inbound) 의존 관계가 추가될 때마다 카운트하는 변수 추가
    • 지금 시작할 수 있는 일정 조회 시, inbound 일정이 0개인 일정 조회
  • 작업 조회 페이지네이션

    • 커서 기반 페이지네이션으로 변경 필요

Task - Schedule

  • 일정과 작업은 일대일 관계임
    • 실제 @OnetoOne 관계로 바꾸는 건 아니지만, 유니크 제약 조건을 둬야 함
  • 작업의 내용을 복사해서 날짜 지정 후 일정 생성은 가능하지만, 반대 방향은 안 됨
    • 일정에서 작업을 생성하는 건 불가능. 작업에서 일정을 생성하는 것만 가능

# Conflicts:
#	src/main/java/me/gg/pinit/pinittask/domain/schedule/model/Schedule.java
#	src/main/java/me/gg/pinit/pinittask/domain/schedule/patch/SchedulePatch.java
#	src/test/java/me/gg/pinit/pinittask/domain/task/vo/ImportanceConstraintTest.java
Copilot AI review requested due to automatic review settings January 22, 2026 09:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

이 PR은 기존에 결합되어 있던 Schedule과 Task를 분리하는 대규모 리팩토링입니다. Task는 마감일이 있는 "작업" 자체를 관리하고, Schedule은 특정 시간대에 실행되는 "일정"을 관리하도록 역할이 명확히 분리되었습니다.

Changes:

  • Task와 Schedule 도메인 분리: 기존 Schedule에 포함되어 있던 작업 속성(마감일, 중요도, 난이도, TaskType)을 Task 도메인으로 이동
  • API 버전 분리: V0(레거시, Task+Schedule 통합), V1(Task와 Schedule 독립 관리)
  • 의존 관계 변경: Schedule 간 의존성에서 Task 간 의존성으로 변경
  • 이벤트 추가: TaskCompletedEvent, TaskCanceledEvent 신규 추가
  • 데이터 연동: Task↔Schedule 간 1:1 관계 설정 및 상태 동기화 로직 추가

Reviewed changes

Copilot reviewed 80 out of 80 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
README.md 도메인 개요 업데이트 (Task/Schedule 분리 설명)
async-api.yaml Task 완료/취소 이벤트 채널 추가
TaskControllerV1.java 새로운 Task 관리 API 엔드포인트
ScheduleControllerV1.java Task 없이 독립적인 Schedule 관리 API
ScheduleControllerV0.java 레거시 호환성 유지 (Task+Schedule 통합)
Task.java 새로운 Task 도메인 모델
Schedule.java Task 관련 속성 제거, taskId 참조 추가
Dependency.java ownerId 필수화, Task ID 기반 의존성
TaskService.java Task CRUD 및 상태 관리 서비스
ScheduleService.java Schedule CRUD 및 Task 연동 로직
DependencyService.java Task 기반 의존성 관리 및 inboundCount 업데이트
테스트 파일들 도메인 분리에 따른 테스트 업데이트


@Test
void deleteTask_throwsWhenOwnerDoesNotMatch() {
Long ownerId = 3L;

Copilot AI Jan 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable 'ownerId' is only assigned values of primitive type and is never 'null', but it is declared with the boxed type 'Long'.

Copilot uses AI. Check for mistakes.
@GoGradually GoGradually merged commit f221f6a into master Jan 22, 2026
7 checks passed
@GoGradually GoGradually deleted the feat/일정과-작업-분리 branch January 22, 2026 09:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants