#20- Asp.NET Core 6 + Angular İle Mini E-Ticaret | Fluent Validation İle ValidationFilter

Поділитися
Вставка
  • Опубліковано 22 кві 2022
  • Github : github.com/gncyyldz
    #aspnetcore6 #angular #eticaret #aspnetcoreuygulama #onionarchitecture #angular #angular13 #fluentvalidation
    Bu video Gençay Yıldız tarafından NGAkademi bünyesinde ücretsiz çekilmiştir.
    Gençay Yıldız'ın Bloğu
    www.gencayyildiz.com/blog/
    Güncel Duyuru ve Bildiriler İçin Sosyal Medya Hesaplarımız
    / ngakademi.sosyal
    / ngakademi
    / ngakademii
    Bana destek olmak için kanalıma üye olabilirsiniz:
    / gençay yıldız

КОМЕНТАРІ • 78

  • @ozanfiliz4636
    @ozanfiliz4636 2 роки тому +21

    "Lütfen stok bilgisini adam gibi giriniz."
    Hocam harikasınız 😂😂😂

    • @tunazorlu
      @tunazorlu Рік тому +2

      ben "ya neyse artık" girdim :D

  •  2 роки тому +36

    Değerli arkadaşlar,
    46:55'te aldığımız hatanın sebebi ilgili parametrenin tip güvenliğini sağlamak için verdiğimiz yanlış formattan kaynaklanmaktadır. Eğer ki parametrenin bir function olduğunu bildirmek istiyorsak aşağıdaki formatta tip güvenliğini sağlıklı bir şekilde sağlayabiliriz.
    -> errorCallBack?: (errorMessage: string) => void
    ***********
    create(product: Create_Product, successCallBack?: any, errorCallBack?: (errorMessage: string) => void) {
    ...
    }

    • @semihatalay865
      @semihatalay865 2 роки тому

      Hocam yorumu sabitlerseniz iyi olur .

    • @emrecoskun4171
      @emrecoskun4171 2 роки тому +1

      Hocam iyi günler, Bu şekilde yapsak da yapmasakta subscribe'ın üstünü çiziyor muhtemelen bir şey daha istiyor ama çözemedim github üzerinden kodlarınıza baktım fakat orda da aynısını yapmışsınız subscribe etmediği için kayıt almıyor sanırım.

    • @emrecoskun4171
      @emrecoskun4171 2 роки тому +1

      Hocam kusura bakmayın swagger açık değilmiş :D. Kolay gelsin iyi çalışmalar.

    • @semihatalay865
      @semihatalay865 2 роки тому

      @@emrecoskun4171 swagger'dan kaynaklı mı ciziyormus bende de ustunu ciziyor

    • @emreaka3965
      @emreaka3965 2 роки тому

      @@semihatalay865 Onunla alakası yoktur.

  • @salam2568
    @salam2568 Місяць тому +2

    17:12 Kullanıcıya hitap edicek şekilde yazmamız doğru olucaktır."Orda ürünün adını istiyoruz sende belki zeka problemi ola bilir. Lütfen adını giriniz". Harikasınız hocam))

  • @yazilimciyizBiz
    @yazilimciyizBiz Рік тому +2

    11.03.2023 Tekrar dan yazdım programı ve yeniden dinledim. Hocam bu videoya alma düşüncesi ne kadar güzel bir nimet. Yoksa nerden bulacaktık sizi, Tekrar Tekrar...

  • @Furki4_4
    @Furki4_4 Рік тому +3

    Teşekkürler hocam. Son 5 gündür kafayı toparlayıp adamakıllı çalışamıyordum, sonunda tekrardan seriye devam edebildim. Hepimize geçmiş olsun...

    • @muhammedyucedag
      @muhammedyucedag Рік тому

      furkan sizin iletişime geçebileceğim bir linkedin hesabınız varmıdır ?

  • @beyazbiyaz
    @beyazbiyaz 4 місяці тому +1

    Yine çok yerinde ve güzel bir anlatım olmuş. Teşekkürler

  • @muhmkaraca
    @muhmkaraca 2 роки тому +3

    Hocam emeğinize sağlık çok şey öğreniyoruz. Şu oynat listesinin değeri paha biçilmez. 🚀

  • @kazimkesler
    @kazimkesler 4 місяці тому +1

    İzlemeye ve uygulamaya devam ediyorum, daha önceki ef core, net core vs kurslarınızı tamamıyla bitirdim. Emeklerin boşuna gitmiyor bilgin olsun Gencay baba

  • @sevgibahcemmm5540
    @sevgibahcemmm5540 2 роки тому +3

    Hocam emeğine yüreğine sağlık çok başarılı bir eğitim oluyor. Çok çok teşekkürler

  • @mesutdemirci7933
    @mesutdemirci7933 2 роки тому +1

    Hocam emeğinize sağlık çok şey öğreniyoruz.

  • @tek1774
    @tek1774 2 роки тому +1

    sen nasıl bir kralsın emeğinize sağlık

  • @nihatyavuz2206
    @nihatyavuz2206 2 роки тому +1

    ohh sahurluk videomuz da gelmiş :)) elinize sağlık hocam

  • @ilhanylmaz5977
    @ilhanylmaz5977 Рік тому +3

    hocam 4 ay geriden ama azimle geliyoruz:) emeğinize sağlık.

  • @theentein
    @theentein 2 роки тому +1

    Hocam selam, kulaklıkla dinleyenler için arkaplandan çok ses geliyor. Bunu çözmek için obs stüdyo kullanabilirsiniz. Ekran kaydınızı onla alıp, arka plan sesini kaldır filtresini eklerseniz arka plandaki hışırtı çok büyük ölçüde kalkacaktır. Gene mouse tıklama sesi anlık klavye seslerini de büyük ölçüde kaldırır. Kendi eğitim kanalımda öyle yapıyorum ben de :)

  • @berkdeveloper
    @berkdeveloper 2 роки тому +3

    20:06 Hocam çok sempatiksiniz :D

  • @abdulkadirkg
    @abdulkadirkg 2 роки тому +3

    Nöbetteyiz gençay hocam 😂

  • @korayozyurt2341
    @korayozyurt2341 2 роки тому +1

    Teşekkürler hocam emeğinize sağlık, Özellikle hata mesajları kısmına çok güldüm geliştirme aşamasında o hata mesajlarını yazanlar var 😁

  • @yazilimciyizBiz
    @yazilimciyizBiz Рік тому +2

    14.02.2023 Nihayet Ugulamalı Seyrettim bitti.
    çok zorlandığım bir bölüm. en az 5 kere seyr ettim. sanırım benim sade olayları algılamama problemim var..

  • @u.dinozor
    @u.dinozor 2 роки тому +2

    Hocam bir şey soracaktım. Entity metodlarında "SaveChanges" ekledik. Zannedersem bu tüm değişiklikleri aynı anda kaydetmeye çalıştığından transaction görevi de görüyor. Yani 10 tane işle varsa 6. hatalı ise hiçbirini kaydetmiyor. Ama bu durumda değişiklikler tracking 'de hala duruyor. Sonra 2 işlem daha eklense, 12 işlemi save etmeye kalkacak ve yine 6. hatalı olduğundan yapılamayacak.
    Hatalı işlem var olduğu durumlar için RejectChanges diye metot koymamız gerekmiyor mu?
    Teşekkürler

  • @yusufakkurt2308
    @yusufakkurt2308 Рік тому

    errorlarda tip güvenliği için service'deki create fonksiyonun parametresini tanımlarken şu şekilde: errorCallback?: (message?: string) => void

  • @nihatyavuz2206
    @nihatyavuz2206 2 роки тому

    Hocam veritabanından dönen validasyonu backend de nasıl yakalayıp client e göndereceğiz. 1 örnek yapsak güzel olabilir.

  • @dogukanergin5259
    @dogukanergin5259 Рік тому

    Atladığım bir nokta yoka CQRS pattern'a geçtiğimiz için burada validasyon uyguladığımız VM nesnesi artık kullanılmıyor. Onun yerine ilgili Request nesnesini vermemiz gerekiyor.

  • @HasanInan-mj7ol
    @HasanInan-mj7ol Рік тому

    Hocam çoklu dil desteği olan sitelerde bu hata mesajlarının ilgili dil seçeneğine göre verilebilmesini nasıl sağlayacağız? Veritabanında ilgili dil seçeneğinin hata mesajını okutup burada o dile ait mesajı nasıl gösterebiliriz?

  • @hilmicelayir3750
    @hilmicelayir3750 2 роки тому +1

    Hayırlı sahurlar sevgili yiyenim

  • @diary3613
    @diary3613 Місяць тому +1

    Lanlı Lunlu felan yok lütfen rica ediyosun,
    HAHAHAHAHA Hocam Cansın :)

  • @galaxy1066
    @galaxy1066 Рік тому

    Hocam Fluent Validation'un register işlemini daha önceden oluşturduğumuz ServiceRegistration sınıfında oluştursak SOLID'e daha uygun olmaz mıydı?

  • @omerfarukcan3982
    @omerfarukcan3982 Рік тому +3

    Dk 35:11 deprecated uyarısı alan arkadaşlar için (yani kodunuzun altı yeşil ile çiziliyorsa) kodu tazeledim belki yardımcı olur diye buraya bırakıyorum:
    builder.Services.AddFluentValidationAutoValidation().AddFluentValidationClientsideAdapters();
    builder.Services.AddValidatorsFromAssemblyContaining();
    builder.Services.AddControllers(options => options.Filters.Add())
    .ConfigureApiBehaviorOptions(options => options.SuppressModelStateInvalidFilter = true);

  • @semihatalay865
    @semihatalay865 2 роки тому

    Hocam emeğinize sağlık. Bir sorum olacaktı. Client bazlı validationlarda "Lütfen ürün adını boş geçmeyiniz" şeklinde mesajı yazmışken neden "Name alanı boş olmamalı" şeklinde mesaj fırlatıyor. Bir kısmı kaçırdım sanırım.

  • @fotouzun9527
    @fotouzun9527 Рік тому

    Merhaba hocam, httpclient servisindeki metodları kullanırken generic kısımlarını doldurmalimiyiz?

  • @khanbozkurt
    @khanbozkurt Рік тому

    Ben Validatorsleri bir yerde toplamak için, oluşturduğumuz Validators klasörü altında BaseValidators adında bir sınıf oluşturup bu şekilde prop olarak ekledim. Sonradan oluşturulacakları da ekleyebilmek için.
    public CreateProductValidator CreateProductValidator { get; set; }
    Bunu yeri ve yöntemi doğru mu?

  • @BurakBAKIR-om5iy
    @BurakBAKIR-om5iy Місяць тому

    Burada value'yu 0 verdiğimiz için ilgili alana tıklandığında 0 yazdığınız rakamlarla birlikte kalıyor, bunu önlemek için placeholder kullanabilirsiniz lakin o zaman da validasyondaki error mesajları default olarak geliyor ( ben çözümünü bulamadım, ne zaman value 0 verdim o zaman bizim özel error mesajlarımız ekrana geldi).
    Velhasıl hem value 0 kullanmak hem de tıklandığında 0 ın gitmesini istiyorsanız bunu yapabilirsiniz,
    selectAllText(event: any) {
    if(event.target.value == 0)
    event.target.select();
    }

  • @berkdeveloper
    @berkdeveloper 2 роки тому +1

    16:11 ve 16:12 klavye pert :D

  • @emreaka3965
    @emreaka3965 2 роки тому +1

    Hızınıza yetişemiyoruz :D

  • @yazilimciyizBiz
    @yazilimciyizBiz Рік тому +1

    41:43

  • @cenkozturk5396
    @cenkozturk5396 Рік тому +1

    Hocam şunu sormak isterim size. Validasyon işlemlerini neden bu kadar özelleştirdik yani validationfiltera ne kadar gerek vardı bunu anlayamadım. Örnek veriyorum bir iş görüşmesine girdim ve kodlarımı incelediler ve dedler ki ne gerek duydun nerden gordun amacın neydi dediklerinde bu validation filter adına nasıl bir cevap vermeliyim yani genel olarak bunu özelleştirip neden biz yapıyoruz bu işlemi ?

    • @cenkozturk5396
      @cenkozturk5396 Рік тому +1

      Anladığım kadarıyla hocam amacımız tamamen sunucuyu yormamak uygulamanın effectligini arttırmak örnek veriyorum controllera işlem gelmeden gelen isteği geri göndermek ve back end tarafını rahatlatmak gibi olduğunu düşünüorum galiba bu amaçlı bu filtreleri biz yaptık. Yani sistemi iyice biz yönetiyoruz

    •  Рік тому +1

      Aynen öyle, bir de bazı şeyleri merkezileştirip yönetebilmek için. Mesela validationlar'da yahut ileride göreceksin exception handling'de olduğu gibi...

  • @volvvol3899
    @volvvol3899 2 роки тому

    hocam validation yapısını projenin api bağımlılığının önlenmesi için backend kısmında kurulması daha mantıklı olmaz mı?

    •  2 роки тому +1

      Bence mantıklı olmaz. Nihayetinde ilgili uygulamanın iletişim kuracağı API'a uygun bir şekilde veriyi kullanıcıdan talep etmesi API içinde kolaylaştırıcı unsur olacaktır. Nihayetinde client'ın tek amacı bağımsızca API'ı tüketmek değil, tükettiği API'a uyarlı bir arayüz sağlamaktır.
      Bağımlılığı %100 sağlayacağım diye arayüzde API'a uyarlı operasyonları gerçekleştirmemek pek ideal bir yaklaşım olmayacaktır kanaatindeyim.
      Sevgiler.

    • @volvvol3899
      @volvvol3899 2 роки тому

      @ Hocam dönüşünüz için çok teşekkürler. Asıl anlayamadığım olay ileride web arayüzüne ek olarak android arayüzü oluşturacağımız zaman aynı yapı ve validation kurallarını uygulayacak olmasına rağmen tekrardan yazacağız ve en temelde bağlandığımız dry prensibini çiğneyeceğiz tabiki istisnai durumlar her zaman var ancak bize faydası ne olacak?
      öğrenciyim cahilliğime verin hocam 😂

  • @theentein
    @theentein 2 роки тому +1

    Hocam selam. Daha önce generic repository ile ve geleneksel mimari ile yaptığım tasarımda, Mapping işlemlerini Data katmanında yapmıştım. Bu mimaride nerede yapmam lazım? Örnek mapping kodum aşağıdaki gibi.
    public class KulturMap : IEntityTypeConfiguration
    {
    public void Configure(EntityTypeBuilder builder)
    {
    builder.HasKey(a => a.Id);
    builder.Property(a => a.CreatedDate).IsRequired();
    builder.Property(a => a.ModifiedDate).IsRequired();
    builder.Property(a => a.IsDeleted).IsRequired();
    builder.Property(a => a.CreatedByName).IsRequired();
    builder.Property(a => a.ModifiedByName).IsRequired();
    builder.Property(a => a.Title).IsRequired();
    builder.Property(a => a.Title).HasMaxLength(20);
    builder.HasIndex(a => a.Title).IsUnique();
    builder.Property(a => a.Description).IsRequired(false);
    builder.Property(a => a.Description).HasMaxLength(160);
    builder.Property(a => a.Thumbnail).HasMaxLength(250);
    builder.Property(a => a.Thumbnail).IsRequired(false);
    builder.Property(a => a.Ikon).HasMaxLength(30);
    builder.Property(a => a.Ikon).IsRequired(false);
    builder.ToTable("Kultures");
    }
    }
    Bu kodu da contextte çağırdım aşağıdaki gibi.
    builder.ApplyConfigurationsFromAssembly(typeof(WCoreContext).Assembly);
    Soğan mimarisinde mapping işlemini hangi katmanda yapmam daha doğru olur?

    •  2 роки тому +1

      Application.

    • @theentein
      @theentein 2 роки тому

      @ seed dataları da mı hocam?

    •  2 роки тому

      @@theentein pardon ben automapper sandım. Persistence da daha uygun olur.

    • @theentein
      @theentein 2 роки тому +1

      ​@ hem seed hem mapping yani fluent api işlerini pers katmanında hallediyorum o zaman. Sanırım doğru anladım. automapper veya herhangi başka 3. parti kütüphane kullanmayacağım projemde.

  • @Berk.demir.
    @Berk.demir. Рік тому +1

    Yorumları okuyup yeni kullanımını yapsam da foreach is not a function hatası alıyorum nasıl düzeltebilirim

    • @Berk.demir.
      @Berk.demir. Рік тому

      bilen birisi yardım ederse çok sevinirim 6-7 saattir bakıyorum ama bulamadım şimdi yatıcam :(

    • @denizdumanresmi
      @denizdumanresmi Рік тому

      @@Berk.demir. yorumda belirttim 2 ay geçmiş üzerinden bulamadıysan yine bakabilirsin.

  • @yazilimciyizBiz
    @yazilimciyizBiz Рік тому +1

    27.01.2023 izledim

  • @wallpapers_hd
    @wallpapers_hd 5 місяців тому

    Kullanımı değişmiş sanırım. Umarım doğru olmuştur;
    .subscribe({
    complete: successCallBack,
    error: (errorResponse: HttpErrorResponse) => {
    const _error: Array = errorResponse.error;
    let message = "";
    _error.forEach((v, index) => {
    v.value.forEach((_v, index) => {
    message += `${_v}`;
    });
    });
    errorCallBack(message);
    }
    });

  • @tunazorlu
    @tunazorlu Рік тому +2

    Fluent Validation özelinde program.cs de kullandığınız bazı builder'lar depreceated olmuş. onlar yerine
    builder.Services.AddControllers(options => options.Filters.Add())
    .ConfigureApiBehaviorOptions(options => options.SuppressModelStateInvalidFilter = true);
    builder.Services.AddFluentValidationAutoValidation();
    builder.Services.AddValidatorsFromAssemblyContaining();
    kullanarak devam ettim. Umarım hata yapmamışımdır.

    • @amasraa7489
      @amasraa7489 Рік тому

      cok tessekürler yarim saatir ugrasiyordum bir türlü Validasyon olmuyordu belkide cok ciddi manada zamanimi kurtardiniz

  • @muhammedfurkancolak1021
    @muhammedfurkancolak1021 Рік тому

    core.mjs:7643 ERROR TypeError: _error.forEach is not a function şöyle bir hata alıyorum yardımcı olabilicek var mı

    • @bunyaminavc719
      @bunyaminavc719 Рік тому

      Muhammed selam, Gençay Hocanın ilk yorumuna yapılan yanıtları incelersen hatanın sebebi ve çözüm yolu ile ilgili bilgilere ulaşabilirsin

    • @Berk.demir.
      @Berk.demir. Рік тому

      merhaba yeni kullanımını yapsam da hala aynı hatayı alıyorum acaba nasıl düzelttiniz

    • @muhammedfurkancolak1021
      @muhammedfurkancolak1021 Рік тому

      @@Berk.demir. ters tırnak işareti kullanarak düzelttim galiba (`)

    • @benbilmem98
      @benbilmem98 Рік тому

      @@Berk.demir. çözüm buldunuz mu?

  • @tahaozturkk
    @tahaozturkk Рік тому

    FluentValidation default hata mesajlarının bazılarını Türkçe gönderiyor bende bu hata mesajını nerede ayarlamıştım diye arıyordum. Meğerse hata mesajlarını kullanıcının bilgisayar diline göre ayarlayıp gönderiyormuş. "FluentValidation kutudan çıkar çıkmaz varsayılan doğrulama mesajları için çeşitli dillerde çeviriler sağlar. Çevirirken varsayılan olarak .NET çerçevesinin geçerli kullanıcı arabirimi kültüründe belirtilen dil kullanılacaktır ."

  • @denizdumanresmi
    @denizdumanresmi Рік тому +1

    _error.forEach is not a function hatası alanlar altta belirttiğim 2 for yönteminden birini kullanarak düzeltebilir.
    let _error2: {key: string, values: Array}[]
    = errRes.error;
    for (let key in _error2) {
    let value = _error2[key];
    msg += `${value}`
    }
    ------------------------------------------------
    Object.entries(_error2).forEach(([key,value])=>{
    msg += `${value}`;
    });
    -------------------------------------------------

    • @yusiff
      @yusiff Рік тому +2

      Merhaba, Program.cs'te .AddFluentValidation() kısmını eklerken siz de deprecated mesajı alıyor musunuz?

    • @ahmedhakanokumus
      @ahmedhakanokumus 7 місяців тому

      evet ve errorları yakalayamıyorum@@yusiff