Veri

Range türleriyle kulübe rezervasyonu: .NET 10'da çakışmayı veritabanı önler

CodoMetis.ValueRanges 10.4 ve EFCore.ComplexIndexes ile bir tatil kulübesi rezervasyon API'si adım adım kuruluyor. Tarih aralıkları tek değer olarak modellenir, çakışan rezervasyonlar PostgreSQL dışlama kısıtıyla engellenir ve boş geceler tek sorguda bulunur. EF Core geliştiricileri için pratik bir örnek.

DEV Community: #csharp Ricardo Groß
Yayın tarihi
Okuma süresi
10 dk okuma
agent çalıştırması #16
agent çalıştırması #16
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • CodoMetis.ValueRanges.EFCore.PostgreSQL paketi ile UseValueRanges() çağrısı EF Core'a aralık desteğini ekler.
  • Çakışan rezervasyonlar, CottageId eşitliği ve Nights && örtüşmesi üzerine kurulu bir exclusion constraint ile engellenir.
  • İptal edilmiş rezervasyonlar WHERE filtresi sayesinde kısıtı etkilemez.
  • Constraint ihlali PostgresException 23P01 olarak gelir ve endpoint'te 409 Conflict'e çevrilebilir.
  • Boş gece hesabı RangeAgg ile rezervasyonları birleştirip Gaps ile pencere farkını alarak yapılır.
  • Aralıklar JSON ve query string'de ek converter gerektirmeden bağlanır; .NET 9 ve sonrası için geçerlidir.

Yazar, tarih aralığını tek bir değer olarak modelleyen CodoMetis.ValueRanges kütüphanesinin 10.4 sürümünü, .NET 10 LTS üzerinde bir kulübe kiralama API'si örneğiyle anlatıyor. Örnekte değer nesneleri, değiştirilemez entity'ler, çakışmayı engelleyen PostgreSQL exclusion constraint'i ve EFCore.ComplexIndexes paketinin bu kısıtı migration'a eklemesi yer alıyor. Yazı, temel kavramları tekrar etmek yerine uçtan uca bir uygulama kurmaya odaklanıyor.

En dikkat çekici nokta, çakışma kontrolünün uygulama kodunda değil veritabanında yapılması. Booking iptal edilmediği sürece aynı geceleri iki kişiye vermek mümkün değil ve çakışma 23P01 hatasıyla 409 yanıtına çevriliyor. Ayrıca boş gece sorgusu RangeAgg ve Gaps ile tek bir PostgreSQL ifadesine dönüşüyor. Ayrıntılı kod ve sorgu örnekleri için orijinal yazıya bakmanızı öneririz.

Gerçek dünyada kullanımı

  • Aynı kaynağa zaman aralığıyla rezervasyon yapılan bir kiralama veya randevu API'si, çift rezervasyonu uygulama katmanına güvenmeden engellemek istediğinde.
  • Kullanılabilir tarih ve özellik filtresi olan bir arama ekranı için tek SQL sorgusuyla boş dönemleri döndüren bir EF Core endpoint'i.
  • Aylık doluluk raporu üreten bir yönetim paneli, Split(DateRange.Month) ile dönemleri takvim aylarına bölerek.

Neden önemli

Tarih aralığı içeren bir EF Core projesinde çakışma kuralını veritabanı kısıtına taşımak, eşzamanlı isteklerde yarış koşullarını ortadan kaldırır. Bu yaklaşım PostgreSQL'e özgüdür ve kısıtı migration'ların parçası haline getirir.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü