Skip to content

کلاس GetBookingQueryHandler

این کلاس مسئول پردازش درخواست‌های دریافت اطلاعات رزرو است. این کلاس از الگوی CQRS پیروی می‌کند و به عنوان یک Query Handler عمل می‌کند.

ویژگی‌های کلیدی

  1. پردازش دریافت اطلاعات رزرو:

    • مدیریت تراکنش‌ها و ذخیره‌سازی
    • استفاده از الگوی Query Handler برای جداسازی مسئولیت‌ها
  2. Dependency Injection:

    • استفاده از DI برای مدیریت وابستگی‌ها
    • افزایش تست‌پذیری و انعطاف‌پذیری

ساختار کد

csharp
internal sealed class GetBookingQueryHandler : IQueryHandler<GetBookingQuery, BookingResponse>
{
    private readonly ISqlConnectionFactory _sqlConnectionFactory;

    public GetBookingQueryHandler(ISqlConnectionFactory sqlConnectionFactory)
    {
        _sqlConnectionFactory = sqlConnectionFactory;
    }

    public async Task<Result<BookingResponse>> Handle(GetBookingQuery request, CancellationToken cancellationToken)
    {
        using var connection = _sqlConnectionFactory.CreateConnection();

        const string sql = """
            SELECT
                id AS Id,
                apartment_id AS ApartmentId,
                user_id AS UserId,
                status AS Status,
                price_for_period_amount AS PriceAmount,
                price_for_period_currency AS PriceCurrency,
                cleaning_fee_amount AS CleaningFeeAmount,
                cleaning_fee_currency AS CleaningFeeCurrency,
                amenities_up_charge_amount AS AmenitiesUpChargeAmount,
                amenities_up_charge_currency AS AmenitiesUpChargeCurrency,
                total_price_amount AS TotalPriceAmount,
                total_price_currency AS TotalPriceCurrency,
                duration_start AS DurationStart,
                duration_end AS DurationEnd,
                created_on_utc AS CreatedOnUtc
            FROM bookings
            WHERE id = @BookingId
            """;

        var booking = await connection.QueryFirstOrDefaultAsync<BookingResponse>(sql, new { request.BookingId });

        return booking;
    }
}

نحوه کار

  1. دریافت درخواست:

    • دریافت شناسه رزرو برای دریافت اطلاعات
    • اعتبارسنجی اولیه داده‌ها توسط Validator
  2. پردازش درخواست:

    • بررسی وجود رزرو
    • دریافت اطلاعات رزرو و مدیریت تراکنش‌ها
  3. ذخیره‌سازی:

    • ذخیره تغییرات با استفاده از UnitOfWork
    • بازگرداندن نتیجه در صورت موفقیت

مزایای این طراحی

  1. جداسازی مسئولیت‌ها:

    • هر کلاس تنها یک وظیفه مشخص دارد
    • رعایت اصل Single Responsibility
  2. قابلیت تست‌پذیری بالا:

    • امکان mock کردن وابستگی‌ها
    • تست‌های مجزا برای هر بخش
  3. مدیریت خطا:

    • استفاده از الگوی Result برای مدیریت خطاها
    • بازگشت پیام‌های خطای معنادار

Alireza Abasi - Released under the MIT License.