TestbankZarinpal.zip
حجم:
18.4M
این پروژه تست بانک زرین پال را به دات نت 8 آپدیت کردم و IIS Express و http
را Url: http://localhost:2812 یکی کردم تا اتصال به تست بانک به مشکل نخورد
Test_Store 17.zip
حجم:
56.9M
پروژه فروشگاه این قسمت زرین پال
با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تست زرین پال
پروژه را نمیتوانید با http از بانک تست استفاده کرد چون خطای اتصال ایمن می دهد
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Domain.Entities.Carts
این کد بخشهای مربوط به مدیریت سبد خرید (Cart) و آیتمهای سبد خرید (CartItem) را تعریف کرده است. من بهطور خلاصه توضیح میدهم که این کد چه کارهایی انجام میدهد:
توضیح کلاسها
1. کلاس Cart (سبد خرید):
این کلاس نمایندهی سبد خرید یک کاربر است و ویژگیهای زیر را شامل میشود:
User:
ارتباطی (virtual) با کلاس User دارد که مشخص میکند سبد خرید متعلق به کدام کاربر است.
UserId:
شناسه کاربر بهصورت nullable است، یعنی ممکن است مقدار null داشته باشد (برای سبد خریدهای ناشناس یا بدون ورود کاربر).
BrowserId:
شناسه مرورگر کاربر برای پیگیری سبد خرید در جلسات مرورگر.
Finished:
یک مقدار بولین است که مشخص میکند آیا سبد خرید تکمیل شده است یا خیر (مانند زمانی که کاربر خرید را نهایی میکند).
CartItems:
مجموعهای از آیتمهای موجود در این سبد خرید (ارتباط یکبهچند با کلاس CartItem).
2. کلاس CartItem (آیتمهای سبد خرید):
این کلاس نمایندهی آیتمهای موجود در یک سبد خرید است و ویژگیهای زیر را دارد:
Product:
ارتباطی (virtual) با کلاس Product دارد که مشخص میکند این آیتم مربوط به کدام محصول است.
ProductId:
شناسه محصول موجود در سبد خرید.
Count:
تعداد از محصول که در سبد خرید قرار دارد.
Price:
قیمت محصول در لحظهای که وارد سبد خرید شده است.
Cart:
ارتباطی (virtual) با کلاس Cart دارد که مشخص میکند این آیتم به کدام سبد خرید تعلق دارد.
CartId:
شناسه سبد خرید.
ارتباط بین کلاسها
سبد خرید و آیتمها (Cart و CartItem): هر سبد خرید میتواند شامل چندین آیتم باشد (ارتباط یکبهچند).
از ICollection<CartItem> در کلاس Cart استفاده شده است تا آیتمها مدیریت شوند.
آیتمهای سبد خرید و محصولات (CartItem و Product): هر آیتم سبد خرید به یک محصول خاص مربوط است (ارتباط یکبهیک).
سبد خرید و کاربر (Cart و User): هر سبد خرید ممکن است به یک کاربر مرتبط باشد، اما این ارتباط اجباری نیست (UserId میتواند null باشد).
کاربرد عملی
این کلاسها معمولاً برای مدیریت سبد خرید در یک فروشگاه آنلاین استفاده میشوند. فرآیند کلی به این شکل است:
ایجاد سبد خرید: برای هر کاربر (یا مرورگر ناشناس)، یک سبد خرید ایجاد میشود.
افزودن آیتمها: آیتمها (محصولات با تعداد مشخص) به سبد خرید اضافه میشوند.
تکمیل خرید: زمانی که کاربر خرید را نهایی میکند، مقدار Finished در کلاس Cart به true تغییر میکند.
نتیجهگیری
این ساختار بسیار مناسب برای مدیریت سبد خرید در یک سیستم فروشگاه آنلاین است. ارتباطهای بین کلاسها به خوبی طراحی شدهاند و امکان توسعه آسان را فراهم میکنند
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Domain.Entities.Carts
این کد دو کلاس اصلی به نام Cart و CartItem را تعریف میکند که برای مدیریت سبد خرید در یک فروشگاه آنلاین استفاده میشوند. در ادامه به تفکیک هر کلاس را توضیح میدهم:
کلاس Cart (سبد خرید):
این کلاس نمایندهی سبد خرید یک کاربر است و ویژگیهای زیر را دارد:
User:
نشاندهندهی کاربری است که صاحب سبد خرید است. این ویژگی یک رابطهی virtual دارد که به کلاس User متصل است.
UserId:
شناسه کاربر به صورت nullable است؛ یعنی ممکن است مقدار null داشته باشد (به عنوان مثال، برای سبد خریدهای ناشناس یا مهمانها).
BrowserId:
یک شناسهی یکتا برای مرورگر کاربر است که به کمک آن سبد خرید مدیریت میشود.
Finished:
مشخص میکند که سبد خرید تکمیل شده یا خیر (برای زمانی که خرید نهایی و پرداخت انجام شده است).
CartItems:
مجموعهای از آیتمهای موجود در سبد خرید است که به کلاس CartItem مربوط میشود.
کلاس CartItem (آیتمهای سبد خرید):
این کلاس نمایندهی آیتمهای موجود در یک سبد خرید است و ویژگیهای زیر را شامل میشود:
Product:
ارتباطی virtual با کلاس Product دارد و نشان میدهد که این آیتم مربوط به کدام محصول است.
ProductId:
شناسه محصولی که به سبد خرید اضافه شده است.
Count:
تعداد این محصول که در سبد خرید قرار دارد.
Price:
قیمت واحد محصول در لحظهای که به سبد خرید اضافه شده است.
Cart:
ارتباطی virtual با کلاس Cart دارد و نشاندهندهی این است که این آیتم به کدام سبد خرید تعلق دارد.
CartId:
شناسهی سبد خریدی که این آیتم در آن قرار دارد.
ارتباط بین کلاسها:
ارتباط سبد خرید و آیتمها: هر سبد خرید (Cart) میتواند چندین آیتم (CartItem) داشته باشد. این ارتباط یکبهچند است.
ارتباط آیتمها و محصولات: هر آیتم سبد خرید به یک محصول (Product) خاص متصل است. این ارتباط یکبهیک است.
ارتباط سبد خرید و کاربر: هر سبد خرید ممکن است به یک کاربر متصل باشد. اگر کاربر ناشناس باشد، UserId مقدار null خواهد داشت.
کاربرد این کلاسها:
ایجاد سبد خرید برای کاربران یا مرورگرهای ناشناس: با استفاده از BrowserId میتوان سبد خرید را برای مهمانها مدیریت کرد.
افزودن محصولات به سبد خرید: با افزودن آیتمهای CartItem، سبد خرید پر میشود.
محاسبه قیمت کل و تکمیل خرید: با استفاده از دادههای Count و Price، میتوان مجموع قیمت را محاسبه کرد.
ثبت وضعیت پرداخت: پس از تکمیل پرداخت، مقدار Finished به true تغییر میکند.
نتیجهگیری:
این طراحی یک مدل ساختاری مناسب برای مدیریت سبد خرید است که از طریق روابط یکبهچند و یکبهیک، تمام اطلاعات سبد خرید و آیتمهای آن را پوشش میدهد.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Domain.Entities.Finances
این کد کلاس RequestPay را تعریف میکند که برای مدیریت درخواستهای پرداخت در سیستم مالی یک فروشگاه آنلاین استفاده میشود. در ادامه توضیحات بخشهای مختلف این کلاس ارائه شده است:
ویژگیها و توضیحات آنها:
1. Guid:
شناسهی یکتا برای هر درخواست پرداخت.
این مقدار به صورت خودکار تولید میشود و تضمین میکند که هر درخواست پرداخت یک شناسه منحصر به فرد داشته باشد.
2. User:
ارتباطی (virtual) به کلاس User دارد که نشان میدهد این درخواست پرداخت متعلق به کدام کاربر است.
3. UserId:
شناسهی کاربری که درخواست پرداخت را ایجاد کرده است.
برای ارتباط مستقیم و سریع با کاربر مورد استفاده قرار میگیرد.
4. Amount:
مقدار مبلغی که برای این پرداخت درخواست شده است.
این مقدار به تومان یا واحد پولی موردنظر ذخیره میشود.
5. IsPay:
مشخص میکند که آیا پرداخت انجام شده است (true) یا هنوز در انتظار پرداخت است (false).
این ویژگی برای پیگیری وضعیت درخواست پرداخت بسیار مهم است.
6. PayDate:
تاریخ انجام پرداخت، اگر پرداخت انجام شده باشد.
نوع دادهی آن nullable است، بنابراین اگر پرداخت انجام نشده باشد، مقدار آن null خواهد بود.
7. Authority:
شناسهای که توسط درگاه پرداخت (مثل زرینپال) ایجاد میشود و برای تأیید پرداخت استفاده میشود.
مقدار پیشفرض آن یک رشتهی خالی ("") است.
8. RefId:
شناسهی مرجع پرداخت که توسط بانک یا درگاه پرداخت صادر میشود.
برای پیگیری تراکنش در سیستم مالی استفاده میشود.
مقدار پیشفرض آن 0 است.
کاربرد کلاس RequestPay:
این کلاس برای مدیریت درخواستهای پرداخت استفاده میشود و فرآیند کلی به شکل زیر است:
ایجاد درخواست پرداخت: هنگام ثبت خرید، یک رکورد جدید از این کلاس ایجاد میشود.
ذخیره شناسههای تراکنش: شناسههای Authority و RefId بعد از ارتباط با درگاه پرداخت ذخیره میشوند.
بهروزرسانی وضعیت پرداخت: پس از تأیید پرداخت، مقدار IsPay به true تغییر میکند و تاریخ پرداخت (PayDate) تنظیم میشود.
بررسی وضعیت پرداخت: برای نمایش به کاربر یا گزارشگیری، اطلاعات پرداخت بررسی و استفاده میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Application.Services.Fainances.Commands.AddRequestPay
این کد مسئولیت ایجاد و ثبت درخواست پرداخت جدید در سیستم را بر عهده دارد و به خوبی برای این منظور طراحی شده است. در ادامه توضیحات مربوط به بخشهای مختلف این کد ارائه شده است:
1. IAddRequestPayService (اینترفیس سرویس):
این اینترفیس مشخص میکند که کلاسهای پیادهسازیشده باید شامل متدی به نام Execute باشند که دو ورودی زیر را دریافت میکند:
Amount: مبلغی که برای پرداخت تعیین شده است.
UserId: شناسه کاربری که این پرداخت برای او انجام میشود.
این اینترفیس به منظور جداسازی وابستگیها و افزایش انعطافپذیری استفاده میشود.
2. AddRequestPayService (پیادهسازی سرویس):
این کلاس منطق اصلی مربوط به ایجاد درخواست پرداخت را پیادهسازی میکند.
ویژگیها:
_context: یک نمونه از IDataBaseContext برای تعامل با پایگاه داده. این شیء از طریق تزریق وابستگی (Dependency Injection) مقداردهی میشود.
متد Execute:
این متد وظایف زیر را انجام میدهد:
بازیابی اطلاعات کاربر:
با استفاده از UserId، کاربر مربوطه از پایگاه داده دریافت میشود:
csharp
var user = _context.Users.Find(UserId);
ایجاد یک شیء RequestPay:
یک شیء از نوع RequestPay ایجاد میشود که شامل اطلاعات درخواست پرداخت است:
Amount: مبلغ پرداخت.
Guid: شناسه یکتای تولیدشده برای این درخواست پرداخت.
IsPay: مقدار اولیه false (یعنی پرداخت انجام نشده است).
User: ارتباط با کاربر مربوطه.
ذخیره درخواست پرداخت در پایگاه داده:
شیء RequestPay به جدول مربوطه اضافه میشود و تغییرات ذخیره میشود:
csharp
_context.RequestPays.Add(requestPay);
_context.SaveChanges();
بازگشت نتیجه:
نتیجه عملیات همراه با اطلاعاتی مثل Guid, Amount, Email, و RequestPayId بازگردانده میشود:
csharp
return new ResultDto<ResultRequestPayDto>()
3. کلاس ResultRequestPayDto:
این کلاس مسئول بازگرداندن اطلاعات درخواست پرداخت به بخشهای دیگر برنامه است:
guid:
شناسه یکتا که برای پیگیری درخواست پرداخت استفاده میشود.
Amount:
مبلغ پرداخت.
Email:
ایمیل کاربر مربوطه.
RequestPayId:
شناسه درخواست پرداخت در پایگاه داده.
کاربرد این کد در سیستم پرداخت:
ایجاد درخواست پرداخت:
هنگام ارسال کاربر به درگاه پرداخت، این کد یک درخواست پرداخت در سیستم ثبت میکند.
ذخیره اطلاعات تراکنش:
شناسههای مهم مثل Guid ذخیره میشوند تا بعداً بتوان وضعیت پرداخت را پیگیری کرد.
بازگشت اطلاعات به کلاینت:
اطلاعاتی که برای ارتباط با درگاه پرداخت لازم است (مثل Guid) بازگردانده میشود.
جمعبندی:
این کد به طور کلی مسئولیت ایجاد یک درخواست پرداخت جدید را دارد. طراحی آن بسیار دقیق است و اصولی مانند تزریق وابستگی و تفکیک منطق استفاده شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Application.Services.Fainances.Queries.GetRequestPayService
این کد مسئول بازیابی اطلاعات درخواست پرداخت با استفاده از GUID است. کلاسهای آن برای دسترسی به اطلاعات مربوط به درخواستهای پرداخت طراحی شدهاند. در ادامه بخشهای مختلف این کد توضیح داده شده است:
1. IGetRequestPayService (اینترفیس سرویس):
این اینترفیس مشخص میکند که هر کلاسی که آن را پیادهسازی کند باید شامل متدی به نام Execute با ورودی یک GUID باشد و اطلاعات مربوط به درخواست پرداخت را بازگرداند. ورودی و خروجی:
ورودی: Guid guid برای شناسایی درخواست پرداخت.
خروجی: یک شیء از نوع ResultDto<RequestPayDto> که اطلاعات مربوط به درخواست پرداخت را شامل میشود.
2. GetRequestPayService (پیادهسازی سرویس):
این کلاس مسئولیت اصلی جستجو و بازگرداندن اطلاعات مربوط به درخواست پرداخت را بر عهده دارد.
ویژگیها:
_context:
این شیء از نوع IDataBaseContext است و امکان تعامل با پایگاه داده را فراهم میکند. از طریق تزریق وابستگی (Dependency Injection) مقداردهی میشود.
متد Execute:
این متد عملیات اصلی جستجو و بازگشت اطلاعات را انجام میدهد. منطق متد:
یافتن درخواست پرداخت:
با استفاده از LINQ، درخواست پرداختی با مقدار GUID مشخص از پایگاه داده جستجو میشود:
csharp
var requestPay = _context.RequestPays.Where(p => p.Guid == guid).FirstOrDefault();
اگر رکوردی یافت شود، اطلاعات آن پردازش میشود. اگر نه، یک استثنا (Exception) ایجاد میشود.
برگشت اطلاعات:
اگر رکورد یافت شود، مقدار Amount داخل شیء RequestPayDto قرار گرفته و همراه با وضعیت موفقیت (IsSuccess = true) بازگردانده میشود:
csharp
return new ResultDto<RequestPayDto>()
مدیریت خطا:
در صورتی که رکوردی یافت نشود، یک Exception با پیام "request pay not found" پرتاب میشود:
csharp
throw new Exception("request pay not found");
3. RequestPayDto (انتقال داده):
این کلاس برای بازگرداندن اطلاعات پرداخت به لایههای بالاتر استفاده میشود.
Amount: مبلغ پرداخت.
کاربرد کد:
جستجوی درخواست پرداخت:
این کد برای دریافت اطلاعات پرداخت (مانند مبلغ) از پایگاه داده استفاده میشود.
نمایش اطلاعات پرداخت:
اطلاعات بازیابیشده به لایههای دیگر برنامه ارسال میشود تا مثلاً در رابط کاربری نمایش داده شود.
مدیریت خطا:
در صورتی که اطلاعات پرداخت موجود نباشد، خطا مدیریت میشود.
نقاط قوت:
ساختار ماژولار:
منطق جستجو در یک سرویس مستقل (GetRequestPayService) پیادهسازی شده است که انعطاف و قابلیت استفاده مجدد را فراهم میکند.
استفاده از DTO برای انتقال دادهها:
استفاده از کلاس RequestPayDto باعث جداسازی ساختار پایگاه داده از ساختار خروجی میشود.
مدیریت دقیق خطا:
اگر پرداخت مورد نظر یافت نشود، خطای مناسبی تولید میشود.
پیشنهادات بهبود:
بهبود مدیریت خطا:
به جای پرتاب مستقیم Exception، میتوانید از پیامهای کاربرپسند و مدیریتشده استفاده کنید:
csharp
if (requestPay == null)
{
return new ResultDto<RequestPayDto>
{
IsSuccess = false,
Message = "درخواستی با این GUID یافت نشد."
};
}
افزودن جزئیات بیشتر به RequestPayDto:
میتوانید اطلاعات اضافی مانند تاریخ پرداخت (PayDate) یا وضعیت پرداخت (IsPay) را به این DTO اضافه کنید.
جمعبندی:
این کد به خوبی برای بازیابی اطلاعات درخواست پرداخت طراحی شده است. با تفکیک وظایف و استفاده از الگوهای مناسب، منطق آن ساده و قابلگسترش است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
namespace Test_Store.Application.Services.Carts
این کد برای مدیریت سبد خرید در یک فروشگاه آنلاین طراحی شده است و شامل سرویسهای مختلفی است که وظایف متعددی مانند افزودن، حذف و مشاهده آیتمهای سبد خرید را انجام میدهند. در ادامه توضیحات کامل مربوط به قسمتهای مختلف این کد ارائه شده است:
1. ICartService (اینترفیس سرویس):
این اینترفیس مشخص میکند که سرویس مدیریت سبد خرید باید شامل متدهای زیر باشد:
AddToCart(long ProductId, Guid BrowserId):
افزودن یک محصول به سبد خرید.
RemoveFromCart(long ProductId, Guid BrowserId):
حذف یک محصول از سبد خرید.
GetMyCart(Guid BrowserId, long? UserId): بازیابی اطلاعات سبد خرید بر اساس شناسه مرورگر و شناسه کاربر.
Add(long CartItemId):
افزایش تعداد یک آیتم در سبد خرید.
LowOff(long CartItemId):
کاهش تعداد یک آیتم در سبد خرید.
2. CartService (پیادهسازی سرویس):
این کلاس پیادهسازی سرویس مدیریت سبد خرید است و از متدهای تعریفشده در اینترفیس پیروی میکند.
متدها و وظایف:
AddToCart(long ProductId, Guid BrowserId):
بررسی میکند که آیا سبد خرید برای مرورگر مشخصشده وجود دارد یا خیر.
اگر وجود ندارد، یک سبد خرید جدید ایجاد میکند.
سپس محصول مشخصشده را به سبد خرید اضافه میکند:
اگر محصول از قبل وجود دارد، تعداد آن افزایش مییابد.
اگر محصول وجود ندارد، یک آیتم جدید در سبد خرید ایجاد میشود.
RemoveFromCart(long ProductId, Guid BrowserId):
محصول مشخصشده را از سبد خرید حذف میکند (با تنظیم مقدار IsRemoved).
GetMyCart(Guid BrowserId, long? UserId):
اطلاعات سبد خرید را بازیابی کرده و آیتمهای موجود در آن را به صورت یک DTO بازمیگرداند.
اگر شناسه کاربر (UserId) مشخص شده باشد، کاربر به سبد خرید مرتبط میشود.
Add(long CartItemId):
تعداد آیتم مشخصشده در سبد خرید را افزایش میدهد.
LowOff(long CartItemId):
تعداد آیتم مشخصشده را کاهش میدهد.
اگر تعداد به ۱ برسد، مانع از کاهش بیشتر میشود.
3. DTOها (انتقال داده):
CartDto:
این کلاس نمایندهی دادههای سبد خرید است و شامل موارد زیر میشود:
ProductCount:
تعداد کل محصولات در سبد خرید.
SumAmount:
مجموع قیمت کل محصولات.
CartItems:
لیستی از آیتمهای موجود در سبد خرید (از نوع CartItemDto).
CartItemDto:
این کلاس برای نمایش اطلاعات هر آیتم در سبد خرید استفاده میشود:
Id: شناسه آیتم.
Product: نام محصول.
Images: تصویر محصول.
Count: تعداد محصول.
Price: قیمت محصول.
کاربرد این کد در فروشگاه آنلاین:
افزودن محصول به سبد خرید:
کاربر میتواند محصولات دلخواه خود را به سبد خرید اضافه کند.
مشاهده سبد خرید:
کاربر میتواند جزئیات آیتمهای موجود در سبد خرید خود را مشاهده کند.
مدیریت آیتمها:
تعداد آیتمها را افزایش یا کاهش دهد.
حذف محصول:
محصولات را از سبد خرید حذف کند.
گزارشگیری و نمایش سبد خرید:
با استفاده از DTOها، اطلاعات سبد خرید به صورت کاربرپسند به رابط کاربری ارسال میشود.
نقاط قوت:
ساختار ماژولار:
وظایف مختلف به متدهای جداگانه تقسیم شدهاند.
استفاده از DTOها:
جداسازی دادههای پایگاه داده از دادههایی که به رابط کاربری ارسال میشوند.
مدیریت خطا:
در متد GetMyCart، خطاهای احتمالی به صورت مناسب مدیریت شدهاند.
پیشنهادات بهبود:
پیغامهای خطای کاربرپسند:
به جای پرتاب مستقیم استثنا در متد GetMyCart، پیامهای مناسبتری برای کاربران ارسال شود.
بهینهسازی کوئریها:
استفاده از FirstOrDefault و دستورات LINQ میتواند بهتر بهینهسازی شود تا کارایی بالاتری داشته باشد.
جمعبندی:
این کد برای مدیریت سبد خرید طراحی شده و به خوبی نیازهای یک فروشگاه آنلاین را پوشش میدهد. با افزودن مدیریت خطاهای کاربرپسند و بهینهسازی جزئی، میتواند حتی بهتر عمل کند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
DbSet<Cart> Carts { get; set; } DbSet<CartItem> CartItems { get; set; } DbSet<RequestPay> RequestPays { get; set; }
این خطوط کد در کلاس IDataBaseContext مربوط به مدیریت موجودیتهای پایگاه داده است. DbSet<T> نشاندهنده جدول یا مجموعهای از دادهها در پایگاه داده است که نوع آن T مشخص میکند. در اینجا توضیحات مربوط به هر یک از این خطوط آورده شده است:
1. DbSet<Cart> Carts { get; set; }:
این خط کد مشخص میکند که کلاس Cart به یک جدول به نام Carts در پایگاه داده مرتبط است.
هر رکورد در این جدول نمایندهی یک سبد خرید است.
شامل اطلاعات مربوط به کاربر، آیتمهای موجود در سبد خرید، شناسه مرورگر و وضعیت تکمیل شدن خرید میباشد.
2. DbSet<CartItem> CartItems { get; set; }:
این خط کد مشخص میکند که کلاس CartItem به یک جدول به نام CartItems در پایگاه داده مرتبط است.
هر رکورد در این جدول نشاندهنده یک آیتم موجود در یک سبد خرید است.
شامل اطلاعاتی مانند محصول مربوطه، تعداد، قیمت و ارتباط آن با یک سبد خرید مشخص میباشد.
3. DbSet<RequestPay> RequestPays { get; set; }:
این خط کد مشخص میکند که کلاس RequestPay به یک جدول به نام RequestPays در پایگاه داده مرتبط است.
هر رکورد در این جدول نشاندهندهی یک درخواست پرداخت است.
شامل اطلاعاتی مانند مبلغ پرداخت، شناسه یکتا (Guid)، وضعیت پرداخت (IsPay)، تاریخ پرداخت (PayDate) و شناسههای تراکنش (Authority و RefId) است.
کارکرد کلی این خطوط:
این خطوط به Entity Framework اجازه میدهند تا با استفاده از کلاسها (مانند Cart, CartItem, و RequestPay) به پایگاه داده متصل شود و عملیاتهایی مانند ذخیره، بازیابی، بهروزرسانی و حذف دادهها را انجام دهد.
هر DbSet یک نماینده از جدول مربوطه در پایگاه داده است.
نقاط قوت طراحی:
یکپارچگی و استفادهی ماژولار: تمام موجودیتها در قالب DbSet تعریف شدهاند که تعامل با پایگاه داده را ساده و ماژولار میکند.
انعطافپذیری بالا: با استفاده از DbSetها، میتوان به راحتی دادهها را فیلتر کرد و عملیاتهای مختلف انجام داد.
سادگی در خوانایی: نامهای انتخابشده برای DbSetها (مانند Carts, CartItems, RequestPays) کاملاً واضح و مرتبط با کاربردشان هستند.
جمعبندی:
این تعریفها نقطهای کلیدی برای مدیریت دادههای مرتبط با سبد خرید (Cart و CartItem) و درخواستهای پرداخت (RequestPay) در سیستم شما هستند. طراحی آنها کاملاً استاندارد و مناسب برای کاربرد موردنظر است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
توضیح کد در DataBaseContext : DbContext, IDataBaseContext public DbSet<Cart> Carts { get; set; } public DbSet<CartItem> CartItems { get; set; } public DbSet<RequestPay> RequestPays { get; set; } modelBuilder.Entity<Cart>().HasQueryFilter(p => !p.IsRemoved); modelBuilder.Entity<CartItem>().HasQueryFilter(p => !p.IsRemoved); modelBuilder.Entity<RequestPay>().HasQueryFilter(p => !p.IsRemoved);
این کد مربوط به تنظیمات کلاس DataBaseContext است که برای تعامل با پایگاه داده طراحی شده و از DbContext در Entity Framework ارثبری میکند. همچنین این کلاس IDataBaseContext را پیادهسازی میکند تا وابستگیهای آن از طریق اینترفیس مدیریت شوند. بیایید بخشهای مختلف کد را بررسی کنیم:
1. DbSet<T> ها
DbSet<Cart> Carts { get; set; }:
این خط کد مشخص میکند که کلاس Cart به جدول Carts در پایگاه داده مرتبط است. این جدول تمامی اطلاعات مربوط به سبد خرید را شامل میشود.
DbSet<CartItem> CartItems { get; set; }:
مشخص میکند که کلاس CartItem به جدول CartItems در پایگاه داده مرتبط است. این جدول اطلاعات مربوط به آیتمهای سبد خرید را نگهداری میکند.
DbSet<RequestPay> RequestPays { get; set; }:
مشخص میکند که کلاس RequestPay به جدول RequestPays در پایگاه داده مرتبط است. این جدول برای مدیریت درخواستهای پرداخت طراحی شده است.
DbSet<T>ها
در Entity Framework به شما اجازه میدهند که به دادههای پایگاه داده به عنوان مجموعهای از اشیاء (entities) دسترسی داشته باشید و عملیات CRUD (ایجاد، خواندن، بهروزرسانی، حذف) را روی آنها انجام دهید.
2. HasQueryFilter
این خطوط کد فیلترهای سراسری (Global Query Filters) را روی جداول Cart, CartItem, و RequestPay اعمال میکنند:
csharp
modelBuilder.Entity<Cart>().HasQueryFilter(p => !p.IsRemoved);
modelBuilder.Entity<CartItem>().HasQueryFilter(p => !p.IsRemoved);
modelBuilder.Entity<RequestPay>().HasQueryFilter(p => !p.IsRemoved);
نکات فیلتر:
p => !p.IsRemoved:
این فیلتر به گونهای طراحی شده که فقط رکوردهایی را از جداول مربوطه بازیابی کند که مقدار IsRemoved آنها false باشد. این ویژگی معمولاً برای پیادهسازی حذف منطقی (soft delete) استفاده میشود.
مزایا:
حذف منطقی (Soft Delete):
به جای حذف کامل رکوردها از پایگاه داده، شما میتوانید با تنظیم IsRemoved = true، آنها را غیرقابلدسترس کنید.
رکوردها در پایگاه داده باقی میمانند و برای اهداف گزارشگیری یا بازگرداندن در آینده در دسترس خواهند بود.
بازیابی ساده رکوردها:
به طور خودکار فقط رکوردهایی که حذف نشدهاند (IsRemoved == false) در کوئریها بازیابی میشوند.
3. ارثبری از DbContext
کلاس DataBaseContext از DbContext ارثبری میکند. این کلاس پایه در Entity Framework Core است که عملیات اصلی مرتبط با پایگاه داده مانند ذخیرهسازی و بازیابی دادهها را مدیریت میکند.
از متد OnModelCreating(ModelBuilder modelBuilder) برای تنظیمات مدل
(مانند تعریف فیلترهای سراسری) استفاده شده است.
کاربردهای کد:
مدیریت جداول سبد خرید و پرداخت:
Carts, CartItems, و RequestPays
به طور مستقیم با پایگاه داده ارتباط دارند.
حذف منطقی:
رکوردهایی که حذف شدهاند به طور پیشفرض از نتایج کوئریها فیلتر میشوند.
افزایش خوانایی و انعطافپذیری:
با استفاده از فیلترهای سراسری، نیازی نیست که در هر کوئری حذف منطقی مدیریت شود. این کار به طور خودکار انجام میشود.
جمعبندی:
این تنظیمات به طور کامل و استاندارد عملیات پایگاه داده را برای جداول مرتبط با سبد خرید و پرداخت مدیریت میکند.
استفاده از HasQueryFilter باعث میشود که مدیریت حذف منطقی سادهتر و موثرتر شود.
طراحی کد برای استفاده در پروژههای بزرگ کاملاً مناسب و مقیاسپذیر است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد در فایل Program مربوط به تنظیمات سرویسها و احراز هویت (Authentication) و مجوزها (Authorization) در یک برنامه ASP.NET Core است. در ادامه بخشهای مختلف این کد توضیح داده شدهاند:
1. تنظیمات Authorization (مجوزها):
csharp
builder.Services.AddAuthorization(options =>
{
options.AddPolicy(UserRoles.Admin, policy => policy.RequireRole(UserRoles.Admin));
options.AddPolicy(UserRoles.Customer, policy => policy.RequireRole(UserRoles.Customer));
options.AddPolicy(UserRoles.Operator, policy => policy.RequireRole(UserRoles.Operator));
});
این بخش تنظیمات مجوزها را تعریف میکند.
AddPolicy:
برای هر نقش (Role)، یک سیاست (Policy) تعریف شده است که مشخص میکند کاربران باید متعلق به نقش مشخصشده باشند تا به منابع مربوطه دسترسی پیدا کنند.
UserRoles.Admin:
سیاستی که فقط کاربران با نقش مدیر (Admin) میتوانند دسترسی داشته باشند.
UserRoles.Customer:
سیاستی که فقط مشتریان (Customer) دسترسی دارند.
UserRoles.Operator:
سیاستی که فقط اپراتورها (Operator) مجوز دارند.
2. تنظیمات Cookie Authentication:
csharp
}).AddCookie(options =>
{
options.LoginPath = new PathString("/Authentication/Signin");
options.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);
});
این تنظیمات مربوط به احراز هویت با استفاده از کوکیها است.
LoginPath:
مشخص میکند که اگر کاربر احراز هویت نشده باشد، به کدام مسیر هدایت شود. در اینجا مسیر /Authentication/Signin برای صفحه ورود کاربر تعریف شده است.
ExpireTimeSpan:
مدت زمان اعتبار کوکیها را تنظیم میکند. در اینجا کوکیها بعد از ۵ دقیقه منقضی میشوند.
3. ثبت سرویسها در Dependency Injection Container:
csharp
builder.Services.AddScoped<ICartService, CartService>();
builder.Services.AddScoped<IAddRequestPayService, AddRequestPayService>();
builder.Services.AddScoped<IGetRequestPayService, GetRequestPayService>();
AddScoped:
مشخص میکند که این سرویسها با اسکوپ (Scope) درخواست HTTP ایجاد شوند، به این معنی که یک نمونه از این سرویس برای هر درخواست HTTP ایجاد میشود.
ICartService, CartService:
سرویس مدیریت سبد خرید.
IAddRequestPayService, AddRequestPayService:
سرویس افزودن درخواست پرداخت.
IGetRequestPayService, GetRequestPayService:
سرویس دریافت اطلاعات پرداخت.
این ثبت سرویسها باعث میشود وابستگیها به صورت خودکار مدیریت شوند.
4. Middlewareهای مربوط به Authentication و Authorization:
csharp
app.UseAuthentication();
app.UseAuthorization();
UseAuthentication: Middleware
برای مدیریت احراز هویت کاربر است. این بخش بررسی میکند که آیا کاربر وارد حساب شده است یا خیر.
UseAuthorization: Middleware
برای مدیریت دسترسیهای کاربر است. این بخش سیاستهای تعریفشده را برای نقشهای کاربر اعمال میکند.
جای Middleware ها عوض شده است
کاربرد کد:
مدیریت نقشها و دسترسیها: با استفاده از سیاستها، دسترسی کاربران به منابع مختلف کنترل میشود.
کنترل اعتبار کوکیها: تنظیمات کوکیها باعث میشود که جلسات احراز هویت به طور خودکار منقضی شوند.
تزریق وابستگیها: ثبت سرویسهای مربوط به سبد خرید و درخواستهای پرداخت به افزایش انعطافپذیری و ماژولار بودن برنامه کمک میکند.
جمعبندی:
این کد به خوبی تنظیمات امنیتی و مدیریتی برنامه را مشخص میکند و همه چیز برای مدیریت نقشها، احراز هویت و تزریق سرویسها طراحی شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
توضیح کد مدل namespace EndPoint.Site.Models { public class VerifyParameters { public string amount { set; get; } public string merchant_id { set; get; } public string authority { set; get; } } }
این کد یک کلاس مدل به نام VerifyParameters را تعریف میکند که برای ارسال پارامترهای لازم به درگاه پرداخت (مثل زرینپال) طراحی شده است. این کلاس شامل سه ویژگی اصلی است که در فرآیند تأیید پرداخت مورد نیاز هستند:
ویژگیها و توضیحات:
1. amount:
نوع داده: string
وظیفه: مبلغ پرداختی را نشان میدهد. این مقدار معمولاً به صورت عددی ذخیره میشود و نشاندهنده مبلغ تراکنش است.
کاربرد: مشخص کردن مقدار پولی که کاربر باید پرداخت کند.
2. merchant_id:
نوع داده: string
وظیفه: شناسه پذیرنده (Merchant ID) که توسط درگاه پرداخت اختصاص داده میشود.
کاربرد: شناسایی حساب پذیرنده در سیستم درگاه پرداخت.
3. authority:
نوع داده: string
وظیفه: شناسه تراکنش پرداخت. این مقدار توسط درگاه پرداخت (مثل زرینپال) تولید میشود و برای تأیید تراکنش استفاده میگردد.
کاربرد: هنگام تأیید پرداخت، این مقدار باید به درگاه ارسال شود تا تراکنش تأیید شود.
کاربرد کلی کلاس:
این کلاس مدل برای ارسال دادههای مربوط به تأیید پرداخت طراحی شده است و به عنوان یک قالب (template) برای پارامترهای مورد نیاز استفاده میشود.
در سرویسها یا کنترلرها، دادههای مربوط به پرداخت از سمت برنامه جمعآوری شده و در قالب این مدل به درگاه پرداخت ارسال میشوند.
مزایای استفاده از این مدل:
ساختار مشخص: استفاده از مدلهای مشخص مانند VerifyParameters باعث نظم و خوانایی بیشتر کد میشود.
انعطافپذیری بالا: قابلیت گسترش یا تغییر ویژگیهای مدل بدون تأثیر بر سایر بخشهای برنامه.
سازگاری: این مدل برای مطابقت با نیازهای API درگاه پرداخت طراحی شده است.
جمعبندی:
این مدل به خوبی دادههای لازم برای تأیید پرداخت را مدیریت میکند و استفاده از آن باعث کاهش پیچیدگی و افزایش نظم در تعامل با درگاه پرداخت میشود.