- 7 haftalık Simpra bootcamp sürecinin sonunda verilen bitirme projesidir.
- Proje SOLID prensiplerine uygun bir şekilde hazırlanmıştır.
- Güvenlik için JWT entegre edilmiş, bağımlıklıkları çözmek için Autofac kullanılmış ve hatalar SeriLog ile loglanmıştır.
- Github'dan projeyi clone'layıp bilgisayarda projeyi başlattıktan sonra ilk olarak DataAccess>Context>SimpraProjectContext içerisinde connectionString bağlantısı güncellenmelidir.
- Migration işlemi gerçekleştirilip veri tabanı tabloları oluşturulmalıdır. (Örnek "add-migration init_mig")
- Proje içerisinde admin/customer rolleri bulunmaktadır. Veri tabanına ilk admin kullanıcı kaydı için birkaç TSQL kodu MSSQL'de çalıştırılmalıdır.
- Aşağıdaki kod bloğunu MSSQL’de çalıştırarak OeprationClaims tablosu oluşturulur. (id=1-”admin” id=2-”customer” olması programın düzgün çalışabilmesi önem arz etmektedir)
USE TestOne;
INSERT INTO OperationClaims(Name)
VALUES ('admin'), ('customer'); - Aşağıdaki kod bloğunu çalıştırarak ilk kullanıcıyı admin olarak eklemiş oluyorum.
UPDATE Users SET [Status] = 'Admin' WHERE Id = 1
UPDATE UserOperationClaims SET OperationClaimId = 1 WHERE Id = 1 - Bu şekilde ilk kullanıcı admin olarak eklenmiş olur.
- Örnek ürün ve kategori verileri eklemek için önce aşağıdaki kodu çalıştırıp örnek kategori verileri eklenir.
INSERT INTO Categories (Name, Description, CreatedAt) VALUES
('Category 1', 'Description of Category 1', GETDATE()),
('Category 2', 'Description of Category 2', GETDATE()),
('Category 3', 'Description of Category 3', GETDATE()); - Kategori ekleme işleminden sonra aşağıdaki kod bloğunu çalıştırarak örnek ürün verileri eklenir. (FK çakışmasından dolayı önce kategori sonrasında ürün eklenmelidir)
INSERT INTO Products ([Name], [Description], CategoryId, Price, Stock, MaxPoint, PointPercentage, CreatedAt) VALUES
('Product 1', 'Description of Product 1', 1, 10.5, 100, 10, 15, GETDATE()),
('Product 2', 'Description of Product 2', 1, 15, 500, 5, 10, GETDATE()),
('Product 3', 'Description of Product 3', 2, 7.8, 200, 15, 20, GETDATE()),
('Product 4', 'Description of Product 4', 2, 30, 150, 10, 15, GETDATE()),
('Product 5', 'Description of Product 3', 3, 21, 80, 15, 30, GETDATE()),
('Product 6', 'Description of Product 4', 3, 9, 340, 12, 25, GETDATE())
- Dokümantasyon Swagger ile gerçekleştirilmiştir. Tüm action'ların açıklaması yapılmış ve Post işlemlerinde örnek veriler eklenmiştir.
- "Admin" ile başlayan tüm controller endpoint'leri sadece "admin" role sahip kullanıcılar tarafından istek atılabilmektedir.
- Ürün/kategori listeleme ve admin/customer-login harici tüm istekler Authenticate gerektirmektedir.
- Giriş yapıldıktan sonra 30 dk'lık token süresi bulunmaktadır.
- Alışveriş yapmak için öncelikle ürünler sepete eklenmeli ardından sepetteki ürünlerin siparişi verilmelidir.
- Para kullanıcının sanal cüzdanından çekilmektedir. Eğer sanal cüzdanda yeterli para yoksa sanal cüzdana para ekleme işlemi kredi kartı ile yapılmalıdır.
- Sistemde "admin" ve "customer" olmak üzere iki farklı kullanıcı rolü vardır. Admin kullanıcılar admin-login ile giriş yapabilir, sisteme başka bir admin kullanıcı ekleyebilir.
- Admin role sahip kullanıcılar sistemde Ürün/kategori/müşteri/kupon ekleme/güncelleme/silme işlemlerini gerçekleştirebilmektedir.
- Müşteriler sisteme customer-register sayfasından kayıt olup customer-login sayfasından giriş yapabilmektedir.
- Herhangi bir ürün siparişinde önce sepete ekleme işlemi gerçekleştirilir. Bu aşamada sepette düzenleme yapılabilir.
- Eğer müşteri sanal cüzdanında yeterli para varsa satın alma işlemi için place-order isteği atılır. Bu aşamada müşteri kupon girebilir ayrıca varsa daha önce kazandığı puanlar ödeme tutarından düşürülür.
- Eğer kupon ve önceki siparişlerden kazanılan puan parası yeterli değilse kredi kartı bilgileri ve para miktarı ile addmoney-towallet isteği atılarak sanal cüzdana para ekleme işlemi gerçekleştirilir.
- Müşteri ürün bilgisinde bulunan miktar kadar, sanal cüzdanından ödediği net miktar üzerinden puan kazanabilir.
- Önceki siparişte kazanılan puanlar sonraki siparişte para olarak kullanılır.
- Tüm istekler ve proje teslim kriterleri tamamlanmıştır.
Mail: b.b.kamac@gmail.com