public async Task <SonucModel <IadeAlSonucViewModel> > IadeAl(IadeAlViewModel model)
        {
            var oduncKey = model.OduncKey;

            var sonuc = new SonucModel <IadeAlSonucViewModel>
            {
                Tip        = SonucTip.Belirsiz,
                HataMesaji = "Iade Alma İşlemi Gerçekleşemedi"
            };

            var oduncAlinmisKitap = _kitapOduncRepository.SelectInclude(k => k.Kitap.Yazar).Where(o => o.KitapOduncKey == oduncKey).FirstOrDefault();

            if (oduncAlinmisKitap == null)
            {
                sonuc.HataMesaji = "Ödünç Alınmış Kitap Bulunamadı";
                sonuc.Tip        = SonucTip.Basarisiz;
                return(sonuc);
            }

            var uye = await _uyeRepository.FindAsync(u => u.UyeKey == oduncAlinmisKitap.UyeKey);

            if (uye == null)
            {
                sonuc.HataMesaji = "Uye Bulunamadı";
                sonuc.Tip        = SonucTip.Basarisiz;
                return(sonuc);
            }

            var kitap = await _kitapRepository.FindAsync(k => k.KitapKey == oduncAlinmisKitap.KitapKey);

            if (kitap == null)
            {
                sonuc.HataMesaji = "Kitap Bulunamadı";
                sonuc.Tip        = SonucTip.Basarisiz;
                return(sonuc);
            }

            oduncAlinmisKitap.KitapOduncDurum = (int)KitapDurum.Kutuphanede;
            oduncAlinmisKitap.GetirisTarihi   = DateTime.Now;

            var guncellemeSonuc = await _kitapOduncRepository.UpdateAsync(oduncAlinmisKitap);

            if (guncellemeSonuc > 0)
            {
                kitap.KitapDurumKey = (int)KitapDurum.Kutuphanede;

                var kitapDurumGuncelle = await _kitapRepository.UpdateAsync(kitap);

                if (kitapDurumGuncelle > 0)
                {
                    sonuc.HataMesaji = $"{kitap.Ad} kitabı {uye.Ad} {uye.Soyad}'den iade alınmıştır.";
                    sonuc.Tip        = SonucTip.Basarili;
                    sonuc.Data       = new IadeAlSonucViewModel()
                    {
                        DemirbasNo    = oduncAlinmisKitap.Kitap.DemirbasNo,
                        KitapAd       = oduncAlinmisKitap.Kitap.Ad,
                        KitapOduncKey = oduncAlinmisKitap.KitapOduncKey,
                        Yazar         = oduncAlinmisKitap.Kitap.Yazar.Ad
                    };
                    return(sonuc);
                }
            }
            return(sonuc);
        }
        public async Task <SonucModel <KitapKayitViewModel> > KitapKaydetGuncelle(KitapKayitViewModel model)
        {
            var sonuc = new SonucModel <KitapKayitViewModel>
            {
                Tip        = SonucTip.Belirsiz,
                HataMesaji = "Kitap Kaydetme İşlemi Gerçekleştirilmedi."
            };

            var yazar = await _yazarRepository.FindAsync(x => x.Ad == model.Yazar.Ad);

            var yayinevi = await _yayineviRepository.FindAsync(x => x.Ad == model.Yayinevi.Ad);

            // Eğer autocomplete'te olmayan bir yazar veya yayinevi girildiyse ekle.
            if (yazar == null)
            {
                yazar = new Yazar
                {
                    Ad = model.Yazar.Ad
                };
                await _yazarRepository.InsertAsync(yazar);

                yazar = await _yazarRepository.FindAsync(x => x.Ad == model.Yazar.Ad);
            }

            if (yayinevi == null)
            {
                yayinevi = new Yayinevi
                {
                    Ad = model.Yayinevi.Ad
                };
                await _yayineviRepository.InsertAsync(yayinevi);

                yayinevi = await _yayineviRepository.FindAsync(x => x.Ad == model.Yayinevi.Ad);
            }

            if (model.KitapKey > 0)
            {
                var guncellenecekKitap = await _kitapRepository.GetByIdAsync(model.KitapKey);

                guncellenecekKitap.Ad                = model.Ad;
                guncellenecekKitap.Isbn              = model.Isbn;
                guncellenecekKitap.YazarKey          = yazar.YazarKey;
                guncellenecekKitap.YayineviKey       = yayinevi.YayineviKey;
                guncellenecekKitap.KitapHakkindaOzet = model.KitapHakkindaOzet;
                guncellenecekKitap.SayfaSayisi       = Convert.ToInt32(model.SayfaSayisi);
                var guncellemeSonuc = await _kitapRepository.UpdateAsync(guncellenecekKitap);

                if (guncellemeSonuc > 0)
                {
                    sonuc.HataMesaji = $"Kitap Bilgileri Güncellenmiştir.";
                    sonuc.Tip        = SonucTip.Basarili;
                    sonuc.Data       = model;
                    return(sonuc);
                }
            }
            else
            {
                Kitap kitap = new Kitap()
                {
                    Ad                = model.Ad,
                    KitapDurumKey     = (int)KitapDurum.Kutuphanede,
                    Isbn              = model.Isbn,
                    KitapHakkindaOzet = model.KitapHakkindaOzet,
                    SayfaSayisi       = Convert.ToInt32(model.SayfaSayisi),
                    YazarKey          = yazar.YazarKey,
                    YayineviKey       = yayinevi.YayineviKey,
                };

                var eklemeSonuc = await _kitapRepository.InsertAsync(kitap);

                var eklenenKitap = await _kitapRepository.FindAsync(x => x.Ad == model.Ad);

                if (eklemeSonuc > 0)
                {
                    eklenenKitap.DemirbasNo = DemirbasNoUret(eklenenKitap.KitapKey);

                    var eklenenKitabiGuncelle = await _kitapRepository.UpdateAsync(eklenenKitap);

                    if (eklenenKitabiGuncelle > 0)
                    {
                        sonuc.HataMesaji = $"{model.Ad} Kitap Olarak Eklenmiştir.";
                        sonuc.Tip        = SonucTip.Basarili;
                        sonuc.Data       = new KitapKayitViewModel()
                        {
                            KitapKey          = eklenenKitap.KitapKey,
                            Ad                = eklenenKitap.Ad,
                            Isbn              = eklenenKitap.Isbn,
                            SayfaSayisi       = Convert.ToString(eklenenKitap.SayfaSayisi),
                            KitapHakkindaOzet = eklenenKitap.KitapHakkindaOzet,
                            KitapDurumKey     = eklenenKitap.KitapDurumKey
                        };
                    }

                    return(sonuc);
                }
            }

            return(sonuc);
        }