آموزش برنامه نویسی پیشرفته .NET فول استک: طراحی و توسعه اپلیکیشن های چند مستاجره (جدید) - آخرین آپدیت

دانلود Advanced .NET FullStack: Multi-Tenant Applications (NEW)

نکته: ممکن هست محتوای این صفحه بروز نباشد ولی دانلود دوره آخرین آپدیت می باشد.
نمونه ویدیوها:
توضیحات دوره:

آموزش جامع FullStack MultiTenant با .NET و Blazor WebAssembly

در این دوره جامع، با استفاده از .NET 8 و Blazor WebAssembly، نحوه ایجاد و توسعه Web API های MultiTenant را به صورت FullStack یاد خواهید گرفت. این دوره برای توسعه‌دهندگانی طراحی شده است که می‌خواهند برنامه‌های کاربردی مقیاس‌پذیر و امن را با پشتیبانی از چندین مستأجر ایجاد کنند.

آنچه در این دوره خواهید آموخت:

  • .NET 8: آشنایی با آخرین ویژگی‌ها و بهبودهای .NET 8، از جمله Primary Constructors و بهبودهای زبانی.
  • معماری Clean: درک اصول و بهترین شیوه‌ها برای طراحی معماری Clean با تفکیک نگرانی‌ها، معکوس‌سازی وابستگی و لایه‌بندی.
  • Multi-Tenancy با Finbuckle: پیاده‌سازی پشتیبانی از Multi-Tenancy با استفاده از کتابخانه‌های Finbuckle برای ایجاد برنامه‌هایی که به چندین مستأجر با جداسازی داده‌ها خدمات می‌دهند.
  • مدیریت مستأجرها: یادگیری استراتژی‌های مختلف برای مدیریت مستأجرها، از جمله رویکردهای Multi-Database و Shared Database.
  • فعال/غیرفعال‌سازی مستأجرها: فعال یا غیرفعال کردن پویای مستأجرها بر اساس تقاضا.
  • ارتقاء اشتراک مستأجرها: پیاده‌سازی مدیریت اشتراک برای مستأجرها با افزودن سال‌ها/ماه‌های اعتبار بیشتر به هر مستأجر.
  • AspNet Identity: استفاده از ASP.NET Core Identity برای مدیریت احراز هویت و مجوز کاربران.
  • JSON Web Token (JWT): پیاده‌سازی مکانیزم‌های امن احراز هویت و مجوز با استفاده از JWT.
  • مجوز مبتنی بر Permission: کنترل دسترسی به منابع بر اساس Permission.
  • Global Response Wrapper: استانداردسازی و سفارشی‌سازی پاسخ‌های API در سراسر برنامه.
  • CQRS با MediatR: پیاده‌سازی الگوی CQRS با استفاده از MediatR.
  • Fluent Validation: انجام اعتبارسنجی داده‌ها با استفاده از Fluent Validation.
  • Primary Constructor: استفاده از سینتکس Primary Constructor معرفی‌شده در C# 9.
  • Swagger UI: سفارشی‌سازی Swagger UI برای تولید مستندات API جامع و کاربرپسند.
  • Blazor WebAssembly: توسعه رابط کاربری با Blazor WebAssembly.

پیش‌نیازها:

  • دانش پایه از توسعه Web APIهای .NET
  • آشنایی با زبان برنامه‌نویسی C#
  • Visual Studio 2022
  • Visual Studio Code
  • Microsoft SQL Server

همین حالا در این دوره ثبت‌نام کنید و پتانسیل کامل .NET Core را برای برنامه‌های Multi-Tenant کشف کنید!


سرفصل ها و درس ها

مقدمه Introduction

  • مقدمه Introduction

  • آنچه توسعه خواهیم داد - API What we will develop - API

  • بعدی چه خبر است؟ What's Coming Next

  • آنچه توسعه خواهیم داد - فرانت‌اند (Blazor Webassembly) What we will develop - Frontend(Blazor Webassembly)

  • آنچه برای دنبال کردن نیاز دارید What you will need to follow

