Commit Graph
16 Commits
Author SHA1 Message Date
ByungCheolandClaude Opus 4.8 7de643022b feat: 고정지출 생성분을 '확인 필요(pending)'로 — 실제 처리 여부 확인
- RecurringService.buildEntry: pending=true로 생성 → 가계부 '확인 필요' 목록에 노출,
  사용자가 실제 결제·이체 확인 후 확정(빈 body confirm은 분류/계좌 유지)
- 메모 없으면 제목으로 채워 확인 목록에서 식별 쉽게

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:13:14 +09:00
ByungCheolandClaude Opus 4.8 6eef6cbd29 feat: 계좌 관리에 현금(CASH) 유형 추가
- WalletRequest 유형 검증에 CASH 허용
- netWorth: CASH를 자산으로 합산(기존 else 분기에서 부채로 잡히던 것 방지)
- 추이(trend)는 부호있는 openingBalance+흐름이라 CASH 자동 반영(변경 불필요)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 15:43:29 +09:00
ByungCheolandClaude Opus 4.8 553855b31c feat: 상환/납부에 연회비(카드) 추가 — 지출(분류 연회비)로 분리 저장
- RepaymentRequest.annualFee 추가, repay()에서 연회비>0이면 EXPENSE(분류=연회비) 생성
- 연회비는 카드 대상에만 허용(대출 입력 시 400)
- 원금/이자/연회비 중 하나는 필수로 완화

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 22:52:23 +09:00
ByungCheolandClaude Opus 4.8 a0fc546ad8 feat: 자동인식 분류 학습 — 같은 메모 키워드는 과거 분류로 자동 채움
- 알림 자동등록 시 memo(가맹점) 키워드로 과거에 '확정'한 내역의 분류를
  찾아(가장 많이 쓴 분류) pending 내역에 미리 채운다.
- 메모 포함관계 매칭('스타벅스' ↔ '스타벅스 강남점'), 같은 type(수입/지출)만.
- 안전상 '확인 필요' 상태는 유지(분류만 선반영) — 무검토 오확정 방지.
- AccountEntryMapper.findLearnedCategory 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 22:22:54 +09:00
ByungCheolandClaude Opus 4.8 120e042971 fix: 광고 푸시·문자 오등록 차단 강화 (죽은 코드 수정)
- 기존 광고 차단(if !strong && AD_HINT)은 강신호가 보장된 지점이라
  항상 false → 한 번도 실행되지 않는 죽은 코드였음. 광고어가 섞여도
  승인/입금 등 신호가 있으면 그대로 등록되던 원인.
- 광고어를 2단계로 분리:
  - AD_BLOCK(이벤트·쿠폰·혜택·당첨 등): 거래신호가 있어도 무조건 제외
  - AD_WEAK(적립·포인트·할인 등): '결제'만 있고 명확한 거래신호가 없을 때 제외
    (실거래 영수증의 '포인트 적립'은 보존)
- '결제'는 광고 문구에도 흔해 약신호(weakApproval)로 강등
- 파서 단위테스트 +4 (광고+강신호 차단, 실거래 포인트 보존, 결제단독 광고/정상)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 22:15:54 +09:00
ByungCheolandClaude Opus 4.8 31590343cf feat: 알림 분류 — 카드 승인/취소 + 은행 입금/출금·이체 구분
- 파서: 입금→수입, 출금/이체→지출, 카드 승인→지출, 카드 취소/환불→수입(환불)
  은행 거래는 은행(BANK) 지갑에, 카드는 카드(CARD) 지갑에 매칭(matchWalletId 일반화)
- createFromNotification: 파싱된 수입/지출 타입·지갑종류로 생성
- 파서 테스트 갱신(은행 입금/출금 케이스 포함)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 22:47:32 +09:00
ByungCheolandClaude Opus 4.8 2da43b2f77 feat: 카드 알림 계좌 자동선택 - 카드사 표기 차이 유연 매칭
- CardIssuerMatcher: 공백·접미사(카드/은행/페이/뱅크) 제거 + 별칭 통합(KB↔국민, 농협↔NH, 비씨↔BC, 씨티↔시티)
  · KB카드/국민카드/KB국민/국민 어떻게 등록해도 KB국민카드 알림에 자동 매칭
