Commit Graph

10 Commits

Author SHA1 Message Date
kjh2064 c65742a0c7 feat: implement admin inquiry create/edit/delete functionality
TaxBaik CI/CD / build-and-deploy (push) Successful in 48s
Core Components:
- Create reusable InquiryForm.razor component following SOLID principles
- Implement InquiryCreate.razor for registering new inquiries (offline, phone)
- Implement InquiryEdit.razor for modifying existing inquiries with delete
- Add DeleteAsync method to InquiryRepository and InquiryService
- Update InquiryList with 'Create' button and Edit link in table

Architecture:
- InquiryForm: Encapsulates form logic, can be reused for create/edit
- Service Layer: All operations go through InquiryService for cache invalidation
- Repository Pattern: Database operations isolated in InquiryRepository
- UI Consistency: Both pages follow admin-page-hero pattern

Features:
- Admin can create inquiries from phone/offline consultations
- Admin can modify inquiry details (name, phone, email, message, status, memo)
- Admin can delete inquiries with confirmation dialog
- All operations update dashboard cache
- Status validation and error handling throughout

Testing:
- Updated FakeInquiryRepository in tests to implement DeleteAsync
2026-06-28 16:45:29 +09:00
kjh2064 5053245575 feat: implement API-first architecture Phase 1 - Dashboard API
**Architecture Refactor (SOLID Principles):**
- Implement AdminDashboardController (REST API)
- Add dashboard summary endpoint
- Add upcoming filings endpoint
- Add recent inquiries endpoint
- Add monthly statistics endpoint

**Database Layer (Repository Pattern):**
- Extend IInquiryRepository with date range queries
- Implement CountByDateRangeAsync
- Implement CountByStatusAndDateAsync
- Extend InquiryRepository with new methods

**Service Layer (Single Responsibility):**
- Extend AdminDashboardService with API methods
- Add GetRecentInquiriesAsync
- Add GetMonthlyStatsAsync with caching

**Test Coverage:**
- Update FakeInquiryRepository mock with new methods

**SOLID Application:**
✓ Single Responsibility: Each class has one reason to change
✓ Open/Closed: Dashboard API can be extended without modifying existing code
✓ Dependency Inversion: Service depends on Repository abstraction
✓ Interface Segregation: API endpoints are focused and specific

Status: ✓ Compiles successfully (0 errors, 0 warnings)

Next phases:
- Add remaining API controllers (Announcement, Client, FAQ, TaxFiling)
- Refactor Blazor components to use API instead of services
- Implement JWT token refresh mechanism
- Add SignalR for change notifications

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 10:41:33 +09:00
kjh2064 79492184d0 feat: CRM Phase 1-2 완성 + 시즌 시뮬레이터 + 개인정보처리방침/이용약관
TaxBaik CI/CD / build-and-deploy (push) Successful in 55s
TaxBaik Browser E2E / browser-e2e (push) Failing after 1m53s
- WBS-CRM-02: 상담 이력 (consultations 테이블 V008, ClientDetail.razor)
- WBS-CRM-03: 문의→고객 전환 (V009 client_id FK, InquiryDetail 고객등록 버튼)
- WBS-CRM-04: 신고 일정 캘린더 (tax_filings 테이블 V010, TaxFilingList.razor)
- WBS-CRM-05: 문의 상태 5단계 확장 (V011, InquiryStatus enum, InquiryList 탭)
- WBS-MKT-04: 시즌 시뮬레이터 어드민 페이지 (SeasonSimulator.razor)
- WBS-UX-04: 개인정보처리방침 /taxbaik/privacy, 이용약관 /taxbaik/terms
- Dashboard.razor 마감 임박 신고 위젯 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 00:01:16 +09:00
kjh2064 f29f2c3cff 개선: 배포 검증과 관리자 UX 안정화
TaxBaik Browser E2E / browser-e2e (push) Failing after 1m3s
TaxBaik CI/CD / build-and-deploy (push) Failing after 2m46s
2026-06-27 20:57:09 +09:00
kjh2064 e3f548f163 feat: include inquiry status changer in alerts
TaxBaik Browser E2E / browser-e2e (push) Failing after 1m6s
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m26s
2026-06-27 16:36:31 +09:00
kjh2064 4f2d5b1777 feat: enrich inquiry telegram alerts
TaxBaik Browser E2E / browser-e2e (push) Successful in 34s
TaxBaik CI/CD / build-and-deploy (push) Failing after 1m9s
2026-06-27 16:10:58 +09:00
kjh2064 620491fa9f feat: notify inquiry status changes
TaxBaik Browser E2E / browser-e2e (push) Successful in 1m1s
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m33s
2026-06-27 16:04:23 +09:00
kjh2064 f54cab5562 feat: notify telegram on new inquiries
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m33s
TaxBaik Browser E2E / browser-e2e (push) Successful in 2m8s
2026-06-27 15:58:42 +09:00
kjh2064 28060b71be feat: harden auth ops and deployment baseline 2026-06-27 10:53:53 +09:00
kjh2064 06792e4e0f 구현: W2.3 애플리케이션 서비스 레이어
BlogService:
- GetBySlugAsync: 공개된 포스트 조회
- GetPublishedPagedAsync: 페이징된 포스트 목록 (카테고리 필터 옵션)
- GetAllForAdminAsync: 관리자용 전체 포스트 (발행 상태 무관)
- CreateAsync: 포스트 생성 (슬러그 자동 생성)
- UpdateAsync/DeleteAsync: 포스트 수정/삭제
- IncrementViewCountAsync: 조회수 증가 (fire-and-forget)
- GenerateSlug: 한국어 제목 → 로마자 슬러그 변환

InquiryService:
- SubmitAsync: 상담 신청 폼 제출
  * 이름, 전화번호 필수
  * 전화번호 정규식 검증 (010-XXXX-XXXX)
  * 문의 내용 필수
  * ValidationException 으로 입력값 오류 처리
- GetByIdAsync/GetPagedAsync: 문의 조회 및 필터링
- UpdateStatusAsync: 문의 상태 변경

추가:
- ValidationException: 비즈니스 검증 예외
- DependencyInjection: AddApplication() 확장 메서드

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:06:44 +09:00