Skip to content

Feat: 아이템, 업적, 챌린지, 스케줄러, 경험치 연동#225

Merged
kdh-92 merged 2 commits intomainfrom
feat/phase3-4-items-challenge
Apr 9, 2026
Merged

Feat: 아이템, 업적, 챌린지, 스케줄러, 경험치 연동#225
kdh-92 merged 2 commits intomainfrom
feat/phase3-4-items-challenge

Conversation

@kdh-92
Copy link
Copy Markdown
Owner

@kdh-92 kdh-92 commented Apr 9, 2026

Phase 3-2/3-3/4 BE 구현 완료

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 업적 시스템 추가: 사용자가 달성한 업적을 조회하고 보상을 획득할 수 있습니다.
    • 챌린지 시스템 추가: 무지출 및 예산 제한 챌린지를 생성하고 진행 상황을 추적할 수 있습니다.
    • 아이템 시스템 추가: 인벤토리에서 아이템을 조회하고 장비를 관리할 수 있습니다.
  • Chores

    • CI/CD 파이프라인 개선: 자동화된 테스트 및 배포 워크플로우가 강화되었습니다.

kdh929624 and others added 2 commits April 9, 2026 13:24
- New ci.yml: runs BE test + FE lint/test/build on PRs to main
- main.yml: deploy only runs after test-backend and test-frontend pass
- SSH command_timeout increased to 15m (fixes Kafka startup timeout)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## 아이템 시스템 (domain/item)
- ItemCatalog: 17종 아이템 (6 슬롯 × 5 등급)
- MemberItem/MemberEquipment: 보유/장착 관리
- ItemApiController: GET /inventory, /catalog, /equipment, PUT /equip

## 업적 시스템 (domain/achievement)
- Achievement: 10종 업적 (기록 횟수, 연속일, 챌린지, 카테고리 등)
- AchievementService: 조건 자동 체크 + 보상 지급
- AchievementApiController: GET /, /recent

## 챌린지 시스템 (domain/challenge)
- Challenge: 무소비 챌린지 생성/관리/취소
- ChallengeDailyLog: 일별 무소비 판정 기록
- ChallengeScheduler: 매일 0:30 자동 판정
- ChallengeApiController: POST /, GET /active, /{id}, /history, DELETE /{id}

## 스케줄러
- StatisticsScheduler: 매주 월요일 1:00 주간 통계 자동 집계
- SchedulerConfig: @EnableScheduling

## 거래 → 캐릭터 연동
- TransactionServiceImpl.createTransaction 후 캐릭터 경험치 +10, 알 기록 +1

## DB 마이그레이션
- V3: item_catalog, member_items, member_equipment, achievements,
  member_achievements, challenges, challenge_daily_logs + 시드 데이터

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 9, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d4d2aae4-dc2c-4f76-83f8-731288954fc7

📥 Commits

Reviewing files that changed from the base of the PR and between 77e9ea8 and 8ebd937.

📒 Files selected for processing (51)
  • .github/workflows/ci.yml
  • .github/workflows/main.yml
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/api/AchievementApiController.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/dto/resp/AchievementRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/exception/AchievementException.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/exception/error/AchievementErrorCode.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/model/Achievement.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/model/AchievementConditionType.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/model/MemberAchievement.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/repository/AchievementRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/repository/MemberAchievementRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/service/AchievementService.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/service/AchievementServiceImpl.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/api/ChallengeApiController.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/dto/req/ChallengeCreateReqDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/dto/resp/ChallengeDetailRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/dto/resp/ChallengeRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/dto/resp/DailyLogRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/exception/ChallengeException.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/exception/error/ChallengeErrorCode.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/model/Challenge.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/model/ChallengeDailyLog.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/model/ChallengeStatus.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/model/ChallengeType.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/repository/ChallengeDailyLogRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/repository/ChallengeRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/scheduler/ChallengeScheduler.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/service/ChallengeService.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/service/ChallengeServiceImpl.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/api/ItemApiController.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/dto/req/EquipItemReqDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/dto/resp/EquipmentRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/dto/resp/ItemCatalogRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/dto/resp/MemberItemRespDto.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/exception/ItemException.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/exception/error/ItemErrorCode.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/ItemCatalog.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/ItemSlot.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/ItemTier.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/MemberEquipment.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/MemberItem.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/UnlockType.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/repository/ItemCatalogRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/repository/MemberEquipmentRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/repository/MemberItemRepository.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/service/ItemService.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/service/ItemServiceImpl.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/statistics/scheduler/StatisticsScheduler.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/transaction/service/TransactionServiceImpl.kt
  • backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/global/config/SchedulerConfig.kt
  • backend/tiggle-root/tiggle/src/test/kotlin/com/side/tiggle/domain/transaction/service/TransactionServiceImplTest.kt

