-
Notifications
You must be signed in to change notification settings - Fork 0
/
DescriptionText.txt
74 lines (61 loc) · 5.97 KB
/
DescriptionText.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Projenin amacı, kullanıcıların alışveriş süreçlerini kolaylaştırmak adına almayı planladıkları ürünlerin listelerini oluşturabilmesi ve bu listelerin takiplerini yapabilmesidir.
Uygulamanın kullanılabilmesi için üye olmak gerekmektedir.
• Kullanıcılar sisteme kayıtlı oldukları bilgilerle giriş yaptıktan sonra işlevsellikleri kullanabileceklerdir.
• Kullanıcılar sisteme giriş yaptıktan sonra oluşturdukları alışveriş listelerini göreceklerdir. Buradan istedikleri listeyi seçip ürün ekleme ekrana geçebileceklerdir.
• Ürün ekleyebilmeleri için listelenen ürünlerden istediklerine tıklayıp beklenen bilgileri girecek ve ekle diyeceklerdir.
• Ürünlerin içerisinde ismiyle arama yapılabilecektir. İstenirse kategorisine göre de filtrelenecektir.
• Kullanıcılar listeleri sadece ürün ekleyerek değil, ürün kaldırarak da güncelleyebileceklerdir.
• Kullanıcı bir liste için “Alışverişe Çıkıyorum” seçeneğini işaretlediğinde artık o listeye ürün ekleyemeyecektir.
• Kullanıcı ürünleri aldıkça liste üzerinden ilgili ürünü seçip “Aldım” diye işaretleyecektir. Liste için “Alışveriş Tamamlandı” seçeneğini işaretlediğinde liste müdaheleye açık hale gelecektir.
• Sistemde yer alan ürünleri bilgileriyle beraber sistem yöneticisi ekleyecektir.
----------------------------------
1-Katmanlar oluşturuldu.
2-EntityFramework kütüphanesi DataAccess ve Core katmanlarına yüklendi.
3-ShoppingListContext.cs bağlantı clası DataAccessde EntityFramework klasörüne oluşturuldu.
4-Core Katmanına--> IEntity,IDto,
IEntityRepository (CRUD işlemelerinin generic olrak oluşturuldu)
EfEntityRepositoryBase ((TEntity,TContext) handi tablo, hangi veritabanı verillirse ona göre CRUD işlemlerini yapacak base sınıfı oluşturuldu)
5-Entities altında DTOs klasörüne Joinlediğim tabloları oluşturdum
6-Core katmanında Results yapılandırması yapıldı. Business sınıflarını bu yapıya göre refactor edildi (kodu iyileştirme)
*Core->Utilities->Result klasörüne Success ve Error olma durumları ayrı ayrı yazıldı
*Business->Constants klasörü oluşturuldu.Proje sabitlerini burada tutacağım->Messages.cs classında mesajlarımız tutulacak
7-
*.FluentValidation desteği eklendi.
Kullanıcı adı boş geçilemez,Password alanı en az sekiz karakter, en az bir harf ve bir sayı içermelidir... gibi kurallar verildi.
*.Core katmanına CrossCuttingConcerns klasörüne ValidationTool oluşturuldu.
*.AOP yapısı için Autofac desteği eklendi.
Arka planda otomatik bağlantıları yapacak.Autofac bir IoC Containerdır.
*.AOP (Aspect Oriented Programming) desteği eklendi.Intercepter(arayaGirme) alt yapısını oluşturuldu.
*.Validation; Aspect(AOP) yapıya taşındı.(Autofac kulanılarak)
ValidationAspect
*!!! Burada client-side tarafta hataları gösteremeyince;
Business-> Extentions ->DependecyEnjection.cs clasında "AddBusinessService" isminde extention methot oluşturuldu.Ve program.cs ye kullanağı service "builder.Services.AddBusinessService()" eklendi.
Burada hem Autofac hem ActionFilter(.Net'in kendi DependencyEnjection özellliği) yapısı aynı anda çalışır
8-Kullanıcı CRUD işlemleri yapıldı.(List,AddUserDto,EditUserDto,DeleteUserDto...)
Kullanıcı Login,Register,Profile sayfaları yapıldı
9-Login sayfasında Role kontrolü CookieAuthentication ile yapıldı.
--AdminController'a [Authorize(Roles ="admin")] ___admin olanalar girsin
--UserController'ın "Logout" ve "Profile" actionlarına yetkisi varsa(login olduysa) erişebilsin
--Layout.cshtml kısmındada admin kişinin göreceği paneller ayarlandı
10-Ürünlere resim eklendi.
ProductController da Create actionında ürün eklerken IFormFile tipinde file parametresiyle dosya ekleme işlemide eklendi.
11-Kullanıcının; Alışveriş Listelerini listeleme, ürün ekleme ve ürün silme işlemleri yapıldı.ProductListController da ;
--Login olan kullanıcının AlışverişListesini gösterme..... ProductListByUserId() actionı
--AlışVerişListesi içindeki ürünleri gösterme............. ProductListShowInside(int productListId)
--AlışVerişListesinin içine Ürünlistesinden ürün ekleme ve silme.... ProductAdd(int productListId,int productId), ProductDeleteFromProductList(int productListId,int productId)
Hangi kullanıcının hangi alışverişlistesine hangi ürün eklenecek 3 parametre alır(userId,productListId,productId)
ProductListDetails tablosu ara tablo olduğu için entity sınıfı yok.EntityFramework'den (context. deyip) erişemediğim için; execute SqlRaw kullanarak direk veritabanına erişip eklendi
12-Kullanıcı alışverişe çıkarken “Alışverişe çıkıyorum” seçeneğini seçerse listeye ürün ekleyememelidir.
ProductListByUserId.cshtml view sayfasında checkbox eklendi. Checkbox ın onclick olması ajax post işlemi ile gerçekleştirildi.
13-Alışveriş listesinde alınan ürünlerin karşısına "Aldım" seçeneğini işaretlenerek tik işareti konmak isteniyor.
Bunun için; 'Aldım' durumu veritabanında ProductListDetails tablosunda tutuluyor.
ProductListShowInside.cshtml sayfasında checkbox oluşturulup, ajax-post işlemi gerçekleştirildi.Post ederken; hangi alışverişlistesi(productListId) hangi ürün(productId) ve checked de tuttuğu değerde post edildi.
14-Kullanıcının Yeni AlışVeriş Listesi ekleme işlemi yapıldı.Hangi kullancının alışverişlistesi olduğunuda tutmak gerektiğinden claimde tutulan userId kullanıldı.
---------
BusinessRules Refactoring
15-Managerlarda iş kurallarını metotların içine yazmışdık.İş kuralları arttıkça karışmaması için "İş Parçacıkları Metotları" oluşturuldu.
Core katmanına-> Utilities-> Business -> "BuisnessRules.cs" clası oluşturuldu."Run" metotu ile birden fazla kural verileceği düşünülerek params kullanılarak iş kuralları başarılı ise null döncek şekilde ayarlandı.
UserManager'da
** "CheckIfEmailExists" metotuyla "Aynı mail adresinden kayıt varsa eklemesin iş kuralı Parçacığı" oluşturup ayrı yazıyoruz
** "CheckIfUserIdExists" metotuyla "Böyle bir kullanıcı sistemde kayıtlı mı iş kuralı Parçacığı" oluşturup ayrı yazıyoruz
"AddUserDto", "DeleteUserDto","EditUserDto "metotları iş kurallarını Run ile çalıştırlıp kontrolü sağlanıyor.