Skip to content

Feat: 포인트 상점(캐릭터 스토어) 기능 구현 - #297

Merged
JokeBear777 merged 9 commits into
developfrom
feat/store
Aug 5, 2026
Merged

Feat: 포인트 상점(캐릭터 스토어) 기능 구현#297
JokeBear777 merged 9 commits into
developfrom
feat/store

Conversation

@vxlmlxv

@vxlmlxv vxlmlxv commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

개요

포인트 상점 기능을 구현했습니다. 유저가 앱 활동(리뷰, 투표, 건의)으로 모은 포인트로 캐릭터를 구매하고, 대표 캐릭터로 장착할 수 있습니다.
기획 문서: 포인트 상점 기능 / 포인트 수집·사용 기능

작업사항

  • 유저 테이블에 레벨 컬럼 추가: 지금까지는 조회할 때마다 점수로 레벨을 계산했는데, 이제 DB에 저장해두고 씁니다. 두 군데에 중복돼 있던 계산 로직도 Level.fromScore() 하나로 합쳤습니다. 마이페이지 응답은 기존과 동일합니다.
  • 상점용 포인트 추가: 점수를 얻을 때 포인트도 같은 양만큼 쌓이고, 캐릭터를 살 때는 포인트만 차감됩니다 (점수는 그대로라 레벨이 내려가지 않음). 동시에 두 번 구매해도 이중 차감되지 않도록 잔액 확인과 차감을 쿼리 한 번으로 처리했습니다.
  • 기존 유저 처리: 서버 시작 시 기존 유저들의 레벨/포인트 값을 자동으로 채웁니다. 여러 번 실행돼도 안전하고, 이미 사용한 포인트가 다시 채워지는 일은 없습니다.
  • 캐릭터 테이블: 이름, 대사, 이미지, 가격, 해금 레벨을 갖습니다. 유저-캐릭터 소유는 N:M이고, 같은 캐릭터 중복 구매는 UNIQUE 제약으로 막았습니다.
  • 상점 API (/api/store): 목록 조회(보유 / 구매 가능 / 미해금 / 포인트 부족 상태 표시 + 기획의 정렬 기준 적용), 구매, 대표 캐릭터 장착/해제, 보유 캐릭터 조회
  • 관리자 API (/api/admin/store): 캐릭터 등록/수정/삭제(S3 이미지 업로드), 특정 유저에게 지급
  • 캐릭터 초기 데이터: 기획 확정본 10종(레벨 해금 5종 + 포인트 구매 5종)이 서버 시작 시 자동 등록됩니다.
  • 테스트 63개 추가

참고

  • 캐릭터 이미지 10종은 피그마 확정본을 S3 character/ 경로에 올려뒀고, dev DB에도 캐릭터 10종이 이미 들어가 있습니다.
  • src/test/resources의 설정 파일 2개(application-test.yml, 테스트용 logback-spring.xml)를 커밋에 포함했습니다. 지금까지 이 파일들이 로컬에만 있어서 CI에서는 DB를 쓰는 테스트를 아예 돌릴 수 없었습니다. 전부 더미 값이라 시크릿은 없습니다.
  • 에러 코드는 17000번대(17000~17006)를 새로 사용합니다.

관련 이슈

@vxlmlxv
vxlmlxv force-pushed the feat/store branch 3 times, most recently from c8bec53 to a898b85 Compare August 2, 2026 17:53
@vxlmlxv
vxlmlxv force-pushed the feat/store branch 2 times, most recently from ea462c8 to 1540a26 Compare August 2, 2026 19:16
@JokeBear777
JokeBear777 merged commit 0dd6a63 into develop Aug 5, 2026
1 check passed
@JokeBear777
JokeBear777 deleted the feat/store branch August 5, 2026 09:49
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