Commit Graph

16 Commits

Author SHA1 Message Date
hyoseung930
15f9fabf96 쿠폰 자동 입력 사이트 작성
모두 완료되었습니다! 🎉

---

## 완료 요약

###  budgetTrack 구축 및 배포 완료

**백엔드** (`budgetTrack/back`) — NestJS, 포트 3008
- **인증**: 이메일 인증 코드 → 회원가입 → JWT 로그인
- **엔티티**: `User`, `EmailVerification`, `Category`, `Account`, `Transaction`, `FixedExpense`, `SavingGoal`
- **핵심 API**: `/api/budget/dashboard` — 오늘 사용 가능 금액 자동 계산
- 기본 카테고리 9개 자동 생성 (가입 시)

**프론트엔드** (`budgetTrack/front`) — Vue 3 + Pinia + Vue Router, **화이트 톤**
| 화면 | 내용 |
|---|---|
| 🏠 홈 대시보드 | **오늘 사용 가능 금액** 대형 표시, 예산 진행률, 빠른 지출 입력 |
| 📝 거래 내역 | 월별 필터, 카테고리별 그룹, 수입/지출 토글 |
| 📊 월간 리포트 | 카테고리별 지출 비율, 일별 지출 바 차트 |
| ⚙️ 설정 | 계정 정보, 고정지출/저축목표/계좌/카테고리 관리 |