- AccountService.overlaps 가 CardIssuerMatcher 사용
- 단위테스트 4 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 17:33:33 +09:00
ByungCheolandClaude Opus 4.8 eded44a476 feat: 투자 매매내역 수정 API (PUT /trades/{id})
- InvestController/Service/Mapper: updateTrade 추가
- 수정 결과를 시점별로 시뮬레이션해 보유수량이 음수가 되면 거부(매도 과다 방지)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 16:42:33 +09:00
ByungCheolandClaude Opus 4.8 c05be0880c feat: 회원가입 제한·봇차단(허니팟/레이트리밋)·카드 자동인식 보정
- 관리자 회원가입 허용 토글(app_setting), 공개 GET /auth/signup-enabled
- 회원가입 봇차단: 허니팟(website) + IP 레이트리밋(Redis, 1h 5회)
- 카드 알림: 현금 오선택 보정(카드 양방향 매칭+단일카드 자동), 광고 푸시 차단(승인신호 없는 광고성 표현 무시)
- @MapperScan 에 admin.mapper 추가
- account.sql: 매 기동 wallet MODIFY 제거(라이브 락 위험) — CREATE 정의에 255 반영됨

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 00:15:57 +09:00
ByungCheolandClaude Opus 4.8 fb94df8112 feat: 시세 자동조회·퇴직연금 평가액·게시판 카테고리·태그 정렬·계좌번호 암호화
- 투자: 종목코드로 현재가 시세 자동조회(StockQuoteService, 투자탭/포트폴리오 진입 시 갱신)
- 투자: 퇴직연금 등 평가액 직접입력형 계좌(currentValue 활성화, manualValuation)
- 게시판: community/saving/tips 카테고리 분리(post.category + 목록 필터)
- 태그: 순서 변경(account_tag.sort_order, /tags/reorder)
- 보안: 계좌번호 AES-256-GCM 암호화 저장/복호화(EncryptedStringTypeHandler, account_number VARCHAR(255))
  키는 서버 .env ACCOUNT_CRYPTO_KEY 로 주입(미설정 시 평문 통과)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 05:00:18 +09:00
ByungCheolandClaude Opus 4.8 8fec057752 feat: 카드 결제 알림 자동인식(미확인 내역) 백엔드
- account_entry pending/notif_key 컬럼 추가(멱등 마이그레이션)
- CardNotificationParser: 카드사·금액·가맹점·승인/취소 파싱
- POST /entries/notification(미확인 지출 생성, 중복방지, 카드 자동매칭)
- POST /entries/{id}/confirm(확정), GET /entries/pending/count

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 18:51:30 +09:00
ByungCheolandClaude Opus 4.8 c1f97364aa feat: 영수증 OCR Google Vision 연동
- VisionOcrService: 이미지→Google Vision DOCUMENT_TEXT_DETECTION 호출, 전체 텍스트 반환
- OcrController: POST /api/account/ocr/receipt (멀티파트, 로그인 필요)
- API 키는 GOOGLE_VISION_API_KEY 환경변수(.env)로만 주입 — 미설정 시 503
- multipart 업로드 10MB 허용

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 17:37:17 +09:00
ByungCheolandClaude Opus 4.8 bd0a0f7776 feat: 투자 소수점 매매 + 카드 할부(installment_months)
- invest_trade.quantity BIGINT→DECIMAL(18,6): 평단·원가·평가/실현손익 계산을 BigDecimal로 전환 (금액은 원단위 정수 유지)
- account_entry.installment_months 추가: 카드 지출 2~24개월 할부 기록(일시불 null), 응답에 포함

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 16:41:58 +09:00
ByungCheolandClaude Opus 4.8 f5e9b78a14 feat: 예상 수입 월별 저장 + 계좌 순서변경 API
- 예상 수입: budget_income(연·월별) 로 변경, GET/PUT 에 year·month
- 계좌: wallet.sort_order + reorder 엔드포인트, 생성 시 맨 뒤 배치

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 22:54:23 +09:00
ByungCheolandClaude Opus 4.8 cac9919cc5 feat: 분류 순서변경(reorder) + 월 예상 수입 설정 API
- 분류: sort_order reorder 엔드포인트, 생성 시 맨 뒤 배치
- 예산: account_setting 테이블 + 월 예상 수입 GET/PUT

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 22:37:41 +09:00
ByungCheolandClaude Opus 4.8 2a2f81dc32 feat: 가계부·게시판 백엔드 API 구현
- com.sb.web 패키지로 재구성: account / auth / board / user / admin / common
- 가계부(account): 내역(필터), 계좌·순자산, 예산, 분류, 정기 거래, 투자 포트폴리오
  (종목·매매 이력, 이동평균 평단·실현/평가손익)
- MyBatis + MariaDB + Redis 세션, BCrypt
- 스키마 자동 초기화(db/*.sql, 멱등), 사용자별 데이터 격리(member_id)
- 문서: docs/BACKEND.md, .env.example

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 15:43:09 +09:00