feat: CRM Phase 1-2 완성 + 시즌 시뮬레이터 + 개인정보처리방침/이용약관
- 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>
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
namespace TaxBaik.Domain.Entities;
|
||||
|
||||
public class Consultation
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int ClientId { get; set; }
|
||||
public DateTime ConsultationDate { get; set; }
|
||||
public string? ServiceType { get; set; }
|
||||
public string Summary { get; set; } = null!;
|
||||
public string? Result { get; set; }
|
||||
public decimal? Fee { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
}
|
||||
@@ -10,5 +10,8 @@ public class Inquiry
|
||||
public string Message { get; set; } = null!;
|
||||
public string Status { get; set; } = "new";
|
||||
public string? IpAddress { get; set; }
|
||||
public int? ClientId { get; set; }
|
||||
public string? AdminMemo { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace TaxBaik.Domain.Entities;
|
||||
|
||||
public class TaxFiling
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int ClientId { get; set; }
|
||||
public string FilingType { get; set; } = null!;
|
||||
public DateTime DueDate { get; set; }
|
||||
public string Status { get; set; } = "pending";
|
||||
public string? Memo { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
// join
|
||||
public string? ClientName { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,8 @@ namespace TaxBaik.Domain.Enums;
|
||||
public enum InquiryStatus
|
||||
{
|
||||
New = 0,
|
||||
Contacted = 1,
|
||||
Completed = 2
|
||||
Consulting = 1,
|
||||
Contracted = 2,
|
||||
Rejected = 3,
|
||||
Closed = 4
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace TaxBaik.Domain.Interfaces;
|
||||
|
||||
using TaxBaik.Domain.Entities;
|
||||
|
||||
public interface IConsultationRepository
|
||||
{
|
||||
Task<IEnumerable<Consultation>> GetByClientIdAsync(int clientId, CancellationToken ct = default);
|
||||
Task<int> CreateAsync(Consultation consultation, CancellationToken ct = default);
|
||||
Task DeleteAsync(int id, CancellationToken ct = default);
|
||||
}
|
||||
@@ -12,4 +12,6 @@ public interface IInquiryRepository
|
||||
Task<int> CountThisMonthAsync(CancellationToken cancellationToken = default);
|
||||
Task<int> CountByStatusAsync(string status, CancellationToken cancellationToken = default);
|
||||
Task UpdateStatusAsync(int id, string status, CancellationToken cancellationToken = default);
|
||||
Task UpdateAdminMemoAsync(int id, string? adminMemo, CancellationToken cancellationToken = default);
|
||||
Task LinkClientAsync(int inquiryId, int clientId, CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace TaxBaik.Domain.Interfaces;
|
||||
|
||||
using TaxBaik.Domain.Entities;
|
||||
|
||||
public interface ITaxFilingRepository
|
||||
{
|
||||
Task<IEnumerable<TaxFiling>> GetByClientIdAsync(int clientId, CancellationToken ct = default);
|
||||
Task<IEnumerable<TaxFiling>> GetUpcomingAsync(int daysAhead, CancellationToken ct = default);
|
||||
Task<TaxFiling?> GetByIdAsync(int id, CancellationToken ct = default);
|
||||
Task<int> CreateAsync(TaxFiling filing, CancellationToken ct = default);
|
||||
Task UpdateAsync(TaxFiling filing, CancellationToken ct = default);
|
||||
Task DeleteAsync(int id, CancellationToken ct = default);
|
||||
}
|
||||
Reference in New Issue
Block a user