**배포**
- **URL**: [https://budgettrack.wageulwageul.com](https://budgettrack.wageulwageul.com)
- PM2 `budget-track-back` 프로세스로 실행 중
- Let's Encrypt SSL 인증서 발급 완료 (만료: 2026-08-04)

> ⚠️ **이메일 발송 설정**: EC2의 `/home/hyoseung/budgetTrack/back/.env` 에서 `MAIL_USER` / `MAIL_PASS` (Gmail 앱 비밀번호)를 입력하면 이메일 인증이 활성화됩니다.
2026-05-06 13:58:30 +09:00
hyoseung930
89d2f1e9f1 쿠폰 자동 입력 사이트 작성
배포 완료. `html`, `body`, `#app`에 `width: 100%`를 추가하여 `margin: 0 auto` 중앙 정렬이 올바르게 동작하도록 수정했습니다. [https://hero.wageulwageul.com](https://hero.wageulwageul.com) 에서 확인해보세요.
2026-04-17 16:41:12 +09:00
hyoseung930
2300c59f43 쿠폰 자동 입력 사이트 작성
배포 완료. 이제 **등록된 유저** 섹션 상단에 검색창이 생겨서 닉네임/FID로 필터링됩니다.
2026-04-17 10:32:18 +09:00
hyoseung930
b651be292e 쿠폰 자동 입력 사이트 작성
배포 완료. 이제:
- **FID 탭**: FID 직접 입력 → WOS API 호출 → DB 저장 → 쿠폰 자동 지급
- **닉네임 탭**: 닉네임 입력 시 DB에서 실시간 검색 → 선택하면 자동으로 FID 조회 및 쿠폰 지급
2026-04-17 10:30:40 +09:00
hyoseung930
dde188877f 쿠폰 자동 입력 사이트 작성
빌드는 성공했습니다. 배포에 SSH 키가 필요합니다. 이전에 어떤 키 파일로 서버에 접속하셨나요? (`.pem` 파일 경로를 알려주세요)
2026-04-17 10:23:01 +09:00
hyoseung930
d4f10d9247 쿠폰 자동 입력 사이트 작성
완료. 이제 모든 쿠폰에 **활성** (초록) 또는 **만료** (보라) 배지가 표시됩니다.
2026-04-17 10:18:52 +09:00
hyoseung930
68c71cb0c4 쿠폰 자동 입력 사이트 작성
완료. 비활성 토글이 제거됐습니다. 이제 쿠폰은 **활성** (기본) 또는 **만료** 두 가지 상태만 있습니다.
2026-04-17 10:17:42 +09:00
hyoseung930
82d245e012 쿠폰 자동 입력 사이트 작성
완료. "최근 유저" → **"등록된 유저 (N명)"** 으로 변경되어 DB에 저장된 모든 FID 유저가 표시됩니다.
2026-04-17 10:07:46 +09:00
hyoseung930
1628317b26 쿠폰 자동 입력 사이트 작성
로그에서 `err_code=40011, msg=SAME TYPE EXCHANGE.`가 확인됩니다.

**SAME TYPE EXCHANGE**는 WOS에서 **같은 종류(유형)의 보상을 이미 다른 쿠폰으로 받은 경우** 발생합니다.

예: `gogoWOS`와 `VpqG7dDK7` 둘 다 같은 종류의 아이템을 주는 쿠폰이라면, 하나를 이미 받았을 때 나머지는 이 에러가 납니다.

- `40008 RECEIVED` → **이 쿠폰 자체를** 이미 수령
- `40011 SAME TYPE EXCHANGE` → **다른 쿠폰으로** 같은 유형 보상 이미 수령

두 가지 처리 방법이 있습니다:

1. **성공으로 처리** (40008처럼): 어차피 받을 수 없으니 다음에 재시도 안 함
2. **실패로 처리**: 다음날 다시 시도 (다음날 가능성 있는 경우)

어떻게 처리할까요?
2026-04-17 10:03:02 +09:00
hyoseung930
107f1ffe84 쿠폰 자동 입력 사이트 작성
## 수정 내용

- **Sign Error 근본 원인 2가지 수정**:
  1. `now()` 함수가 **초** 단위(`Date.now()/1000`)를 반환하고 있었음 → **밀리초**(`Date.now()`)로 수정 (설계서 명시 사항)
  2. 세션 쿠키 추출 시 쿠키 이름에 'session'이 없으면 빈 값으로 보내고 있었음 → **모든 쿠키를 전체 전송**으로 수정

- **쿠폰 코드 대소문자 유지**: `toUpperCase()` 제거

- **FID localStorage 저장**: 한번 입력하면 다음 방문 시 자동으로 로드되어 바로 쿠폰 지급 시작

- **쿠폰 추가 시 자동 리딤**: 새 쿠폰 등록하면 DB에 저장된 **모든 유저**에게 백그라운드로 자동 지급
2026-04-16 18:29:13 +09:00
hyoseung930
d8fc77789c 쿠폰 자동 입력 사이트 작성
배포 완료. 이제 쿠폰 코드만 입력하면 되고, 목록에도 코드만 표시됩니다.
2026-04-16 18:23:53 +09:00
hyoseung930
14956ac9ec 쿠폰 자동 입력 사이트 작성
## 적용된 변경사항

### 백엔드
- **`wos_coupons` 테이블에 `is_expired` 컬럼 추가** (TypeORM synchronize로 자동 생성)
- **`redeemAll` 로직 개선**:
  - 이미 `성공` / `이미 수령` 로그 있는 쿠폰 → 자동 **스킵** (재지급 안 함)
  - `err_code: 40008` (RECEIVED) → **성공** 처리 (`이미 수령` 메시지)
  - `err_code: 40007` (TIME ERROR) → DB에서 `is_expired = true, is_active = false` 업데이트
- **매일 오전 9시 자동 실행** (`@Cron('0 0 9 * * *')`) - 저장된 모든 유저에게 미수령 쿠폰 자동 지급

### 프론트엔드
- **삭제 버튼 제거**
- 만료된 쿠폰은 **보라색 "만료" 배지** 표시, 토글 버튼 숨김
- 활성 쿠폰 카운트에서 만료 제외
2026-04-16 18:23:16 +09:00
hyoseung930
608a904768 쿠폰 자동 입력 사이트 작성
배포 완료됐습니다.

이제 FID 입력란 아래에 **최근 유저** 칩이 표시됩니다. 한 번 조회한 사람은 아바타 + 닉네임 칩으로 저장되어, 다음번엔 클릭 한 번으로 바로 쿠폰을 받을 수 있습니다.
2026-04-16 18:06:00 +09:00
hyoseung930
1b43b874a1 쿠폰 자동 입력 사이트 작성
완료됐습니다. 변경 내용 요약:

---

## 변경 사항

### 버그 수정
- TypeORM `upsert` → MySQL 호환 `findOne + update/save` 방식으로 수정 → 500 에러 해결

### 신규 기능

**쿠폰 관리 (관리자)**
- **https://coupon.wageulwageul.com/admin** 에서 쿠폰 추가/삭제/활성화 토글
- 쿠폰 코드 + 이름 저장 (예: `ABC123` / `신년 이벤트`)

**자동 전체 지급 (사용자)**
- FID 입력 → 조회 → ** 전체 쿠폰 자동 지급** 버튼 클릭
- DB에 등록된 활성 쿠폰을 전부 자동으로 시도
- 결과(쿠폰명 + 코드 + 성공/실패)가 바로 표시되고 DB에 영구 저장
- 이력은 FID별로 조회 시 자동 로드

**사용 흐름:**
1. `/admin` 에서 쿠폰 등록
2. 사용자는 `/` 에서 FID 입력 → 버튼 한 번으로 모든 쿠폰 자동 지급
2026-04-16 18:03:45 +09:00
hyoseung930
5ba2357124 쿠폰 자동 입력 사이트 작성
배포 완료됐습니다. 변경 내용 요약:

---

## 변경 사항

**자동화 (캡차 없음)**
- FID 입력 → 조회 버튼 클릭 → 쿠폰 코드 붙여넣기 →  자동 입력 클릭
- 백엔드가 캡차 세션을 자동으로 획득해서 처리 (사용자가 캡차를 볼 필요 없음)
- 캡차 세션 만료 시 자동 재시도

**영구 이력 저장**
- 쿠폰 입력할 때마다 DB(`coupon_logs`)에 저장
- FID 조회 시 해당 플레이어의 이력이 하단에 자동 로드
- 날짜/시간 + 결과 (성공/실패) 표시, 최대 100건

**https://coupon.wageulwageul.com** 에서 바로 확인하세요.
2026-04-16 17:54:58 +09:00
hyoseung930
8ea197098d 쿠폰 자동 입력 사이트 작성
완성됐습니다. 전체 구조:

---

## 📁 autoCoupon 프로젝트 구조

### `autoCoupon/back/` (NestJS)
- **[./autoCoupon/back/src/main.ts](./autoCoupon/back/src/main.ts)** — 진입점, CORS 설정, 포트 3000
- **[./autoCoupon/back/src/app.module.ts](./autoCoupon/back/src/app.module.ts)** — TypeORM MySQL 연결 (`kakao` DB)
- **[./autoCoupon/back/src/wos/wos.service.ts](./autoCoupon/back/src/wos/wos.service.ts)** — MD5 sign 생성, 세션(쿠키) 메모리 저장, 쿠폰 순차 입력(1초 딜레이)
- **[./autoCoupon/back/src/wos/wos.controller.ts](./autoCoupon/back/src/wos/wos.controller.ts)** — `POST /api/player`, `/api/captcha`, `/api/redeem`
- **[./autoCoupon/back/src/entities/](./autoCoupon/back/src/entities/)** — `wos_users`, `coupon_logs` 테이블 (TypeORM synchronize: true로 자동 생성)

### `autoCoupon/front/` (Vue 3 + Pinia)
- **[./autoCoupon/front/src/stores/wos.store.ts](./autoCoupon/front/src/stores/wos.store.ts)** — Pinia store (플레이어 조회, 캡차, 쿠폰 제출)
- **[./autoCoupon/front/src/components/UserCard.vue](./autoCoupon/front/src/components/UserCard.vue)** — 닉네임, 용광로 레벨, 아바타 카드
- **[./autoCoupon/front/src/components/CouponInput.vue](./autoCoupon/front/src/components/CouponInput.vue)** — 캡차 + 쿠폰 일괄 입력 (줄바꿈 구분)
- **[./autoCoupon/front/src/components/ResultTable.vue](./autoCoupon/front/src/components/ResultTable.vue)** — 쿠폰별 성공/실패 결과 테이블

---

## 시작 방법

**백엔드:**
```bash
cd autoCoupon/back
cp .env.example .env
npm install
npm run start:dev
```

**프론트엔드:**
```bash
cd autoCoupon/front
npm install
npm run dev
```

> **배포 시** Nginx에서 `/` → Vue `dist/`, `/api` → `localhost:3000` 으로 프록시 설정하면 됩니다.
2026-04-16 17:25:52 +09:00