Test_Store.Common => PasswordHasher.cs
بیایید با توضیح کد
PasswordHasherکه در کلاس
Test_Store.Common.PasswordHasherقرار دارد، شروع کنیم. این کلاس به منظور هش و تأیید رمز عبورها طراحی شده است و از الگوریتمهای مختلفی استفاده میکند. توضیحات کد: 1. Properties (ویژگیها): -
bool _useAspNetCore: مشخص میکند که آیا از کتابخانه Microsoft.AspNetCore.Cryptography.KeyDerivation استفاده میشود یا خیر. -
byte _formatMarker: نشانگر قالب هش (مانند IdentityV2, IdentityV3, Custom). -
KeyDerivationPrf _prf: تابع اشتقاق کلید مورد استفاده (مانند HMACSHA256). -
HashAlgorithmName _hashAlgorithmName: نام الگوریتم هش مورد استفاده (مانند SHA256). -
bool _includeHeaderInfo: مشخص میکند که آیا اطلاعات پیکربندی در هدر قرار داده میشود یا خیر. -
int _saltLength: طول نمک. -
int _requestedLength: طول کلید مشتق شده. -
int _iterCount: تعداد تکرارهای الگوریتم PBKDF2. 2. Constructor (سازنده): - سازنده کلاس
PasswordHasherپیشفرضها را تنظیم میکند. در این مثال، تنظیمات IdentityV3 با HMACSHA256 و 10000 تکرار استفاده شده است. 3. HashPassword Method (متد HashPassword): - این متد یک رمز عبور را هش میکند. ابتدا یک نمک تولید میکند، سپس کلید مشتق شده (subkey) را با استفاده از PBKDF2 تولید میکند و نهایتاً خروجی به دست آمده را به صورت Base64 بازمیگرداند. 4. VerifyPassword Method (متد VerifyPassword): - این متد رمز عبور ورودی را با رمز عبور هش شده مقایسه میکند. ابتدا رمز عبور هش شده را تجزیه و تحلیل میکند، سپس رمز عبور ورودی را هش میکند و کلیدهای مشتق شده (subkeys) را با هم مقایسه میکند. 5. Helper Methods (متدهای کمکی): -
ByteArraysEqual: دو آرایه بایت را برای برابری مقایسه میکند. -
ReadNetworkByteOrder: خواندن یک مقدار UInt32 از آرایه بایت. -
WriteNetworkByteOrder: نوشتن یک مقدار UInt32 به آرایه بایت. نتیجهگیری: این کلاس به شما کمک میکند تا رمز عبورهای کاربران را به صورت ایمن هش کنید و در پایگاه داده ذخیره کنید. همچنین میتوانید رمز عبورهای ورودی کاربران را با رمز عبورهای ذخیره شده مقایسه کنید و از صحت آنها اطمینان حاصل کنید.
Test_Store.Application => FacadPatterns => IProductFacad.cs
بیایید این اینترفیس
IProductFacadرا بررسی کنیم تا ببینیم که چگونه عمل میکند و چه نیازهایی دارد. بررسی کد: 1. تعریف اینترفیس `IProductFacad`: - این اینترفیس دو پراپرتی شامل
AddNewCategoryServiceو
GetCategoriesServiceدارد. - این دو پراپرتی به سرویسهای مربوط به افزودن دستهبندی جدید و دریافت دستهبندیها اشاره دارند. کد: csharp public interface IProductFacad { AddNewCategoryService AddNewCategoryService { get; } IGetCategoriesService GetCategoriesService { get; } } مفاهیم مرتبط: 1. پراپرتی `AddNewCategoryService`: - این پراپرتی به یک کلاس سرویس به نام
AddNewCategoryServiceاشاره دارد که مسئولیت افزودن دستهبندی جدید را بر عهده دارد. 2. پراپرتی `GetCategoriesService`: - این پراپرتی به یک اینترفیس سرویس به نام
IGetCategoriesServiceاشاره دارد که مسئولیت دریافت دستهبندیها را بر عهده دارد. نتیجهگیری: این اینترفیس به نوعی الگوی طراحی Facade را پیادهسازی میکند که به شما امکان میدهد تا مجموعهای از سرویسهای مرتبط را از طریق یک نقطه ورود واحد مدیریت کنید.
Test_Store => Application => Services => Products => Commands => AddNewCategory => IAddNewCategoryService.cs
بیایید با هم کد AddNewCategoryService را بررسی کنیم. این کد به منظور افزودن یک دستهبندی جدید به فروشگاه شما طراحی شده است.
توضیحات کد:
Interface IAddNewCategoryService:
اینترفیس IAddNewCategoryService یک متد Execute را تعریف میکند که یک دستهبندی جدید را به دیتابیس اضافه میکند. این متد دو پارامتر میپذیرد: ParentId که شناسه دستهبندی والد است (در صورت وجود) و Name که نام دستهبندی جدید است. این متد یک شیء ResultDto برمیگرداند که حاوی وضعیت و پیام نتیجه عملیات است.
Class AddNewCategoryService:
کلاس AddNewCategoryService پیادهسازی اینترفیس IAddNewCategoryService است.
Constructor (سازنده):
سازنده کلاس AddNewCategoryService که یک شیء از نوع IDataBaseContext را دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد مسئول اجرای عملیات افزودن دستهبندی جدید است. ابتدا بررسی میکند که آیا Name خالی یا null است. اگر خالی باشد، یک پیام خطا برمیگرداند.
سپس یک شیء از نوع Category ایجاد میکند و نام دستهبندی و دستهبندی والد (در صورت وجود) را تنظیم میکند.
این دستهبندی جدید را به دیتابیس اضافه میکند و تغییرات را ذخیره میکند.
در نهایت، یک پیام موفقیتآمیز برمیگرداند.
Method GetParent:
این متد مسئول یافتن دستهبندی والد با استفاده از ParentId است. اگر ParentId موجود باشد، دستهبندی والد را از دیتابیس پیدا میکند و برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا دستهبندیهای جدید را به دیتابیس خود اضافه کنید و در صورت وجود، دستهبندی والد را نیز تنظیم کنید. این فرآیند به شما کمک میکند تا ساختار دستهبندیهای فروشگاه خود را بهبود بخشید و مدیریت کنید.
Test_Store => Application => Services => Products => FacadPattern => ProductFacad.cs
بیایید کد ProductFacad را بررسی کنیم. این کلاس به منظور مدیریت الگوی فاساد (Facad Pattern) برای عملیات مرتبط با محصولات طراحی شده است. فاساد پترن یکی از الگوهای طراحی است که به منظور سادهسازی و یکپارچهسازی دسترسی به سیستمهای پیچیده استفاده میشود.
توضیحات کد:
Namespace و Interface:
namespace Test_Store.Application.Services.Products.FacadPattern:
نامفضا برای سازماندهی کدها.
IProductFacad:
اینترفیس مربوط به کلاس ProductFacad.
Class ProductFacad:
این کلاس پیادهسازی اینترفیس IProductFacad است.
Constructor (سازنده):
سازنده کلاس ProductFacad که یک شیء از نوع IDataBaseContext را دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Property AddNewCategoryService:
این Property یک شیء از نوع AddNewCategoryService را برمیگرداند. در صورتی که این شیء از قبل ایجاد نشده باشد، یک نمونه جدید از آن ایجاد میکند.
استفاده از الگوی Singleton برای اطمینان از این که تنها یک نمونه از AddNewCategoryService وجود دارد.
Property GetCategoriesService:
این Property یک شیء از نوع IGetCategoriesService را برمیگرداند. در صورتی که این شیء از قبل ایجاد نشده باشد، یک نمونه جدید از آن ایجاد میکند.
استفاده از الگوی Singleton برای اطمینان از این که تنها یک نمونه از GetCategoriesService وجود دارد.
مزایای استفاده از Facad Pattern:
سادگی و یکنواختی:
فاساد پترن به شما اجازه میدهد تا یک رابط ساده و یکنواخت برای عملیات پیچیده ایجاد کنید.
نگهداری آسان:
با استفاده از این الگو، تغییرات و نگهداری کدها سادهتر میشود، زیرا تمامی دسترسیها از طریق یک نقطه (فاساد) انجام میشود.
افزایش انعطافپذیری:
این الگو به شما امکان میدهد تا به راحتی سرویسهای جدیدی اضافه کنید یا سرویسهای موجود را تغییر دهید، بدون این که تغییرات زیادی در سایر قسمتهای برنامه اعمال شود.
نتیجهگیری:
کلاس ProductFacad به شما اجازه میدهد تا عملیات مرتبط با محصولات را سادهتر مدیریت کنید و دسترسی به سرویسهای مختلف مانند AddNewCategoryService و GetCategoriesService را یکپارچه کنید. این کلاس با استفاده از الگوی Singleton اطمینان حاصل میکند که تنها یک نمونه از هر سرویس ایجاد میشود.
Test_Store => Application => Services => Products => Queries => GetCategories => IGetCategoriesService.cs
بیایید کد GetCategoriesService را بررسی کنیم. این کد به منظور دریافت لیست دستهبندیها طراحی شده است و شامل اینترفیس، کلاس سرویس، و چند DTO میشود.
توضیحات کد:
Interface IGetCategoriesService:
این اینترفیس یک متد Execute را تعریف میکند که لیست دستهبندیها را بر اساس ParentId برمیگرداند. این متد یک شیء ResultDto شامل لیستی از CategoriesDto را برمیگرداند.
Class GetCategoriesService:
کلاس GetCategoriesService پیادهسازی اینترفیس IGetCategoriesService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد لیست دستهبندیها را بر اساس ParentId برمیگرداند. ابتدا دستهبندیها را از دیتابیس دریافت میکند، سپس آنها را به لیست CategoriesDto تبدیل میکند و نهایتاً نتیجه را برمیگرداند.
DTO Classes:
CategoriesDto:
این کلاس نمایشی از یک دستهبندی شامل Id, Name, HasChild, و Parent است.
ParentCategoryDto:
این کلاس نمایشی از دستهبندی والد شامل Id و name است.
نحوه عملکرد Execute Method:
دریافت دستهبندیها از دیتابیس:
ابتدا دستهبندیها را با استفاده از Include (برای بارگذاری دستهبندی والد و زیر دستهها) و Where (برای فیلتر کردن بر اساس ParentId) از دیتابیس دریافت میکند.
تبدیل به DTO:
سپس دستهبندیها را به لیست CategoriesDto تبدیل میکند. در هر CategoriesDto، اطلاعات مربوط به دستهبندی مانند Id, Name, Parent (در صورت وجود)، و HasChild (برای بررسی وجود زیر دستهها) ذخیره میشود.
بازگرداندن نتیجه:
نهایتاً یک شیء ResultDto شامل لیست دستهبندیها، وضعیت موفقیتآمیز بودن عملیات، و یک پیام برگردانده میشود.
نتیجهگیری:
این کد به شما کمک میکند تا به راحتی لیست دستهبندیها را بر اساس ParentId دریافت کنید و آنها را به صورت DTO بازگردانید. این روش به شما امکان میدهد تا دادهها را به شکل مورد نیاز در لایههای مختلف برنامه نمایش دهید.
Test_Store => Application => Services => Users => Commands => EditUser => IEditUserService.cs
بیایید کد EditUserService را بررسی کنیم. این کد به منظور ویرایش اطلاعات کاربر طراحی شده است و شامل اینترفیس، کلاس سرویس، و یک DTO میشود.
توضیحات کد:
Interface IEditUserService:
این اینترفیس یک متد Execute را تعریف میکند که درخواست ویرایش کاربر را میپذیرد و نتیجه عملیات را برمیگرداند. این متد یک شیء RequestEdituserDto به عنوان ورودی میپذیرد و یک شیء ResultDto به عنوان خروجی برمیگرداند.
Class EditUserService:
کلاس EditUserService پیادهسازی اینترفیس IEditUserService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute: این متد مسئول اجرای عملیات ویرایش کاربر است.
ابتدا با استفاده از request.UserId کاربر مورد نظر را از دیتابیس پیدا میکند.
اگر کاربر یافت نشد، یک پیام خطا برمیگرداند.
اگر کاربر یافت شد، نام کامل کاربر (FullName) را به مقدار جدید تنظیم میکند و تغییرات را ذخیره میکند.
در نهایت، یک پیام موفقیتآمیز برمیگرداند.
DTO Classes:
RequestEdituserDto:
این کلاس نمایشی از درخواست ویرایش کاربر شامل UserId و Fullname است.
نحوه عملکرد Execute Method:
پیدا کردن کاربر:
ابتدا کاربر مورد نظر را با استفاده از request.UserId از دیتابیس پیدا میکند.
اگر کاربر یافت نشد، یک پیام خطا شامل IsSuccess برابر با false و Message با مقدار "کاربر یافت نشد" برمیگرداند.
ویرایش اطلاعات کاربر:
اگر کاربر یافت شد، مقدار FullName کاربر را به مقدار جدید از request.Fullname تنظیم میکند.
تغییرات را در دیتابیس ذخیره میکند.
در نهایت، یک پیام موفقیتآمیز شامل IsSuccess برابر با true و Message با مقدار "ویرایش کاربر انجام شد" برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا اطلاعات کاربر را به راحتی ویرایش کنید و نتیجه عملیات را به صورت یک شیء ResultDto شامل وضعیت موفقیت و پیام مناسب برگردانید.
Test_Store => Application => Services => Users => Commands => RegisterUser => IRegisterUserService.cs
بیایید با هم کد RegisterUserService را بررسی کنیم. این کد به منظور ثبتنام کاربران جدید طراحی شده است و شامل اینترفیس، کلاس سرویس، و چند DTO میشود.
توضیحات کد:
Interface IRegisterUserService:
این اینترفیس یک متد Execute را تعریف میکند که درخواست ثبتنام کاربر را میپذیرد و نتیجه عملیات را برمیگرداند. این متد یک شیء RequestRegisterUserDto به عنوان ورودی میپذیرد و یک شیء ResultDto<ResultRegisterUserDto> به عنوان خروجی برمیگرداند.
Class RegisterUserService:
کلاس RegisterUserService پیادهسازی اینترفیس IRegisterUserService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد مسئول اجرای عملیات ثبتنام کاربر است.
ابتدا بررسی میکند که آیا فیلدهای ضروری (ایمیل، نام، رمز عبور، تکرار رمز عبور) خالی یا نادرست هستند و در صورت لزوم پیام خطا برمیگرداند.
سپس ایمیل کاربر را با استفاده از یک الگوی regex بررسی میکند تا از صحت آن اطمینان حاصل کند.
رمز عبور کاربر را هش میکند و یک شیء User جدید ایجاد میکند.
نقشهای کاربر را به UserInRole ها تبدیل میکند و آنها را به کاربر اضافه میکند.
کاربر جدید را به دیتابیس اضافه میکند و تغییرات را ذخیره میکند.
در نهایت، نتیجه موفقیتآمیز بودن عملیات را برمیگرداند.
DTO Classes:
RequestRegisterUserDto:
این کلاس نمایشی از درخواست ثبتنام کاربر شامل FullName, Email, Password, RePassword, و لیستی از RolesInRegisterUserDto است.
RolesInRegisterUserDto:
این کلاس نمایشی از نقشهای کاربر شامل Id است.
ResultRegisterUserDto:
این کلاس نمایشی از نتیجه ثبتنام کاربر شامل UserId است.
نحوه عملکرد Execute Method:
بررسی فیلدهای ورودی:
ابتدا بررسی میکند که آیا فیلدهای ضروری خالی هستند یا خیر. اگر هر یک از فیلدها خالی باشد، یک پیام خطا شامل IsSuccess برابر با false و Message مناسب برمیگرداند.
بررسی صحت ایمیل:
با استفاده از regex، صحت ایمیل ورودی را بررسی میکند. اگر ایمیل نادرست باشد، یک پیام خطا برمیگرداند.
هش کردن رمز عبور:
رمز عبور ورودی را با استفاده از PasswordHasher هش میکند.
ایجاد و ذخیره کاربر جدید:
یک شیء User جدید ایجاد میکند و اطلاعات کاربر را تنظیم میکند.
نقشهای کاربر را به UserInRole ها تبدیل میکند و آنها را به کاربر اضافه میکند.
کاربر جدید را به دیتابیس اضافه میکند و تغییرات را ذخیره میکند.
نتیجه موفقیتآمیز بودن عملیات را با UserId کاربر جدید برمیگرداند.
مدیریت خطاها:
در صورت بروز هرگونه خطا، یک پیام خطا برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا کاربران جدید را به راحتی ثبتنام کنید و نتیجه عملیات را به صورت یک شیء ResultDto شامل وضعیت موفقیت و پیام مناسب برگردانید.
Test_Store => Application => Services => Users => Commands => RemoveUser => IRemoveUserService.cs
بیایید کد IRemoveUserService را بررسی کنیم. این کد شامل یک اینترفیس است که متد حذف کاربر را تعریف میکند.
توضیحات کد:
Namespace:
namespace Test_Store.Application.Services.Users.Commands.RemoveUser:
نامفضا برای سازماندهی کدهای مرتبط با عملیات حذف کاربر.
Interface IRemoveUserService:
این اینترفیس یک متد Execute را تعریف میکند که مسئولیت حذف کاربر را بر عهده دارد.
متد Execute:
این متد یک پارامتر UserId از نوع long میپذیرد که شناسه کاربری است که باید حذف شود.
این متد یک شیء ResultDto برمیگرداند که شامل وضعیت و پیام نتیجه عملیات حذف است.
نتیجهگیری:
این اینترفیس IRemoveUserService، یک قرارداد برای سرویس حذف کاربر تعریف میکند که شامل یک متد Execute است. این متد شناسه کاربر را به عنوان ورودی میپذیرد و نتیجه عملیات حذف را به صورت یک شیء ResultDto بازمیگرداند.
برای پیادهسازی این اینترفیس، شما نیاز به یک کلاس دارید که این اینترفیس را پیادهسازی کند و عملیات حذف کاربر را انجام دهد.
Test_Store => Application => Services => Users => Commands => RemoveUser => RemoveUserService.cs
بیایید کد RemoveUserService را بررسی کنیم. این کد به منظور حذف کاربران از سیستم طراحی شده است و شامل پیادهسازی اینترفیس IRemoveUserService است.
توضیحات کد:
Namespace:
namespace Test_Store.Application.Services.Users.Commands.RemoveUser:
نامفضا برای سازماندهی کدهای مرتبط با عملیات حذف کاربر.
Class RemoveUserService:
این کلاس پیادهسازی اینترفیس IRemoveUserService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد مسئول اجرای عملیات حذف کاربر است.
متد Execute:
این متد یک پارامتر UserId از نوع long میپذیرد که شناسه کاربری است که باید حذف شود.
ابتدا با استفاده از UserId کاربر مورد نظر را از دیتابیس پیدا میکند.
اگر کاربر یافت نشد، یک پیام خطا شامل IsSuccess برابر با false و Message با مقدار "کاربر یافت نشد" برمیگرداند.
اگر کاربر یافت شد، زمان حذف (RemoveTime) و وضعیت حذف (IsRemoved) کاربر را بهروز میکند.
تغییرات را در دیتابیس ذخیره میکند.
در نهایت، یک پیام موفقیتآمیز شامل IsSuccess برابر با true و Message با مقدار "کاربر با موفقیت حذف شد" برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا کاربران را به راحتی از سیستم حذف کنید و نتیجه عملیات را به صورت یک شیء ResultDto شامل وضعیت موفقیت و پیام مناسب برگردانید.
Test_Store => Application => Services => Users => Commands => UserLogin => IUserLoginService.cs
بیایید کد UserLoginService را بررسی کنیم. این کد به منظور احراز هویت کاربران و ورود آنها به سیستم طراحی شده است و شامل اینترفیس، کلاس سرویس، و یک DTO میشود.
توضیحات کد:
Interface IUserLoginService:
این اینترفیس یک متد Execute را تعریف میکند که نام کاربری (Username) و رمز عبور (Password) را میپذیرد و نتیجه عملیات را برمیگرداند. این متد یک شیء ResultDto<ResultUserloginDto> به عنوان خروجی برمیگرداند.
Class UserLoginService:
کلاس UserLoginService پیادهسازی اینترفیس IUserLoginService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد مسئول اجرای عملیات احراز هویت و ورود کاربر است.
ابتدا بررسی میکند که آیا فیلدهای Username و Password خالی یا نادرست هستند و در صورت لزوم پیام خطا برمیگرداند.
سپس کاربر را با استفاده از Username از دیتابیس پیدا میکند.
اگر کاربر یافت نشد، یک پیام خطا برمیگرداند.
اگر کاربر یافت شد، رمز عبور ورودی را با رمز عبور ذخیره شده مقایسه میکند.
اگر رمز عبور نادرست باشد، یک پیام خطا برمیگرداند.
اگر رمز عبور صحیح باشد، نقشهای کاربر را به صورت رشتهای (Roles) در ResultUserloginDto ذخیره میکند و نتیجه موفقیتآمیز بودن عملیات را برمیگرداند.
DTO Classes:
ResultUserloginDto:
این کلاس نمایشی از نتیجه احراز هویت کاربر شامل UserId, Roles, و Name است.
نحوه عملکرد Execute Method:
بررسی فیلدهای ورودی:
ابتدا بررسی میکند که آیا فیلدهای Username و Password خالی هستند یا خیر. اگر هر یک از فیلدها خالی باشد، یک پیام خطا شامل IsSuccess برابر با false و Message مناسب برمیگرداند.
پیدا کردن کاربر:
سپس کاربر را با استفاده از Username از دیتابیس پیدا میکند. اگر کاربر یافت نشد، یک پیام خطا شامل IsSuccess برابر با false و Message با مقدار "کاربری با این ایمیل در سایت فروشگاه باگتو ثبت نام نکرده است" برمیگرداند.
تأیید رمز عبور:
رمز عبور ورودی را با رمز عبور ذخیره شده مقایسه میکند. اگر رمز عبور نادرست باشد، یک پیام خطا شامل IsSuccess برابر با false و Message با مقدار "رمز وارد شده اشتباه است!" برمیگرداند.
ذخیره نقشها و بازگرداندن نتیجه:
نقشهای کاربر را به صورت رشتهای (Roles) در ResultUserloginDto ذخیره میکند.
نتیجه موفقیتآمیز بودن عملیات را با UserId, Roles, و Name کاربر برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا کاربران را احراز هویت کنید و نتیجه عملیات ورود را به صورت یک شیء ResultDto شامل وضعیت موفقیت و پیام مناسب برگردانید. همچنین نقشهای کاربر را به صورت رشتهای در ResultUserloginDto ذخیره میکند.
Test_Store => Application => Services => Users => Commands => UserSatusChange => IUserSatusChangeService.cs
بیایید کد UserSatusChangeService را بررسی کنیم. این کد به منظور تغییر وضعیت فعالیت کاربران طراحی شده است و شامل اینترفیس، کلاس سرویس، و یک متد اصلی است.
توضیحات کد:
Namespace:
namespace Test_Store.Application.Services.Users.Commands.UserSatusChange:
نامفضا برای سازماندهی کدهای مرتبط با عملیات تغییر وضعیت کاربر.
Interface IUserSatusChangeService:
این اینترفیس یک متد Execute را تعریف میکند که شناسه کاربر (UserId) را میپذیرد و نتیجه عملیات را برمیگرداند. این متد یک شیء ResultDto به عنوان خروجی برمیگرداند.
Class UserSatusChangeService:
کلاس UserSatusChangeService پیادهسازی اینترفیس IUserSatusChangeService است.
Constructor:
سازنده کلاس که یک شیء از نوع IDataBaseContext دریافت میکند. این شیء برای دسترسی به دیتابیس استفاده میشود.
Method Execute:
این متد مسئول اجرای عملیات تغییر وضعیت کاربر است.
متد Execute:
این متد یک پارامتر UserId از نوع long میپذیرد که شناسه کاربری است که باید وضعیت آن تغییر کند.
ابتدا با استفاده از UserId کاربر مورد نظر را از دیتابیس پیدا میکند.
اگر کاربر یافت نشد، یک پیام خطا شامل IsSuccess برابر با false و Message با مقدار "کاربر یافت نشد" برمیگرداند.
اگر کاربر یافت شد، وضعیت فعالیت کاربر (IsActive) را به مقدار مخالف فعلی تغییر میدهد.
تغییرات را در دیتابیس ذخیره میکند.
وضعیت جدید کاربر را بررسی کرده و بر اساس آن پیام مناسب را تنظیم میکند.
در نهایت، یک پیام موفقیتآمیز شامل IsSuccess برابر با true و Message مناسب برمیگرداند.
نتیجهگیری:
این کد به شما امکان میدهد تا وضعیت فعالیت کاربران را به راحتی تغییر دهید و نتیجه عملیات را به صورت یک شیء ResultDto شامل وضعیت موفقیت و پیام مناسب برگردانید.
Test_Store => Domain => Entities => Commons => BaseEntity.cs
بیایید کد BaseEntity را بررسی کنیم. این کد شامل دو کلاس انتزاعی است که به عنوان پایه برای دیگر کلاسهای موجودیتها در پروژه شما عمل میکنند.
توضیحات کد:
Namespace:
namespace Test_Store.Domain.Entities.Commons:
نامفضا برای سازماندهی کدهای مرتبط با کلاسهای پایه و عمومی.
Abstract Class BaseEntity<TKey>:
این کلاس انتزاعی به منظور تعریف ویژگیهای عمومی موجودیتها ایجاد شده است و از نوع جنریک TKey استفاده میکند.
Properties:
public TKey Id { get; set; }:
شناسه موجودیت از نوع جنریک TKey.
public DateTime InsertTime { get; set; } = DateTime.Now;:
زمان درج موجودیت، به طور پیشفرض زمان فعلی را تنظیم میکند.
public DateTime? UpdateTime { get; set; }:
زمان بهروزرسانی موجودیت، مقدار نالپذیر.
public bool IsRemoved { get; set; } = false;:
وضعیت حذف موجودیت، به طور پیشفرض مقدار false دارد.
public DateTime? RemoveTime { get; set; }:
زمان حذف موجودیت، مقدار نالپذیر.
Abstract Class BaseEntity:
این کلاس انتزاعی از BaseEntity<long> ارثبری میکند و به عنوان یک کلاس پایه عمومی با شناسه از نوع long عمل میکند.
Inheritance:
public abstract class BaseEntity :
BaseEntity<long>: ارثبری از کلاس جنریک BaseEntity با نوع long برای شناسه.
نتیجهگیری:
این کد به شما امکان میدهد تا کلاسهای موجودیتهای مختلف را به سادگی و با استفاده از کلاس پایه BaseEntity ایجاد کنید. کلاس BaseEntity ویژگیهای عمومی مانند شناسه، زمان درج، زمان بهروزرسانی، وضعیت حذف، و زمان حذف را تعریف میکند که میتواند در تمامی موجودیتها استفاده شود. این ساختار به شما کمک میکند تا کدهای خود را سازماندهی کرده و تکرار کدها را کاهش دهید.