feat: 폼 필드 컴포넌트 분리 및 구독 카드 인터랙션 개선
- billing_cycle_selector, category_selector, currency_selector 컴포넌트 분리 - 구독 카드 클릭 이슈 해결을 위한 리팩토링 - SMS 스캔 화면 UI/UX 개선 및 기능 강화 - 상세 화면 컨트롤러 로직 개선 - 알림 서비스 및 구독 URL 매칭 기능 추가 - CLAUDE.md 프로젝트 가이드라인 대폭 확장 - 전반적인 코드 구조 개선 및 타입 안정성 강화 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -33,23 +33,71 @@ class SubscriptionCategoryHelper {
|
||||
}
|
||||
|
||||
// 카테고리 ID가 없거나 카테고리를 찾을 수 없는 경우 서비스 이름 기반 분류
|
||||
// OTT
|
||||
if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.ottServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('OTT 서비스')) {
|
||||
categorizedSubscriptions['OTT 서비스'] = [];
|
||||
}
|
||||
categorizedSubscriptions['OTT 서비스']!.add(subscription);
|
||||
}
|
||||
// 음악
|
||||
else if (_isInCategory(
|
||||
if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.musicServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('음악 서비스')) {
|
||||
categorizedSubscriptions['음악 서비스'] = [];
|
||||
if (!categorizedSubscriptions.containsKey('음악')) {
|
||||
categorizedSubscriptions['음악'] = [];
|
||||
}
|
||||
categorizedSubscriptions['음악 서비스']!.add(subscription);
|
||||
categorizedSubscriptions['음악']!.add(subscription);
|
||||
}
|
||||
// AI
|
||||
// OTT(동영상)
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.ottServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('OTT(동영상)')) {
|
||||
categorizedSubscriptions['OTT(동영상)'] = [];
|
||||
}
|
||||
categorizedSubscriptions['OTT(동영상)']!.add(subscription);
|
||||
}
|
||||
// 저장/클라우드
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.storageServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('저장/클라우드')) {
|
||||
categorizedSubscriptions['저장/클라우드'] = [];
|
||||
}
|
||||
categorizedSubscriptions['저장/클라우드']!.add(subscription);
|
||||
}
|
||||
// 통신 · 인터넷 · TV
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.telecomServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('통신 · 인터넷 · TV')) {
|
||||
categorizedSubscriptions['통신 · 인터넷 · TV'] = [];
|
||||
}
|
||||
categorizedSubscriptions['통신 · 인터넷 · TV']!.add(subscription);
|
||||
}
|
||||
// 생활/라이프스타일
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.lifestyleServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('생활/라이프스타일')) {
|
||||
categorizedSubscriptions['생활/라이프스타일'] = [];
|
||||
}
|
||||
categorizedSubscriptions['생활/라이프스타일']!.add(subscription);
|
||||
}
|
||||
// 쇼핑/이커머스
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.shoppingServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('쇼핑/이커머스')) {
|
||||
categorizedSubscriptions['쇼핑/이커머스'] = [];
|
||||
}
|
||||
categorizedSubscriptions['쇼핑/이커머스']!.add(subscription);
|
||||
}
|
||||
// 프로그래밍
|
||||
else if (_isInCategory(subscription.serviceName,
|
||||
SubscriptionUrlMatcher.programmingServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('프로그래밍')) {
|
||||
categorizedSubscriptions['프로그래밍'] = [];
|
||||
}
|
||||
categorizedSubscriptions['프로그래밍']!.add(subscription);
|
||||
}
|
||||
// 협업/오피스
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.officeTools)) {
|
||||
if (!categorizedSubscriptions.containsKey('협업/오피스')) {
|
||||
categorizedSubscriptions['협업/오피스'] = [];
|
||||
}
|
||||
categorizedSubscriptions['협업/오피스']!.add(subscription);
|
||||
}
|
||||
// AI 서비스
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.aiServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('AI 서비스')) {
|
||||
@@ -57,29 +105,13 @@ class SubscriptionCategoryHelper {
|
||||
}
|
||||
categorizedSubscriptions['AI 서비스']!.add(subscription);
|
||||
}
|
||||
// 프로그래밍/개발
|
||||
else if (_isInCategory(subscription.serviceName,
|
||||
SubscriptionUrlMatcher.programmingServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('프로그래밍/개발 서비스')) {
|
||||
categorizedSubscriptions['프로그래밍/개발 서비스'] = [];
|
||||
}
|
||||
categorizedSubscriptions['프로그래밍/개발 서비스']!.add(subscription);
|
||||
}
|
||||
// 오피스/협업 툴
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.officeTools)) {
|
||||
if (!categorizedSubscriptions.containsKey('오피스/협업 툴')) {
|
||||
categorizedSubscriptions['오피스/협업 툴'] = [];
|
||||
}
|
||||
categorizedSubscriptions['오피스/협업 툴']!.add(subscription);
|
||||
}
|
||||
// 기타 서비스
|
||||
// 기타
|
||||
else if (_isInCategory(
|
||||
subscription.serviceName, SubscriptionUrlMatcher.otherServices)) {
|
||||
if (!categorizedSubscriptions.containsKey('기타 서비스')) {
|
||||
categorizedSubscriptions['기타 서비스'] = [];
|
||||
if (!categorizedSubscriptions.containsKey('기타')) {
|
||||
categorizedSubscriptions['기타'] = [];
|
||||
}
|
||||
categorizedSubscriptions['기타 서비스']!.add(subscription);
|
||||
categorizedSubscriptions['기타']!.add(subscription);
|
||||
}
|
||||
// 미분류된 서비스
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user