완료! 추가된 파일 구조는 다음과 같아요:
---
## 추가된 파일
```
autoCoupon/back/src/
├── crawler/
│ ├── crawler.service.ts ← 핵심 크롤러
│ ├── crawler.controller.ts ← 수동 트리거 API
│ └── crawler.module.ts
├── wos/
│ └── wos.module.ts ← WosService export 추가
└── app.module.ts ← CrawlerModule 등록
```
---
## 동작 방식
```mermaid
flowchart LR
A[매 정시 크론] --> B[Reddit JSON API 조회]
B --> C{gift code 언급?}
C -->|No| D[스킵]
C -->|Yes| E[정규식으로 코드 추출]
E --> F{DB 중복?}
F -->|중복| D
F -->|신규| G[addCoupon 호출]
G --> H[전체 유저 자동 지급]
G --> I[Discord Webhook 알림]
```
---
## 배포 후 설정
**1. `.env`에 Discord Webhook URL 추가 (선택)**
```
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/xxx/yyy
```
**2. 수동 크롤링 테스트**
```bash
curl -X POST http://localhost:3000/api/crawler/trigger
```
**Discord Webhook 만들기**: 디스코드 서버 → 채널 설정 → 연동 → 웹후크 → 새 웹후크 → URL 복사
완료됐습니다. 변경 내용 요약:
---
## 변경 사항
### 버그 수정
- TypeORM `upsert` → MySQL 호환 `findOne + update/save` 방식으로 수정 → 500 에러 해결
### 신규 기능
**쿠폰 관리 (관리자)**
- **https://coupon.wageulwageul.com/admin** 에서 쿠폰 추가/삭제/활성화 토글
- 쿠폰 코드 + 이름 저장 (예: `ABC123` / `신년 이벤트`)
**자동 전체 지급 (사용자)**
- FID 입력 → 조회 → **⚡ 전체 쿠폰 자동 지급** 버튼 클릭
- DB에 등록된 활성 쿠폰을 전부 자동으로 시도
- 결과(쿠폰명 + 코드 + 성공/실패)가 바로 표시되고 DB에 영구 저장
- 이력은 FID별로 조회 시 자동 로드
**사용 흐름:**
1. `/admin` 에서 쿠폰 등록
2. 사용자는 `/` 에서 FID 입력 → 버튼 한 번으로 모든 쿠폰 자동 지급