refactor: 파일 분리 리팩토링 (routes, services, tools, utils)

아키텍처 개선:
- index.ts: 921줄 → 205줄 (77% 감소)
- openai-service.ts: 1,356줄 → 148줄 (89% 감소)

새로운 디렉토리 구조:
- src/routes/ - Webhook, API, Health check 핸들러
  - webhook.ts (287줄)
  - api.ts (318줄)
  - health.ts (14줄)

- src/services/ - 비즈니스 로직
  - bank-sms-parser.ts (143줄)
  - deposit-matcher.ts (88줄)

- src/tools/ - Function Calling 도구 모듈화
  - weather-tool.ts (37줄)
  - search-tool.ts (156줄)
  - domain-tool.ts (725줄)
  - deposit-tool.ts (183줄)
  - utility-tools.ts (60줄)
  - index.ts (104줄) - 도구 레지스트리

- src/utils/ - 유틸리티 함수
  - email-decoder.ts - Quoted-Printable 디코더

타입 에러 수정:
- routes/webhook.ts: text undefined 체크
- summary-service.ts: D1 타입 캐스팅
- summary-service.ts: Workers AI 타입 처리
- n8n-service.ts: Workers AI 타입 + 미사용 변수 제거

빌드 검증:
- TypeScript 타입 체크 통과
- Wrangler dev 로컬 빌드 성공

문서:
- REFACTORING_SUMMARY.md 추가
- ROUTE_ARCHITECTURE.md 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-19 15:36:17 +09:00
parent 3bf42947a7
commit ab6c9a2efa
18 changed files with 2578 additions and 1958 deletions

View File

@@ -46,7 +46,7 @@ export async function getBufferedMessages(
.bind(userId, chatId)
.all();
return (results || []) as BufferedMessage[];
return (results || []) as unknown as BufferedMessage[];
}
// 최신 요약 조회
@@ -86,7 +86,7 @@ export async function getAllSummaries(
.bind(userId, chatId)
.all();
return (results || []) as Summary[];
return (results || []) as unknown as Summary[];
}
// 전체 컨텍스트 조회
@@ -187,10 +187,10 @@ ${userMessages}
}
// 폴백: Workers AI
const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct' as any, {
messages: [{ role: 'user', content: prompt }],
max_tokens: 500,
});
}) as any;
return response.response || '프로필 생성 실패';
}
@@ -279,7 +279,7 @@ export async function generateAIResponse(
? context.summaries
.slice()
.reverse() // 오래된 것부터 표시
.map((s, i) => `[v${s.generation}] ${s.summary}`)
.map((s) => `[v${s.generation}] ${s.summary}`)
.join('\n\n')
: null;
@@ -312,14 +312,14 @@ ${integratedProfile}
}
// 폴백: Workers AI
const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct' as any, {
messages: [
{ role: 'system', content: systemPrompt },
...recentContext,
{ role: 'user', content: userMessage },
],
max_tokens: 500,
});
}) as any;
return response.response || '응답을 생성할 수 없습니다.';
}