완료! 추가된 파일 구조는 다음과 같아요:
---
## 추가된 파일
```
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 복사
28 lines
929 B
TypeScript
28 lines
929 B
TypeScript
import { Module } from '@nestjs/common';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { WosModule } from './wos/wos.module';
|
|
import { CrawlerModule } from './crawler/crawler.module';
|
|
import { WosUser } from './entities/wos-user.entity';
|
|
import { CouponLog } from './entities/coupon-log.entity';
|
|
import { WosCoupon } from './entities/wos-coupon.entity';
|
|
|
|
@Module({
|
|
imports: [
|
|
ScheduleModule.forRoot(),
|
|
TypeOrmModule.forRoot({
|
|
type: 'mysql',
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: Number(process.env.DB_PORT) || 3306,
|
|
username: process.env.DB_USERNAME || 'kakao',
|
|
password: process.env.DB_PASSWORD || '486251daKWON@',
|
|
database: process.env.DB_DATABASE || 'kakao',
|
|
entities: [WosUser, CouponLog, WosCoupon],
|
|
synchronize: true,
|
|
}),
|
|
WosModule,
|
|
CrawlerModule,
|
|
],
|
|
})
|
|
export class AppModule {}
|