طراحی راه حل و زمینه های پایگاه داده Solution Design And Database Contexts

  • ایجاد راه حل معماری پاک Clean Architecture Solution Creation

  • مدیریت ویژگی‌های Nullable Nullable Property Handling

  • مروری بر مسئولیت های پروژه Project Responsibilities Overview

  • تعریف موجودیت مدرسه School Entity Definition

  • نصب بسته‌ها Packages installations

  • تعریف موجودیت Tenant Tenant Entity Definition

  • Tenant Db Context Tenant Db Context

  • Multitenant در Dependency Injection Multitenant into Dependency Injection

  • ثابت های Tenancy Tenancy Constants

  • Multitenancy در Dependency Injection Container نهایی Multitenancy into final Dependency Injection Container

  • کاربر برنامه - IdentityUser Application User - IdentityUser

  • نقش برنامه و ادعای نقش Application Role and Role Claim

  • Base Db Context - مدل های Identity Base Db Context - Identity Models

  • Base Db Context - پیکربندی استفاده از پایگاه داده Tenant Base Db Context - Tenant database usage configuration

  • Base Db Context - پیکربندی استفاده از پایگاه داده Tenant (ویژگی TenantInfo) Base Db Context - Tenant database usage configuration (TenantInfo Property

  • Application Db Context - تعریف و DI Application Db Context - Definition and DI

  • IEntity Type Configuration - جدول های AspNetCore Identity IEntity Type Configuration - AspNetCore Identity Tables

  • اعمال پیکربندی ها از Assembly Apply Configurations From Assembly

  • رشته های اتصال Connection Strings

  • Tenant Db Migration Tenant Db Migration

  • Application Db Context Migration Application Db Context Migration

  • درک معماری پاک Understanding Clean Architecture

ثابت ها Constants

  • ثابت های عمل مدرسه School Action Constants

  • ثابت های ویژگی مدرسه School Feature Constants

  • ثابت اجازه مدرسه School Permission Constant

  • مجوزهای مدرسه - Tenants School Permissions - Tenants

  • مجوزهای مدرسه - Identity و مدرسه School Permissions - Identity and School

  • مجوزهای مدرسه - فیلترها School Permissions - Filters

  • ثابت های نقش Role Constants

  • ثابت های ادعا Claim Constants

  • شمول گروه ادعا Claim Group Inclusion

مقادیر اولیه/Seeders پایگاه داده Database Initializers/Seeders

  • مقداردهی اولیه پایگاه داده - Migration ها Initialize Database - Migrations

  • مقداردهی اولیه نقش های پیش فرض - کامل Initialize Default Roles - Complete

  • مقداردهی اولیه نقش های پیش فرض Initialize Default Roles

  • اختصاص مجوزها به نقش - منطق Assign Permissions To Role - Logic

  • اختصاص مجوزها به نقش - نقش خاص Assign Permissions To Role - Specific Role

  • مقداردهی اولیه کاربر Admin - منطق Initialize Admin User - Logic

  • انتساب کاربر به نقش Admin Assign User to Admin Role

  • Tenant Db Seeder - تعریف Tenant Db Seeder - Definition

  • مقداردهی اولیه پایگاه داده با Tenant - منطق Initialize Database With Tenant - Logic

  • مقداردهی اولیه Application Db برای Tenant Initialize Application Db For Tenant

  • Database Seeder در Dependency Injection Database Seeder into Dependency Injection

  • Identity Service در Dependency Injection Identity Service into Dependency Injection

  • آزمایش Database Seeder - موفقیت Database Seeder Test - Success

استثنائات سفارشی و پوشش سراسری پاسخ Custom Exceptions and Global Response Wrapper

  • تعریف استثنای غیرمجاز Unauthorized Exception Definition

  • استثنائات سفارشی بیشتر - تعاریف More Custom Exceptions - Definitions

  • رابط های Response Wrapper - تعاریف Response Wrapper Interfaces - Definitions

  • Response Wrapper غیر Generic - پیاده سازی Failure Non-Generic Response Wrapper - Failure implementation

  • Response Wrapper غیر Generic - پیاده سازی های Failure (بارگذاری بیش از حد تابع) Non-Generic Response Wrapper - Failure implementations (Function Over Load)

  • Response Wrapper غیر Generic - پیاده سازی های Failure (بارگذاری بیش از حد تابع) Non-Generic Response Wrapper - Failure implementations (Function Over Load)

  • Response Wrapper غیر Generic - پیاده سازی های Success کامل Non-Generic Response Wrapper - Success implementations complete

  • Response Wrapper Generic - تعریف و پیاده سازی Generic Response Wrapper - Definition and Implementations

مجوز مبتنی بر مجوز Permission Based Authorization

  • الزامات مجوز - تعریف Permission Requirement - Definition

  • Permission Policy Provider - تعریف Permission Policy Provider - Definition

  • Permission Authorization Handler - تعریف Permission Authorization Handler - Definition

  • Permission Base Auth در Dependency Injection Permission Base Auth into Dependency Injection

احراز هویت - تولید Json Web Token Authentication - Json Web Token generation

  • مدل های درخواست و پاسخ Token Token Request and Response models

  • مدل درخواست Refresh Token Refresh Token Request model

  • تعریف رابط Token Service Token Service Interface Definition

  • TokenService - پیاده سازی (وابستگی ها) TokenService - Implementation (Dependencies)

  • TokenService - پیاده سازی Login (اعتبارسنجی ها) TokenService - Login Implementation(Validations)

  • TokenService - پیاده سازی Login (اعتبارسنجی انقضای اشتراک Tenant) TokenService - Login Implementation(Tenant Subscription Expiry Validation)

  • پیاده سازی کامل Login Login Full Implementations

  • تولید Token - شمول ادعاها Token Generation - Inclusion of Claims

  • برنامه های افزودنی Claims Principal Claims Principal Extensions

  • Refresh Token - پیاده سازی کامل Refresh Token - Complete implementation

  • بازسازی کد - پیکربندی ها Code refactoring - Configurations

  • بازسازی کد - پیکربندی در Dependency Injection Code refactoring - Configuration into Dependency Injection

  • افزودن احراز هویت Jwt در Dependency Injection قسمت 1 Add Jwt Authentication into Dependency Injection part 1

  • افزودن احراز هویت Jwt در Dependency Injection قسمت 2 Add Jwt Authentication into Dependency Injection part 2

  • افزودن احراز هویت Jwt در Dependency Injection قسمت 3 Add Jwt Authentication into Dependency Injection part 3

  • Tenant Header به عنوان یک Attribute Tenant Header as an Attribute

  • Tenant Header - نحوه آن Tenant Header - How it will be

پیکربندی Open Api Open Api Configuration

  • تنظیمات Swagger Swagger Settings

  • پردازنده Attribute Header Swagger Swagger Header Attribute Processor

  • پردازنده Auth سراسری Swagger Swagger Global Auth Processor

  • افزودن مستندات Open Api در Dependency Injection Add Open Api Documentation into Dependency Injection

  • استفاده از میان افزار مستندات Open Api Use Open Api Documentation middleware

  • پاکسازی پیکربندی پیش فرض Default config cleanup

  • Authorize Attribute Authorize Attribute

  • آزمایش API - POST Authorize Attribute API Testing - POST Authorize Attribute

FluentValidation، کتابخانه های MediatR، CQRS و نقاط پایانی Authentication FluentValidation, MediatR libraries, CQRS and Authentication Endpoints

  • نصب بسته‌ها Packages Installation

  • MediatR و FluentValidation در Dependency Injection MediatR and FluentValidation into Dependency Injection

  • دریافت Query Token Get Token Query

  • دریافت Query Refresh Token Get Refresh Token Query

  • Base Api Controller Base Api Controller

  • نقطه پایانی Login - دریافت Token Login Endpoint - Get Token

  • نقطه پایانی Refresh Token Refresh Token endpoint

  • شمول مجوز Refresh Token Refresh token permission inclusion

  • نقطه پایانی Login - آزمایش Login Endpoint - Testing

  • آزمایش دسترسی به نقطه پایانی محافظت شده Protected Endpoint Access testing

  • استثنای Expired Token - مسئله و راه حل Expired Token Exception - Issue and Solution

  • میان افزار مدیریت خطا Error Handling Middleware

  • رفع کد میان افزار مدیریت خطا Error handling middleware code fix

  • میان افزار مدیریت خطا - آزمایش Error Handling Middleware - Testing

مدیریت Tenant Tenant Management

  • مدل های درخواست و پاسخ Tenant Tenant request and response models

  • سرویس Tenants - تعریف Tenants Service - Definition

  • فرمان ایجاد Tenant Create Tenant Command

  • فرمان فعال سازی Tenant Activate Tenant Command

  • فرمان غیرفعال کردن Tenant Deactivate Tenant Command

  • فرمان به روز رسانی اشتراک Tenant Update Tenant Subscription Command

  • دریافت Query Tenant بر اساس Id Get Tenant By Id Query

  • دریافت Query Tenants Get Tenants Query

  • نقطه پایانی ایجاد Tenant Create Tenant Endpoint

  • نقاط پایانی Tenants - همه Tenants Endpoints - All

  • پیاده سازی سرویس Tenant - وابستگی ها Tenant Service Implementation - Dependencies

  • پیاده سازی Activate Activate implementation

  • پیاده سازی ایجاد Tenant Create Tenant implementation

  • پیاده سازی های Deactivate و Get Tenant By Id Deactivate and Get Tenant By Id implementations

  • پیاده سازی های Get Tenants و Update Subscription Get Tenants and Update Subscription implementations

  • سرویس Tenant در Dependency Injection Tenant service into Dependency Injection

  • آزمایش ایجاد Tenant - پایگاه داده مشترک Create Tenant Testing - Shared database

  • آزمایش ادعاهای نقش Tenant جدید New Tenant Role Claims testing

  • آزمایش دسترسی کاربر Tenant جدید New Tenant User Access testing

  • Seeding کاربر Admin Tenant با مقادیر مشخص شده Seeding Tenant Admin user with specified values

  • آزمایش پایگاه داده اختصاصی Tenant Tenant Dedicated database testing

  • آزمایش کاربر Tenant Tenant User testing

مدیریت موجودیت مدرسه School Entity Management

  • مدل های درخواست و پاسخ مدرسه School Request and Response models

  • تعریف سرویس مدرسه School Service Definition

  • پیاده سازی سرویس مدرسه - کامل School Service implementation - Complete

  • فرمان ایجاد مدرسه Create School Command

  • فرمان به روز رسانی مدرسه Update School Command

  • فرمان حذف مدرسه Delete School Command

  • دریافت Query مدرسه بر اساس Id Get School By Id Query

  • دریافت Query مدرسه بر اساس نام Get School By Name Query

  • دریافت Query مدارس Get Schools Query

  • آماده سازی FluentValidation FluentValidation preparation

  • اعتبارسنج درخواست ایجاد مدرسه Create School Request Validator

  • اعتبارسنج فرمان ایجاد مدرسه Create School Command Validator

  • اعتبارسنج درخواست به روز رسانی مدرسه Update School Request Validator

  • اعتبارسنج فرمان به روز رسانی مدرسه Update School Command Validator

  • نقطه پایانی ایجاد مدرسه Create School Endpoint

  • نقاط پایانی به روز رسانی و حذف مدرسه Update and delete school endpoints

  • نقاط پایانی GET مدرسه School GET endpoints

رفتار Pipeline MediatR MediatR Pipeline behaviour

  • رفتار Pipeline اعتبارسنجی قسمت 1 Validation Pipeline Behavior part 1

  • 132 رفتار Pipeline اعتبارسنجی قسمت 2 132 Validation Pipeline Behavior part 2

  • رفتار Pipeline اعتبارسنجی - نحوه کار آن (آزمایش) Validation Pipeline Behavior - How it works (testing)

  • رفتار Pipeline اعتبارسنجی - نحوه کارکرد صحیح (آزمایش) Validation Pipeline Behavior - How it Should works (testing)

زیر سیستم Identity Identity Subsystem

  • مدل های نقش Role models

  • مدل درخواست به روز رسانی مجوزهای نقش Update Role Permissions Request model

  • تعریف رابط سرویس نقش Role Service interface definition

  • پیاده سازی سرویس نقش - وابستگی ها Role Service Implementation - Dependencies

  • ایجاد نقش و پیاده سازی های Helper توضیحات خطا IdentityResult Create Role and IdentityResult Error Descriptions Helper implementations

  • پیاده سازی حذف نقش - نقش های پیش فرض نیست Delete role implementation - Not default roles

  • پیاده سازی حذف نقش - نقش اختصاص داده نشده فعلی نیست Delete role implementation - Not currently assigned role

  • آیا نقش وجود دارد و دریافت همه پیاده سازی های نقش Does role exists and Get all roles implementations

  • دریافت پیاده سازی نقش بر اساس Id Get role By Id implementation

  • دریافت نقش با پیاده سازی مجوزها Get role with Permissions implementation

  • به روز رسانی پیاده سازی نقش Update role implementation

  • به روز رسانی پیاده سازی مجوزهای نقش - نقش Admin نیست Update Role Permissions implementation - Not Admin role

  • به روز رسانی مجوزهای نقش - مجوزهای Tenants برای root tenant غیر حذف می شوند Update Role Permissions - Tenants permissions are removed for non root tenant

  • به روز رسانی پیاده سازی مجوزهای نقش - Drop and Lift Update Role Permissions implementation - Drop and Lift

  • سرویس نقش در Dependency Injection Role Service into Dependency Injection

  • فرمان ایجاد نقش Create Role Command

  • دستورات نقش بیشتر More Role commands

  • پرس و جوهای نقش Role queries

  • مدل های درخواست کاربر User request models

  • مدل های درخواست نقش کاربر User Role Request models

  • مدل های پاسخ کاربر User response models

  • تعریف سرویس کاربر فعلی Current User Service definition

  • تعریف سرویس کاربر User Service definition

  • پیاده سازی سرویس کاربر - وابستگی ها User Service implementation - Dependencies

  • پیاده سازی فعال یا غیر فعال کردن Activate Or Deactivate implementation

  • انتساب پیاده سازی نقش ها - admin برای root tenant نیست Assign Roles implementation - not admin for root tenant

  • انتساب پیاده سازی نقش ها - حداقل دو کاربر admin برای هر tenant Assign Roles implementation - at least two admin users for each tenant

  • انتساب پیاده سازی نقش ها - انتساب واقعی Assign Roles implementation - actual assignment

  • پیاده سازی تغییر رمز عبور کاربر Change User Password implementation

  • پیاده سازی ایجاد کاربر Create User implementation

  • پیاده سازی حذف کاربر Delete user implementation

  • دریافت همه کاربران و پیاده سازی های id Get all users and by id implementations

  • دریافت پیاده سازی مجوزهای کاربر Get User Permissions implementation

  • دریافت پیاده سازی نقش های کاربر Get User Roles implementation

  • پیاده سازی های IsEmailTaken و IsPermissionAssigned IsEmailTaken and IsPermissionAssigned implementations

  • به روز رسانی پیاده سازی کاربر Update User implementation

  • پیاده سازی سرویس کاربر فعلی Current User Service implementation

  • میان افزار کاربر فعلی Current User Middleware

  • فرمان ایجاد کاربر Create User Command

  • دستورات کاربر User commands

  • دریافت Query کاربر بر اساس Id Get User By Id Query

  • پرس و جوهای کاربر User Queries

  • نقطه پایانی ثبت نام کاربر Register User endpoint

  • نقاط پایانی کاربر User endpoints

  • نقطه پایانی کاربر - بازنشانی رمز عبور User Endpoint - Password Reset

  • پاکسازی کد نهایی Final code cleanup

  • آزمایش نهایی Final Testing

پکیج Nuget - برای اشتراک گذاری بین API و Frontend Nuget Package - For Sharing between API and Frontend

  • مقدمه Front-end Front-end Intro

  • توضیح استراتژی پیاده سازی Implementation Strategy Explanation

  • نمایش و گفتن Show and Tell

  • جایگزین - توصیه نمی شود Alternative - Not Recommended

  • پروژه بسته Package Project

  • درخواست های نقش Role Requests

  • پاسخ نقش و درخواست های Token و پاسخ Role Response and Token Requests and Response

  • درخواست ها و پاسخ های کاربر User Requests and Responses

  • درخواست ها و پاسخ های مدرسه School requests and Response

  • درخواست ها و پاسخ های Tenant Tenant Requests and Response

  • Wrappers Wrappers

  • ثابت های Auth Auth Constants

  • آماده سازی انتشار بسته Package release preparation

  • فراداده بسته Package Metadata

  • مجوز و راه اندازی Repository LICENSE and Repository Init

  • Azure DevOps Azure DevOps

  • فید Nuget خصوصی Private Nuget Feed

  • تنظیمات فید - مجوز Feed Settings - Permission

  • Personal Access Token Personal Access Token

  • اتصال فید Connect Feed

  • CI-CD Pipeline CI-CD Pipeline

  • انتشار بسته - موفقیت Package Release - Success

  • حذف تعاریف Types از راه حل Types Definitions Removal from Solution

  • رفع خطای Namespace - ترفندها Namespace error fixing - Tricks

  • هم ترازی Namespace نقش ها Roles Namespace Alignments

  • هم ترازی Namespace توکن ها و کاربران Tokens and Users Namespace alignments

  • پاکسازی نهایی Namespace با هم Final Namespace cleanup together

  • رپ نهایی Final Rap

Frontend - Blazor Webassembly Frontend - Blazor Webassembly

  • پروژه Blazor WASM Blazor WASM Project

  • Index Index

  • نقطه ورودی App App entry point

  • آزمایش Router Router Testing

  • Layout Layout

  • NavMenu NavMenu

  • مسیر Component Component Route

  • تنظیمات راه اندازی Launch Settings

  • Dependency Injection Dependency Injection

زیرساخت Client Client Infrastructure

  • MudBlazor بررسی اجمالی سریع MudBlazor Quick Overview

  • زیرساخت Client Client Infrastructure

  • نصب بسته‌ها Packages Installation

  • بسته‌های بیشتر More Packages

  • AppSettings - Base Api Url AppSettings - Base Api Url

  • AppSettings - Token AppSettings - Token

  • پیکربندی در DI Configuration into DI

  • برنامه افزودنی ResponseWrapper - قسمت 1 ResponseWrapper Extension - Part 1

  • برنامه افزودنی ResponseWrapper - قسمت 2 ResponseWrapper Extension - Part 2

مدیریت وضعیت Authentication Authentication State Management

  • Authentication State Provider Authentication State Provider

  • دریافت AuthenticationState - قسمت 1 Get AuthenticationState - Part 1

  • دریافت AuthenticationState - قسمت 2 Get AuthenticationState - Part 2

  • AuthenticationState - Claims نقش ها AuthenticationState - Roles Claims

  • AuthenticationState - Claims مجوزها AuthenticationState - Permissions Claims

  • AuthenticationState - سایر Claims ها AuthenticationState - All Other Claims

  • AuthenticationState - UserState AuthenticationState - UserState

  • علامت گذاری کاربر Authenticated Mark User Authenticated

  • علامت گذاری کاربر به عنوان Logged Out Mark User As Logged Out

  • دریافت Authentication State Provider User Get Authentication State Provider User

  • Authentication Header Handler Authentication Header Handler

  • Attribute ShouldHavePermission ShouldHavePermission Attribute

  • افزودن AddAuthorizationCore در DI AddAuthorizationCore into DI

  • بسته‌ها در DI Packages into DI

  • HttpClient در DI HttpClient into DI

  • مرور مجدد Recap

  • گروه بندی Dependency در DI Container Dependency Grouping into DI Container

برنامه - اجزای UI The App - UI Components

  • UI - به روز رسانی نقطه ورودی Index UI - Index Entry Point update

  • برنامه - نقطه شروع Authorize App - Authorize Starting Point

  • MainLayout - قسمت 1 MainLayout - Part 1

  • MainLayout - قسمت 2 MainLayout - Part 2

  • MainLayout - قسمت 3 MainLayout - Part 3

  • NavMenu NavMenu

  • ITokenService - Login ITokenService - Login

  • TokenService - وابستگی ها TokenService - Dependencies

  • Helper AddTenantHeader AddTenantHeader helper

  • پیوست Header Tenant Tenant Header attachment

  • تماس Api واقعی و Wrapper Actual Api Call and Wrapper

  • تنظیم توکن ها در Browser Local Storage Set Tokens to Browser Local Storage

  • به روز رسانی Auth State و تنظیم HttpClient Authorization Header Auth State Update and HttpClient Authorization Header set

  • سرویس Token در DI Token Service into DI

  • Component Login - قسمت 1 Login Component - Part 1

  • Component Login - قسمت 2 (Stack) Login Component - Part 2(Stack)

  • Component Login - قسمت 3 (فرم) Login Component - Part 3(Form)

  • Component Login - قسمت 4 (دکمه) Login Component - Part 4(Button)

  • راه اندازی برنامه App Launch

  • طراحی مجدد دکمه Button Redesign

  • کنترل فرم - Binding Form Controls - Binding

  • Masking رمز عبور Password Masking

  • Masking رمز عبور - آزمایش Password Masking - Testing

  • بعدی چیست What's Next

Blazor Component Life Cycle Hooks Blazor Component Life Cycle Hooks

  • مقدمه Component LifeCycle Component LifeCycle Intro

  • Component LifeCycle - نمونه LifeCycle Component - Sample

  • LifeCycle - SetParametersAsync LifeCycle - SetParametersAsync

  • LifeCycle - OnInitialized LifeCycle - OnInitialized

  • LifeCycle - OnInitializedAsync LifeCycle - OnInitializedAsync

  • LifeCycle - OnParametersSet LifeCycle - OnParametersSet

  • LifeCylce - ShouldRender LifeCylce - ShouldRender

  • LifeCycle - OnAfterRender LifeCycle - OnAfterRender

  • LifeCycle - OnAfterRenderAsync LifeCycle - OnAfterRenderAsync

  • LifeCycle - Dispose LifeCycle - Dispose

Component UI - ادامه UI Component - Continuation

  • Login OnInitializedAsync - قسمت 1 Login OnInitializedAsync - Part 1

  • Login OnInitializedAsync - قسمت 2 Login OnInitializedAsync - Part 2

  • ارسال Login - قسمت 1 Login Submit - Part 1

  • ارسال Login - قسمت 2 Login Submit - Part 2

  • آزمایش Login - مسدود شدن CORS Login Testing - CORS Blockage

  • تعریف خط مشی CORS CORS Policy Definition

  • آزمایش Login - موفقیت Login Testing - Success

  • Login - موفقیت Browser Local Storage Login - Browser Local Storage Success

  • تجزیه و تحلیل MainLayout MainLayout Analyzing

  • NavMenu Toggle Event Binding NavMenu Toggle Event Binding

  • تست رویداد Toggle NavMenu - موفقیت NavMenu Toggle Event Binging Test - Success

  • ClaimsPricipal Extensions ClaimsPricipal Extensions

  • CurrentUserCard - قسمت 1 CurrentUserCard - Part 1

  • CurrentUserCard - قسمت 2 (آزمایش) CurrentUserCard - Part 2(Testing)

  • CurrentUserCard - جزئیات کاربر وارد شده (پویا) CurrentUserCard - Logged in user details(dynamic)

  • CurrentUserCard - جزئیات کاربر وارد شده (پویا) آزمایش - موفقیت CurrentUserCard - Logged in user details(dynamic) Testing - Success

  • CurrentUserCard - بازسازی CurrentUserCard - Refactoring

  • CurrentUserCard - تست دایره ای Progress - موفقیت CurrentUserCard - Progress Circular Test - Success

  • عملکرد خروج Logout Function

  • خروج - قسمت 1 Dialog Logout - Dialog Part 1

  • خروج - قسمت 2 علامت گذاری Dialog Logout - Dialog Part 2 Markup

  • خروج - قسمت 3 رویدادهای Dialog Logout - Dialog Part 3 Events

  • خروج - استفاده قسمت 1 Logout - Usage Part 1

  • پیکربندی Dialog Dialog Config

  • اتصال رویداد خروج Dialog Logout Dialog Event Binding

  • تست خروج - موفقیت Logout Testing - Success

  • نمونه حساب کاربری User Account Sample

  • Header - پارامترها Header - Parameters

  • Header - علامت گذاری Header - Markup

  • EventCallback Header Header EventCallback

  • Header در حساب کاربری Header in User Account

  • اولین استفاده Header Header First usage

  • EventCallback - آزمایش در Child EventCallback - Testing on Child

  • EventCallback - موفقیت آزمایش Parent Child EventCallback - Parent Child Testing success

  • برگه های حساب Account Tabs

  • پروفایل کاربر - قسمت 1 User Profile - Part 1

  • پروفایل کاربر - قسمت 2 آواتار User Profile - Part 2 Avatar

  • پروفایل کاربر قسمت 3 - اولین استفاده User Profile Part 3 - First Usage

  • تست پروفایل کاربر - موفقیت User Profile Testing - Success

  • هم ترازی پروفایل کاربر User Profile Alignments

  • پروفایل کاربر - به روز رسانی فرم جزئیات کاربر User Profile - Update user details form

  • EditForm در مقابل MudForm EditForm vs MudForm

  • تعریف IUserService IUserService definition

  • پیاده سازی UserService UserService Implementation

  • UserService در DI UserService into DI

  • به روز رسانی استفاده از جزئیات کاربر Update User Details Usage

  • به روز رسانی کاربر - رفع اشکال Binding Update User - Binding Bug

  • به روز رسانی کاربر - خطاها Update User - Errors

  • به روز رسانی کاربر - رفع خطای 404 Update User - Error 404 Resolved

  • Component PasswordReset - قسمت 1 PasswordReset Component - Part 1

  • بازنشانی رمز عبور - تغییر دید رمز عبور Password Reset - Toggle Password Visibility

  • بازنشانی رمز عبور - قسمت 1 فرم Password Reset - Form Part 1

  • بازنشانی رمز عبور - قسمت 2 فرم Password Reset - Form Part 2

  • UserService - تغییر رمز عبور کاربر UserService - Change User Password

  • بازنشانی رمز عبور - Event Binding Password Reset - Event Binding

  • بازنشانی رمز عبور - آزمایش موفقیت Password Reset - Testing Success

اجزای مدیریت Tenant Tenant Management Components

  • مقدمه Component Tenant Tenant Component Intro

  • تعریف ITenantService ITenantService definition

  • TenantService - پیاده سازی و نقاط پایانی قسمت 1 TenantService - Implementation and Endpoints Part 1

  • نقاط پایانی Tenant Tenant Endpoints

  • TenantService - فعال و غیرفعال کردن TenantService - Activate and Deactivate

  • TenantService - ایجاد TenantService - Create

  • TenantService - دریافت همه TenantService - Get All

  • TenantService - دریافت بر اساس Id TenantService - Get By Id

  • TenantService - ارتقاء اشتراک TenantService - Upgrade Subscription

  • TenantService در DI TenantService into DI

  • TenantService - وارد کردن TenantService - Import

  • Component Tenant - مقداردهی اولیه Tenant Component - Initialization

  • Component Tenants - قسمت 1 جدول Tenants Component - Table Part 1

  • Component Tenants - محتوای Header Tenants Component - Header Content

  • Component Tenants - قسمت 1 Row Template Tenants Component - Row Template Part 1

  • Component Tenants - قسمت 2 اقدامات Row Template Tenants Component - Row Template Actions Part 2

  • Component Tenants - قسمت 3 اقدامات Row Template تست موفقیت Tenants Component - Row Template Actions Part 3 Testing Success

  • Login - پر کردن اطلاعات کاربری فقط برای توسعه Login - Fill Credentials for Development ONLY

  • Tenants - Event Callback Tenants - Event Callback

  • Component ایجاد Tenant - قسمت 1 Create Tenant Component - Part 1

  • Component ایجاد Tenant - قسمت 2 فرم Create Tenant Component - Part 2 Form

  • Component ایجاد Tenant - قسمت 3 اقدامات Dialog Create Tenant Component - Part 3 Dialog Actions

  • Component ایجاد Tenant - قسمت 4 DateTime Nullable Create Tenant Component - Part 4 Nullable DateTime

  • Component ایجاد Tenant - قسمت 5 دکمه ها Event Binding Create Tenant Component - Part 5 Buttons Event Binding

  • دعوت Dialog ایجاد Tenant Create Tenant Dialog Invocation

  • ایجاد Tenant - از دست دادن اتصالات Property Create Tenant - Missing Property bindings

  • ایجاد Tenant - تست موفقیت Create Tenant - Test Success

  • ایجاد Tenant - حاشیه TextField متراکم Create Tenant - TextField Margin Dense

  • صفحه بندی جدول Tenants Tenants Table Pagination

  • ارتقاء اشتراک Tenant قسمت 1 Tenant Upgrade Subscription Part 1

  • ارتقاء اشتراک Tenant قسمت 2 Tenant Upgrade Subscription Part 2

  • اتصال رویداد ارتقاء اشتراک Tenant - قسمت 3 Tenant Upgrade Subscription Event Binding - Part 3

  • دعوت ارتقاء اشتراک Tenant Tenant Upgrade Subscription Invocation

  • دعوت ارتقاء اشتراک Tenant - آزمایش موفقیت Tenant Upgrade Subscription Invocation - Testing Success

  • آیتم منو Dynamic فعال یا غیرفعال کردن Tenant Activate or Deactivate Tenant Dynamic Menu Item

  • Dialog تایید Confirmation Dialog

  • Confirmation Dialog - Parameters Assignments-گفتگوی تایید - تخصیص پارامترها Confirmation Dialog - Parameters Assignments

  • Confirmation Dialog - Deactivate Tenant-گفتگوی تایید - غیرفعال سازی مستاجر Confirmation Dialog - Deactivate Tenant

  • 175 Activate Or Deactivate Event Binding-175 اتصال رویداد فعال یا غیرفعال کردن 175 Activate Or Deactivate Event Binding

  • Activate Or Deactivate Test - Success-تست فعال یا غیرفعال کردن - موفقیت Activate Or Deactivate Test - Success

Authorize View-مجوز نمایش Authorize View

  • AuthorizationService Extensions-افزونه‌های سرویس مجوز AuthorizationService Extensions

  • NavMenu Permission Based Visibility Part 1-بخش اول قابلیت مشاهده منوی ناوبری بر اساس مجوز NavMenu Permission Based Visibility Part 1

  • NavMenu Permission Based Visibility Part 2 - Testing Partial Success-بخش دوم قابلیت مشاهده منوی ناوبری بر اساس مجوز - تست موفقیت نسبی NavMenu Permission Based Visibility Part 2 - Testing Partial Success

  • NavMenu Permission Based Visibility - Auth State Provider Notification update-قابلیت مشاهده منوی ناوبری بر اساس مجوز - بروزرسانی اعلان ارائه‌دهنده وضعیت احراز هویت NavMenu Permission Based Visibility - Auth State Provider Notification update

  • Permission Based Visibility - AuthStateProvider Notification update Test Success-قابلیت مشاهده بر اساس مجوز - تست موفقیت بروزرسانی اعلان ارائه‌دهنده وضعیت احراز هویت Permission Based Visibility - AuthStateProvider Notification update Test Success

  • NotAuthorized Component-کامپوننت غیرمجاز NotAuthorized Component

  • ShouldHavePermission Attribute Usage-نحوه استفاده از ویژگی ShouldHavePermission ShouldHavePermission Attribute Usage

  • NotAuthorized usage in App-نحوه استفاده از NotAuthorized در برنامه NotAuthorized usage in App

  • NotAuthorized Test - Success-تست NotAuthorized - موفقیت NotAuthorized Test - Success

User Management Components-کامپوننت‌های مدیریت کاربر User Management Components

  • User Management Intro-مقدمه مدیریت کاربر User Management Intro

  • UserService - Get All and By Id Definition-UserService - تعریف دریافت همه و بر اساس شناسه UserService - Get All and By Id Definition

  • UserService - Route Configurations-UserService - پیکربندی مسیرها UserService - Route Configurations

  • Get By Id - Implementation-دریافت بر اساس شناسه - پیاده‌سازی Get By Id - Implementation

  • Get Users - Implementation-دریافت کاربران - پیاده‌سازی Get Users - Implementation

  • User List Component - Part 1-کامپوننت لیست کاربران - بخش 1 User List Component - Part 1

  • User List Component - OnInitializedAsync-کامپوننت لیست کاربران - OnInitializedAsync User List Component - OnInitializedAsync

  • User List Component - Markup-کامپوننت لیست کاربران - نشانه‌گذاری User List Component - Markup

  • User List Component - Testing Success-کامپوننت لیست کاربران - تست موفقیت User List Component - Testing Success

  • NavLink - Users Component-NavLink - کامپوننت کاربران NavLink - Users Component

  • Clean Up-پاکسازی Clean Up

  • UserService - Register-UserService - ثبت نام UserService - Register

  • User Register Component - Part 1-کامپوننت ثبت نام کاربر - بخش 1 User Register Component - Part 1

  • User Register Component - Part 2-کامپوننت ثبت نام کاربر - بخش 2 User Register Component - Part 2

  • User Register Component - Part 3-کامپوننت ثبت نام کاربر - بخش 3 User Register Component - Part 3

  • User Register Component - Part 4-کامپوننت ثبت نام کاربر - بخش 4 User Register Component - Part 4

  • User Register Component Invocation-فراخوانی کامپوننت ثبت نام کاربر User Register Component Invocation

  • User Register Component Testing Success-تست موفقیت کامپوننت ثبت نام کاربر User Register Component Testing Success

  • UserRoles Component - Part 1-کامپوننت نقش‌های کاربر - بخش 1 UserRoles Component - Part 1

  • UserRoles Component Get User By Id-کامپوننت نقش‌های کاربر دریافت کاربر بر اساس شناسه UserRoles Component Get User By Id

  • UserRoles - Endpoint Configuration-نقش‌های کاربر - پیکربندی نقطه پایانی UserRoles - Endpoint Configuration

  • UserService - Get User Roles-UserService - دریافت نقش‌های کاربر UserService - Get User Roles

  • UserRoles Component - Get User Roles-کامپوننت نقش‌های کاربر - دریافت نقش‌های کاربر UserRoles Component - Get User Roles

  • UserRoles Component - Markup Part 1-کامپوننت نقش‌های کاربر - نشانه‌گذاری بخش 1 UserRoles Component - Markup Part 1

  • UserRoles Component - Markup Part 2 and Navigation-کامپوننت نقش‌های کاربر - نشانه‌گذاری بخش 2 و ناوبری UserRoles Component - Markup Part 2 and Navigation

  • UserRoles Component - Testing Success-کامپوننت نقش‌های کاربر - تست موفقیت UserRoles Component - Testing Success

  • UserRoles Component - Update Roles Part 1-کامپوننت نقش‌های کاربر - بروزرسانی نقش‌ها بخش 1 UserRoles Component - Update Roles Part 1

  • Update User Roles Endpoint Parameter Bug Fixing-رفع اشکال پارامتر نقطه پایانی بروزرسانی نقش‌های کاربر Update User Roles Endpoint Parameter Bug Fixing

  • UserService - Update User Roles-UserService - بروزرسانی نقش‌های کاربر UserService - Update User Roles

  • UserRoles Component - Update Roles-کامپوننت نقش‌های کاربر - بروزرسانی نقش‌ها UserRoles Component - Update Roles

  • UserRoles Component - Update Roles Testing Success-کامپوننت نقش‌های کاربر - تست موفقیت بروزرسانی نقش‌ها UserRoles Component - Update Roles Testing Success

  • New Users Role Assignment Bug Fixing-رفع اشکال تخصیص نقش کاربران جدید New Users Role Assignment Bug Fixing

  • UserRoles Component - Permission based rendering-کامپوننت نقش‌های کاربر - رندرینگ بر اساس مجوز UserRoles Component - Permission based rendering

  • UserRoles Component - Permission Testing Partial-کامپوننت نقش‌های کاربر - تست مجوز جزئی UserRoles Component - Permission Testing Partial

  • UserService - Update User Status-UserService - بروزرسانی وضعیت کاربر UserService - Update User Status

  • UserService - Update User Status implementation-UserService - پیاده‌سازی بروزرسانی وضعیت کاربر UserService - Update User Status implementation

  • Users Component - Deactivate user confirmation-کامپوننت کاربران - تایید غیرفعال کردن کاربر Users Component - Deactivate user confirmation

  • Users Component - Activate user confirmation-کامپوننت کاربران - تایید فعال کردن کاربر Users Component - Activate user confirmation

  • Users Component - Deactivate and Activate user confirmation Test Success-کامپوننت کاربران - تست موفقیت تایید غیرفعال و فعال کردن کاربر Users Component - Deactivate and Activate user confirmation Test Success

  • Table DataLabel Improvements-بهبود برچسب داده جدول Table DataLabel Improvements

Roles and Permissions/Claims Management-مدیریت نقش‌ها و مجوزها/ادعاها Roles and Permissions/Claims Management

  • Roles Management Intro-مقدمه مدیریت نقش‌ها Roles Management Intro

  • Role Endpoints - Configuration-نقاط پایانی نقش - پیکربندی Role Endpoints - Configuration

  • Role Endpoints - Class for Binding-نقاط پایانی نقش - کلاس برای اتصال Role Endpoints - Class for Binding

  • IRoleService Definition-تعریف IRoleService IRoleService Definition

  • RoleService - Create-RoleService - ایجاد RoleService - Create

  • RoleService - Delete-RoleService - حذف RoleService - Delete

  • RoleService - GET methods-RoleService - متدهای GET RoleService - GET methods

  • RoleService - PUT methods-RoleService - متدهای PUT RoleService - PUT methods

  • RoleService Into Dependency Injection-RoleService به تزریق وابستگی RoleService Into Dependency Injection

  • Roles Component - Part 1-کامپوننت نقش‌ها - بخش 1 Roles Component - Part 1

  • Roles Component - Permissions-کامپوننت نقش‌ها - مجوزها Roles Component - Permissions

  • Roles Component - Load Roles from Server-کامپوننت نقش‌ها - بارگیری نقش‌ها از سرور Roles Component - Load Roles from Server

  • Roles Component - Markup part 1-کامپوننت نقش‌ها - نشانه‌گذاری بخش 1 Roles Component - Markup part 1

  • Roles Component - Markup Testing Success-کامپوننت نقش‌ها - تست موفقیت نشانه‌گذاری Roles Component - Markup Testing Success

  • Roles Component - NavLink Testing Success-کامپوننت نقش‌ها - تست موفقیت NavLink Roles Component - NavLink Testing Success

  • Assignment - CREATE UPDATE AND DELETE ROLE Components-تکلیف - کامپوننت‌های ایجاد، بروزرسانی و حذف نقش Assignment - CREATE UPDATE AND DELETE ROLE Components

  • RolePermissions Component and ViewModel-کامپوننت RolePermissions و ViewModel RolePermissions Component and ViewModel

  • RolePermissions Component - Properties and Fields-کامپوننت RolePermissions - ویژگی‌ها و فیلدها RolePermissions Component - Properties and Fields

  • RolePermissions Component - Methods Part 1-کامپوننت RolePermissions - متدها بخش 1 RolePermissions Component - Methods Part 1

  • RolePermissions Component - Methods Part 2-کامپوننت RolePermissions - متدها بخش 2 RolePermissions Component - Methods Part 2

  • RolePermissions Component - Methods Part 3-کامپوننت RolePermissions - متدها بخش 3 RolePermissions Component - Methods Part 3

  • RolePermissions Component - Methods Part 4-کامپوننت RolePermissions - متدها بخش 4 RolePermissions Component - Methods Part 4

  • RolePermission Component - Markup Part 1-کامپوننت RolePermission - نشانه‌گذاری بخش 1 RolePermission Component - Markup Part 1

  • RolePermission Component - Markup Part 2-کامپوننت RolePermission - نشانه‌گذاری بخش 2 RolePermission Component - Markup Part 2

  • RolePermission Component - Markup Part 3-کامپوننت RolePermission - نشانه‌گذاری بخش 3 RolePermission Component - Markup Part 3

  • RolePermission Component - Markup Part 4-کامپوننت RolePermission - نشانه‌گذاری بخش 4 RolePermission Component - Markup Part 4

  • RolePermission Component - Markup Part 5 Testing Success-کامپوننت RolePermission - نشانه‌گذاری بخش 5 تست موفقیت RolePermission Component - Markup Part 5 Testing Success

  • RolePermission Component - Markup Part 6 Update-کامپوننت RolePermission - نشانه‌گذاری بخش 6 بروزرسانی RolePermission Component - Markup Part 6 Update

  • RolePermission Component - Markup Part 7 Update Test Success-کامپوننت RolePermission - نشانه‌گذاری بخش 7 تست موفقیت بروزرسانی RolePermission Component - Markup Part 7 Update Test Success

  • Profile Update Permission to Basic Role-مجوز بروزرسانی پروفایل به نقش پایه Profile Update Permission to Basic Role

School Management Components-کامپوننت‌های مدیریت مدرسه School Management Components

  • School Endpoints Configurations-پیکربندی نقاط پایانی مدرسه School Endpoints Configurations

  • ISchoolService - Definition-تعریف ISchoolService ISchoolService - Definition

  • SchoolService - Create School-SchoolService - ایجاد مدرسه SchoolService - Create School

  • SchoolService - Complete Implementations-SchoolService - پیاده‌سازی‌های کامل SchoolService - Complete Implementations

  • SchoolService into DI-SchoolService به DI SchoolService into DI

  • SchoolList Component Part 1-کامپوننت لیست مدارس بخش 1 SchoolList Component Part 1

  • SchoolList Component Part 2-کامپوننت لیست مدارس بخش 2 SchoolList Component Part 2

  • SchoolList Component - Markup-کامپوننت لیست مدارس - نشانه‌گذاری SchoolList Component - Markup

  • SchoolList Component - 404 Issue-کامپوننت لیست مدارس - مشکل 404 SchoolList Component - 404 Issue

  • SchoolList Component - Markup Testing Success-کامپوننت لیست مدارس - تست موفقیت نشانه‌گذاری SchoolList Component - Markup Testing Success

  • SchoolList Component - 404 Issue Fixing-کامپوننت لیست مدارس - رفع مشکل 404 SchoolList Component - 404 Issue Fixing

  • Create School Dialog Part 1-دیالوگ ایجاد مدرسه بخش 1 Create School Dialog Part 1

  • Create School Dialog - Save School-دیالوگ ایجاد مدرسه - ذخیره مدرسه Create School Dialog - Save School

  • Create School Dialog - Markup-دیالوگ ایجاد مدرسه - نشانه‌گذاری Create School Dialog - Markup

  • Create School Dialog - Invocation-دیالوگ ایجاد مدرسه - فراخوانی Create School Dialog - Invocation

  • Create School Dialog - Testing Success-دیالوگ ایجاد مدرسه - تست موفقیت Create School Dialog - Testing Success

  • Tables column alignments-تراز بندی ستون‌های جداول Tables column alignments

Refresh Token-توکن تازه‌سازی Refresh Token

  • Refresh Token - Why we need to-توکن تازه‌سازی - چرا به آن نیاز داریم Refresh Token - Why we need to

  • TokenService - RefreshToken-TokenService - RefreshToken TokenService - RefreshToken

  • TokenService - TryForceRefreshToken-TokenService - TryForceRefreshToken TokenService - TryForceRefreshToken

  • IHttpRefreshTokenInterceptorService - Definitions-تعاریف IHttpRefreshTokenInterceptorService IHttpRefreshTokenInterceptorService - Definitions

  • HttpRefreshTokenInterceptorService - Part 1-HttpRefreshTokenInterceptorService - بخش 1 HttpRefreshTokenInterceptorService - Part 1

  • HttpRefreshTokenInterceptorService - Part 2-HttpRefreshTokenInterceptorService - بخش 2 HttpRefreshTokenInterceptorService - Part 2

  • HttpRefreshTokenInterceptorService - Invocation-HttpRefreshTokenInterceptorService - فراخوانی HttpRefreshTokenInterceptorService - Invocation

  • HttpRefreshTokenInterceptorService - Testing Preparation-HttpRefreshTokenInterceptorService - آماده‌سازی تست HttpRefreshTokenInterceptorService - Testing Preparation

  • HttpRefreshTokenInterceptorService - Testing Success-HttpRefreshTokenInterceptorService - تست موفقیت HttpRefreshTokenInterceptorService - Testing Success

  • HttpRefreshTokenInterceptorService Improvement - Testing Success-بهبود HttpRefreshTokenInterceptorService - تست موفقیت HttpRefreshTokenInterceptorService Improvement - Testing Success

Form Validation-اعتبارسنجی فرم Form Validation

  • Form Validations Intro-مقدمه اعتبارسنجی فرم Form Validations Intro

  • Package Installation and Validation Class-نصب پکیج و کلاس اعتبارسنجی Package Installation and Validation Class

  • Validation Function-تابع اعتبارسنجی Validation Function

  • Validation - Valid Form Submit-اعتبارسنجی - ارسال فرم معتبر Validation - Valid Form Submit

  • Validation - Form Update-اعتبارسنجی - بروزرسانی فرم Validation - Form Update

  • Validation - Testing Success-اعتبارسنجی - تست موفقیت Validation - Testing Success

  • In Closing-در پایان In Closing

نمایش نظرات

آموزش برنامه نویسی پیشرفته .NET فول استک: طراحی و توسعه اپلیکیشن های چند مستاجره (جدید)
جزییات دوره
41 hours
495
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
339
4.7 از 5
دارد
دارد
دارد
Junior Matlou
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Junior Matlou Junior Matlou

معمار راهکارهای نرم‌افزاری