Walkthrough

이 PR은 달성도(Achievement), 도전과제(Challenge), 아이템(Item) 시스템의 완전한 구현을 추가합니다. JPA 엔티티, 리포지토리, 서비스, DTO, REST API 컨트롤러, 스케줄러, 그리고 GitHub Actions CI 워크플로우를 포함합니다.

Changes

Cohort / File(s) Summary
GitHub Actions 워크플로우
.github/workflows/ci.yml, .github/workflows/main.yml
CI 파이프라인 추가: 백엔드(JDK 21, Gradle) 및 프론트엔드(Node.js 20) 테스트 작업 정의. 배포 전 테스트 게이트 설정.
달성도 도메인 - 모델 및 저장소
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/model/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/repository/*
Achievement 엔티티(code, name, 조건 타입/값, 보상), MemberAchievement 엔티티(달성 기록), AchievementConditionType 열거형(9개 조건), 관련 리포지토리 추가.
달성도 도메인 - 서비스 및 API
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/service/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/api/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/dto/*
AchievementService 인터페이스 및 구현(getAllAchievements, getRecentAchievements, checkAndGrantAchievements), AchievementApiController(GET 엔드포인트), AchievementRespDto.
달성도 도메인 - 예외 처리
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/achievement/exception/*
AchievementException, AchievementErrorCode 열거형(NOT_FOUND, ALREADY_ACHIEVED).
도전과제 도메인 - 모델 및 저장소
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/model/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/repository/*
Challenge 엔티티(타입, 상태, 날짜 범위, 달성 추적), ChallengeDailyLog 엔티티(일일 기록), ChallengeStatus/ChallengeType 열거형, 관련 리포지토리.
도전과제 도메인 - 서비스 및 API
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/service/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/api/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/dto/*
ChallengeService 인터페이스 및 구현(생성, 조회, 캔슬, 일일 처리), ChallengeApiController(POST/GET/DELETE 엔드포인트), 요청/응답 DTO.
도전과제 도메인 - 스케줄러 및 예외
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/scheduler/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/challenge/exception/*
ChallengeScheduler(매일 00:30 실행), ChallengeException, ChallengeErrorCode 열거형(5개 오류).
아이템 도메인 - 모델 및 저장소
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/model/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/repository/*
ItemCatalog, MemberItem, MemberEquipment 엔티티, ItemSlot/ItemTier/UnlockType 열거형, 관련 리포지토리.
아이템 도메인 - 서비스 및 API
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/service/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/api/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/dto/*
ItemService 인터페이스 및 구현(인벤토리, 카탈로그, 장착), ItemApiController(GET/PUT 엔드포인트), 요청/응답 DTO.
아이템 도메인 - 예외 처리
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/item/exception/*
ItemException, ItemErrorCode 열거형(4개 오류: NOT_FOUND, NOT_OWNED, SLOT_MISMATCH, ALREADY_OWNED).
통계 및 트랜잭션 통합
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/statistics/scheduler/*, backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/domain/transaction/service/TransactionServiceImpl.kt
StatisticsScheduler(매주 월요일 01:00 스냅샷 생성), TransactionServiceImplCharacterService 의존성 추가(경험치 부여).
전역 설정
backend/tiggle-root/tiggle/src/main/kotlin/com/side/tiggle/global/config/SchedulerConfig.kt
@EnableScheduling 활성화 설정 클래스 추가.
테스트
backend/tiggle-root/tiggle/src/test/kotlin/com/side/tiggle/domain/transaction/service/TransactionServiceImplTest.kt
TransactionServiceImplTestCharacterService mock 추가.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • PR #205: 도메인별 예외 클래스(CustomException, ErrorCode 구현) 프레임워크 추가와 이 PR의 예외 체계가 일치합니다.
  • PR #223: 이 PR에서 TransactionServiceImpl에 추가된 CharacterService 의존성 호출이 해당 PR의 CharacterService 구현에 직접 의존합니다.
  • PR #222: 이 PR의 StatisticsSchedulerSchedulerConfig가 해당 PR의 StatisticsService.generateWeeklySnapshot 흐름과 직접 상호작용합니다.

Suggested labels

[BE]

Suggested reviewers

  • Atriel1999

Poem

🐰 달성도, 도전과제, 아이템 시스템이 피어나,
스케줄러는 밤마다 열심히 뛰어다니고,
예외 처리는 든든하게 버팀목이 되어,
캐릭터는 경험을 한 움큼씩 모아가네! 🌙✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/phase3-4-items-challenge

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@kdh-92 kdh-92 merged commit 809ce07 into main Apr 9, 2026
1 of 3 checks passed
@kdh-92 kdh-92 deleted the feat/phase3-4-items-challenge branch April 9, 2026 05:01
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