پروژه 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 درگاه پرداخت طراحی شده است.
جمعبندی:
این مدل به خوبی دادههای لازم برای تأیید پرداخت را مدیریت میکند و استفاده از آن باعث کاهش پیچیدگی و افزایش نظم در تعامل با درگاه پرداخت میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
کلاس RequestParameters برای ارسال پارامترهای ضروری به درگاه پرداخت طراحی شده است. این مدل شامل اطلاعاتی است که برای ایجاد یک درخواست پرداخت لازم هستند. در ادامه، بخشهای مختلف این کلاس توضیح داده میشود:
1. ویژگیها (Properties):
a) merchant_id:
نوع داده: string
وظیفه: شناسه پذیرنده که توسط درگاه پرداخت ارائه میشود.
کاربرد: شناسایی حساب پذیرنده در سیستم درگاه پرداخت.
b) amount:
نوع داده: string
وظیفه: مبلغ تراکنش پرداخت.
کاربرد: نشاندهنده میزان پولی که کاربر باید پرداخت کند.
c) description:
نوع داده: string
وظیفه: توضیحات مرتبط با پرداخت.
کاربرد: مثلاً میتوان توضیحاتی در مورد سفارش یا هدف پرداخت وارد کرد که این اطلاعات به کاربر یا پذیرنده نمایش داده میشود.
d) callback_url:
نوع داده: string
وظیفه: آدرس بازگشتی که پس از تکمیل یا لغو پرداخت توسط درگاه استفاده میشود.
کاربرد: این URL به درگاه پرداخت اعلام میشود تا کاربر پس از انجام پرداخت به آن هدایت شود.
e) metadata:
نوع داده: string[]? (یک آرایه قابل nullable از رشتهها)
وظیفه: شامل اطلاعات اضافی مانند موبایل و ایمیل کاربر.
کاربرد: ارسال اطلاعات جانبی به درگاه پرداخت برای سفارشیسازی تراکنش.
2. سازنده (Constructor):
سازنده این کلاس وظیفه مقداردهی اولیه به ویژگیها را بر عهده دارد. ورودیها:
merchant_id: شناسه پذیرنده.
amount: مبلغ پرداخت.
description: توضیحات تراکنش.
callback_url: آدرس بازگشتی.
mobile: شماره موبایل کاربر (اختیاری).
email: آدرس ایمیل کاربر (اختیاری).
مقداردهی:
متغیرهای ورودی به ویژگیهای کلاس نسبت داده میشوند.
آرایه metadata مقداردهی میشود و در صورت وجود مقادیر mobile و email، مقادیر آنها در آرایه ذخیره میشوند.
3. تبدیل نوع (implicit operator):
متد implicit operator تعریف شده اما هنوز پیادهسازی نشده است. این متد برای تبدیل مستقیم نوع RequestParameters به نوع دیگری (احتمالاً RestSharp.RequestParameters) استفاده میشود.
در حال حاضر، متد یک استثنا (NotImplementedException) را پرتاب میکند.
کاربرد کلاس:
این کلاس به عنوان مدلی برای ارسال پارامترهای مربوط به درخواست پرداخت به درگاه پرداخت استفاده میشود.
ویژگیهایی مانند شناسه پذیرنده، مبلغ پرداخت، توضیحات و آدرس بازگشتی همه در یک ساختار واحد سازماندهی شدهاند.
اطلاعات متادیتا (مانند موبایل و ایمیل) نیز میتوانند به درخواست پرداخت اضافه شوند.
نقاط قوت:
ساختار منظم: ویژگیهای مربوط به درخواست پرداخت به خوبی سازماندهی شدهاند.
انعطافپذیری: از metadata برای افزودن اطلاعات جانبی استفاده میشود.
قابلیت توسعه: سازنده کلاس و متد تبدیل نوع امکان گسترش و استفاده آسان را فراهم میکنند.
پیشنهادات بهبود:
پیادهسازی implicit operator:
پیادهسازی این متد برای تبدیل مستقیم به نوع دیگر (مثلاً RestSharp.RequestParameters) میتواند استفاده از کلاس را سادهتر کند.
بررسی مقادیر ورودی:
میتوان با افزودن اعتبارسنجی (Validation)، از مقداردهی نادرست متغیرها جلوگیری کرد.
جمعبندی:
کلاس RequestParameters مدلی بسیار مفید برای مدیریت پارامترهای پرداخت است و ساختاری انعطافپذیر و کاربرپسند دارد. این کلاس میتواند به راحتی در هر پروژهای که نیاز به تعامل با درگاه پرداخت دارد مورد استفاده قرار گیرد
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد یک کنترلر به نام PayController برای مدیریت فرآیندهای پرداخت در برنامه ASP.NET Core است. در ادامه توضیحات مربوط به بخشهای مختلف آن ارائه شده است:
1. ویژگیها و سازنده (Constructor):
ویژگیها:
IAddRequestPayService
برای ایجاد درخواست پرداخت.
ICartService برای مدیریت سبد خرید.
IGetRequestPayService
برای بازیابی اطلاعات پرداخت.
CookiesManeger
برای مدیریت کوکیهای کاربر.
سازنده:
وابستگیها با استفاده از تزریق وابستگی (Dependency Injection) مقداردهی میشوند.
2. متد Index:
این متد وظیفه ایجاد درخواست پرداخت و هدایت کاربر به درگاه پرداخت را بر عهده دارد.
مراحل:
دریافت شناسه کاربر:
با استفاده از کوکیها یا اطلاعات احراز هویت، شناسه کاربر (UserId) استخراج میشود.
بازیابی سبد خرید:
سبد خرید کاربر با استفاده از ICartService بازگردانده میشود.
بررسی مبلغ سبد خرید:
اگر مبلغ سبد خرید صفر باشد، کاربر به صفحه سبد خرید هدایت میشود.
ایجاد درخواست پرداخت:
با استفاده از IAddRequestPayService درخواست پرداخت در پایگاه داده ذخیره میشود.
ارسال درخواست به درگاه پرداخت:
اطلاعات پرداخت شامل مبلغ، توضیحات، شناسه پذیرنده و لینک بازگشتی به درگاه ارسال میشود.
اگر درگاه پاسخ موفق برگرداند، کاربر به صفحه پرداخت هدایت میشود.
مدیریت خطا:
در صورت قطع اینترنت یا خطا در پاسخ درگاه، پیغام خطا در ویو ErrorView نمایش داده میشود.
3. متد Verify:
این متد وظیفه تأیید پرداخت و مدیریت نتیجه آن را بر عهده دارد.
مراحل:
بررسی وضعیت پرداخت:
وضعیت پرداخت از پارامتر status بررسی میشود. اگر کاربر پرداخت را لغو کرده باشد، پیام خطای "پرداخت توسط کاربر لغو شد" نمایش داده میشود.
بازیابی درخواست پرداخت:
اطلاعات پرداخت مرتبط با GUID از پایگاه داده استخراج میشود.
ارسال درخواست تأیید:
اطلاعات پرداخت شامل مبلغ، شناسه تراکنش (authority) و شناسه پذیرنده (merchant_id) به API تأیید پرداخت ارسال میشود.
بررسی موفقیت پرداخت:
اگر تراکنش موفق باشد، شماره پیگیری پرداخت (ref_id) ذخیره شده و پیام موفقیت نمایش داده میشود.
اگر خطایی وجود داشته باشد، پیام خطای مناسب نمایش داده میشود.
ویژگیهای مهم:
مدیریت سبد خرید:
از ICartService برای بررسی مبلغ و اطلاعات سبد خرید استفاده شده است.
ارتباط با درگاه پرداخت:
از HttpClient در متد Index برای ارسال درخواست اولیه پرداخت و از RestClient در متد Verify برای تأیید پرداخت استفاده شده است.
مدیریت خطا:
تمام حالتهای احتمالی مانند پاسخ نامعتبر درگاه، قطع اینترنت و لغو پرداخت توسط کاربر مدیریت شدهاند.
استفاده از کوکیها:
از کوکیها برای شناسایی مرورگر کاربر و مدیریت سبد خرید استفاده شده است.
نقاط قوت:
ساختار ماژولار: وظایف مختلف به متدها و سرویسهای جداگانه تقسیم شدهاند.
مدیریت خطا: خطاهای احتمالی به خوبی مدیریت شدهاند و پیامهای کاربرپسند ارائه میشوند.
یکپارچگی: تعامل بین سبد خرید، پرداخت و درگاه پرداخت به خوبی پیادهسازی شده است.
جمعبندی:
این کنترلر طراحی کاملی برای مدیریت فرآیند پرداخت دارد. از ایجاد درخواست پرداخت تا تأیید آن و هدایت کاربر، همه چیز به درستی سازماندهی شده است
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد یک ویو در Razor برای نمایش نتیجه پرداخت طراحی شده است. ویو بر اساس مقدار موجود در ViewBag، نتیجه پرداخت را به کاربر نمایش میدهد. در ادامه توضیح بخشهای مختلف کد آورده شده است:
1. تنظیم عنوان صفحه
csharp
@{
ViewData["Title"] = "نتیجه پرداخت";
}
وظیفه: تنظیم عنوان صفحه (در اینجا "نتیجه پرداخت") که در مرورگر نمایش داده میشود.
این مقدار معمولاً در بخش <title> از فایل Layout نمایش داده میشود.
2. نمایش عنوان صفحه
html
<h2>نتیجه پرداخت</h2>
یک عنوان اصلی (<h2>) برای نمایش عنوان صفحه به کاربران.
3. نمایش نتیجه پرداخت
ویو بر اساس وضعیتهای مختلف، سه سناریو را مدیریت میکند:
الف) پرداخت موفق
csharp
@if (ViewBag.code != null)
{
<div style="background-color: #d4edda; color: #155724; padding: 15px; border: 1px solid #c3e6cb; border-radius: 5px;">
<h4>پرداخت موفق!</h4>
<p>شماره پیگیری پرداخت شما:</p>
<p><strong>@ViewBag.code</strong></p>
<a href="/" style="text-decoration: none; color: white; background-color: #28a745; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
}
شرط: اگر ViewBag.code مقداردهی شده باشد (یعنی تراکنش موفق باشد).
نمایش پیام: پیام "پرداخت موفق" نمایش داده میشود.
شماره پیگیری: مقدار ViewBag.code (مثلاً شماره پیگیری تراکنش) به کاربر نمایش داده میشود.
دکمه بازگشت: لینکی برای بازگشت کاربر به صفحه اصلی.
ب) پرداخت ناموفق
csharp
else if (ViewBag.ErrorMessage != null)
{
<div style="background-color: #f8d7da; color: #721c24; padding: 15px; border: 1px solid #f5c6cb; border-radius: 5px;">
<h4>پرداخت ناموفق</h4>
<p>@ViewBag.ErrorMessage</p>
<a href="/Cart/Index" style="text-decoration: none; color: white; background-color: #dc3545; padding: 10px 15px; border-radius: 5px;">بازگشت به سبد خرید</a>
</div>
}
شرط: اگر مقدار ViewBag.ErrorMessage تنظیم شده باشد (پرداخت ناموفق یا خطا رخ داده باشد).
نمایش پیام: پیام "پرداخت ناموفق" و توضیحات خطا که از ViewBag.ErrorMessage خوانده میشود.
دکمه بازگشت: لینکی برای بازگشت به صفحه سبد خرید.
ج) وضعیت نامشخص
csharp
else
{
<div style="background-color: #fff3cd; color: #856404; padding: 15px; border: 1px solid #ffeeba; border-radius: 5px;">
<h4>اطلاعات پرداخت در دسترس نیست</h4>
<p>لطفاً دوباره تلاش کنید.</p>
<a href="/" style="text-decoration: none; color: white; background-color: #ffc107; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
}
شرط: زمانی که ViewBag.code و ViewBag.ErrorMessage هردو null باشند (یعنی پرداخت در وضعیت نامشخص است).
نمایش پیام: پیام "اطلاعات پرداخت در دسترس نیست" به کاربر نمایش داده میشود.
دکمه بازگشت: لینکی برای بازگشت به صفحه اصلی.
4. طراحی بصری با CSS Inline
طراحی بصری با استفاده از style درونخطی انجام شده است:
زمینه رنگی (background-color):
سبز (#d4edda) برای موفقیت.
قرمز (#f8d7da) برای شکست.
زرد (#fff3cd) برای وضعیت نامشخص.
حاشیه (border): حاشیههایی با رنگ مناسب برای هر وضعیت.
دایره کردن گوشهها (border-radius): به منظور زیباتر کردن طراحی.
لینکها: به صورت دکمههای ساده با رنگ و طراحی مناسب.
جمعبندی:
ویو به خوبی وضعیتهای مختلف پرداخت را مدیریت میکند:
پرداخت موفق.
پرداخت ناموفق.
وضعیت نامشخص.
از طراحی ساده و واضح برای نمایش پیامها و اطلاعات استفاده شده است.
امکان بازگشت به صفحه اصلی یا سبد خرید با استفاده از لینکهای مناسب فراهم شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
کد مربوط به ErrorView برای نمایش پیامهای خطا طراحی شده است و مشخصاً برای زمانی که مشکلی در اتصال به درگاه پرداخت پیش میآید استفاده میشود. در ادامه توضیحات بخشهای مختلف این ویو آورده شده است:
1. تنظیم عنوان صفحه
csharp
@{
ViewData["Title"] = "خطای اتصال";
}
وظیفه: تعیین عنوان صفحه (در اینجا "خطای اتصال").
این عنوان معمولاً در بخش <title> فایل Layout اصلی نمایش داده میشود.
2. نمایش عنوان اصلی
html
<h2>خطا</h2>
این خط یک عنوان اصلی (<h2>) برای صفحه خطا است که به کاربر اعلام میکند مشکلی رخ داده است.
3. نمایش پیام خطا
html
<div style="background-color: #f8d7da; color: #721c24; padding: 15px; border: 1px solid #f5c6cb; border-radius: 5px;">
<h4>مشکلی در اتصال به درگاه پرداخت پیش آمده است.</h4>
<p>@ViewBag.ErrorMessage</p>
<a href="/" style="text-decoration: none; color: white; background-color: #dc3545; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
توضیحات بخشها:
<div>:
این بخش اصلی ویو است و پیام خطا را در قالب یک باکس طراحیشده نمایش میدهد.
از استایلهای CSS درونخطی برای طراحی بصری استفاده شده است:
رنگ زمینه (background-color): رنگ قرمز کمرنگ (#f8d7da) که نشاندهنده خطاست.
رنگ متن (color): قرمز تیره (#721c24) برای هماهنگی با رنگ زمینه.
حاشیه (border): حاشیهای قرمز با ضخامت مناسب برای تاکید بر خطا.
گرد کردن گوشهها (border-radius): گوشههای گرد برای زیبایی طراحی.
فاصله داخلی (padding): فاصله مناسب داخلی برای خوانایی بهتر.
<h4>:
عنوان خطای اصلی، یعنی "مشکلی در اتصال به درگاه پرداخت پیش آمده است."
<p>:
پیام خطا از طریق ViewBag.ErrorMessage نمایش داده میشود.
این مقدار معمولاً شامل توضیحاتی درباره علت خطا است که از کنترلر تنظیم شده است.
دکمه بازگشت:
لینکی برای هدایت کاربر به صفحه اصلی:
طراحی آن شبیه یک دکمه است.
از رنگ قرمز تیره برای پسزمینه استفاده شده است که با موضوع خطا هماهنگ است.
کاربرد ویو:
این ویو به طور خاص برای نمایش خطاهای مرتبط با مشکلات اتصال به درگاه پرداخت طراحی شده است. از آنجا که پیام خطا از کنترلر ارسال میشود، این ویو به صورت دینامیک پیامهای مختلف خطا را مدیریت میکند.
مزایا:
ساده و کاربردی: طراحی ویو بسیار ساده و مناسب برای نمایش پیامهای خطاست.
کاربرپسند: پیام خطا به کاربر اطلاع میدهد که مشکلی رخ داده است و گزینهای برای بازگشت ارائه میدهد.
استفاده از CSS داخلی: باعث خوانایی و اجرای سریع طراحی میشود.
جمعبندی:
این ویو به خوبی پیامهای خطا را مدیریت میکند و طراحی بصری آن بسیار مناسب و واضح است.