Files
taxbaik/TaxBaik.Infrastructure/Repositories/ConsultationRepository.cs
kjh2064 79492184d0
TaxBaik CI/CD / build-and-deploy (push) Successful in 55s
TaxBaik Browser E2E / browser-e2e (push) Failing after 1m53s
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>
2026-06-28 00:01:16 +09:00

36 lines
1.4 KiB
C#

namespace TaxBaik.Infrastructure.Repositories;
using Dapper;
using TaxBaik.Domain.Entities;
using TaxBaik.Domain.Interfaces;
public class ConsultationRepository(IDbConnectionFactory connectionFactory) : BaseRepository(connectionFactory), IConsultationRepository
{
public async Task<IEnumerable<Consultation>> GetByClientIdAsync(int clientId, CancellationToken ct = default)
{
using var conn = Conn();
return await conn.QueryAsync<Consultation>(
@"SELECT id, client_id, consultation_date, service_type, summary, result, fee, created_at
FROM consultations
WHERE client_id = @ClientId
ORDER BY consultation_date DESC, id DESC",
new { ClientId = clientId });
}
public async Task<int> CreateAsync(Consultation consultation, CancellationToken ct = default)
{
using var conn = Conn();
return await conn.QueryFirstAsync<int>(
@"INSERT INTO consultations (client_id, consultation_date, service_type, summary, result, fee, created_at)
VALUES (@ClientId, @ConsultationDate, @ServiceType, @Summary, @Result, @Fee, NOW())
RETURNING id",
consultation);
}
public async Task DeleteAsync(int id, CancellationToken ct = default)
{
using var conn = Conn();
await conn.ExecuteAsync("DELETE FROM consultations WHERE id = @Id", new { Id = id });
}
}