Files
taxbaik/TaxBaik.Infrastructure/Repositories/CategoryRepository.cs
T
kjh2064 d5918c562c 구현: W2 도메인·인프라·서비스 레이어
Domain 레이어:
- Enums: InquiryStatus (New/Contacted/Contracted/Closed)
- Enums: ServiceType (기장/종소세/부가세/양도세/증여상속/기타)
- Entities: Category, BlogPost, Inquiry, AdminUser (DB 매핑)
- Interfaces: IBlogPostRepository, ICategoryRepository, IInquiryRepository, IDbConnectionFactory

Infrastructure 레이어:
- DbConnectionFactory: PostgreSQL 연결 팩토리 (Npgsql)
- BlogPostRepository: GetBySlug, GetPublishedPaged, Create, Update, Delete, IncrementViewCount
- CategoryRepository: GetAll, GetBySlug
- InquiryRepository: Create, GetPaged, UpdateStatus
- NuGet 의존성: Dapper 2.1.15, Npgsql 8.0.1, Configuration, DependencyInjection
- DependencyInjection: AddInfrastructure() 확장 메서드

기술 결정:
- Dapper로 SQL 완전 제어
- PostgreSQL 다중 쿼리 (QueryMultiple) 페이징 최적화
- 한국어 파라미터 처리 (::int, ::text 타입 명시)

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

24 lines
877 B
C#

namespace TaxBaik.Infrastructure.Repositories;
using Dapper;
using TaxBaik.Domain.Entities;
using TaxBaik.Domain.Interfaces;
public class CategoryRepository(IDbConnectionFactory connectionFactory) : BaseRepository(connectionFactory), ICategoryRepository
{
public async Task<IEnumerable<Category>> GetAllAsync(CancellationToken cancellationToken = default)
{
using var conn = Conn();
return await conn.QueryAsync<Category>(
"SELECT id, name, slug, sort_order FROM categories ORDER BY sort_order");
}
public async Task<Category?> GetBySlugAsync(string slug, CancellationToken cancellationToken = default)
{
using var conn = Conn();
return await conn.QueryFirstOrDefaultAsync<Category>(
"SELECT id, name, slug, sort_order FROM categories WHERE slug = @Slug",
new { Slug = slug });
}
}