این پروژه یک API سیستم رزرو نوبت است که با ASP.NET Core و بر اساس اصول Clean Architecture طراحی و پیادهسازی شده است.
تمرکز اصلی پروژه بر:
- ✅ امنیت مبتنی بر JWT
- ✅ طراحی RESTful واقعی
- ✅ جداسازی مسئولیتها
- ✅ جلوگیری از ارسال و دستکاری شناسه کاربر
- ✅ اعمال Authorization در لایه Application
میباشد؛ بهطوری که API برای استفاده در پروژههای واقعی و Production-ready مناسب است.
ساختار کلی پروژه:
Api
└── Controllers
└── REST Endpoints
Application
├── Interfaces
│ └── IUserContext
├── Features
│ ├── Appointment
│ ├── User
│ └── Service
├── DTOs
└── Application Services
Infrastructure
├── Security
│ ├── JWT
│ └── UserContext
└── Persistence
✅ لایه Application مستقل از Api و Infrastructure است
✅ هیچ منطق امنیتی حیاتی صرفاً در Controllerها قرار ندارد
- احراز هویت کاربران با JSON Web Token
- ارسال Token در Header درخواست:
Authorization: Bearer {token}
برای حذف وابستگی به userId ارسالی از کلاینت:
- Interface:
IUserContextدر لایه Application - Implementation:
UserContextدر Infrastructure - استخراج اطلاعات از JWT Claims:
UserId←subیاClaimTypes.NameIdentifierRole←ClaimTypes.Role
✅ تمام عملیات وابسته به کاربر، هویت را از JWT میگیرند، نه از ورودی کلاینت.
برای عملیات Admin-only، متد زیر در AppServiceها پیادهسازی شده است:
EnsureAdmin();این متد:
- Role کاربر جاری را بررسی میکند
- در صورت عدم دسترسی، Exception پرتاب میکند
✅ حتی اگر Controller اشتباه پیکربندی شود،
لایه Application همچنان امنیت را حفظ میکند (Defense in Depth).
برای عملیات حساس کاربرمحور مانند:
- ویرایش نوبت
- لغو نوبت
- مشاهده نوبتهای شخصی
مالکیت بررسی میشود:
appointment.UserId == CurrentUserId
✅ هیچ کاربری به منابع کاربران دیگر دسترسی ندارد.
- ایجاد نوبت
- ویرایش جزئی نوبت (PATCH)
- لغو نوبت
- مشاهده نوبتهای شخصی (JWT-Based)
- مشاهده تمام نوبتها (Admin)
POST /api/appointment
PATCH /api/appointment/{id}
DELETE /api/appointment/{id}
GET /api/appointment/my
GET /api/appointment (Admin only)
- ثبتنام و ورود
- دریافت پروفایل کاربر جاری
- ویرایش پروفایل
- تغییر رمز عبور
- حذف حساب کاربری
- مشاهده لیست کاربران (Admin)
POST /api/user/register
POST /api/user/login
POST /api/user/refresh
GET /api/user/me
PATCH /api/user/me
POST /api/user/change-password
DELETE /api/user/me
GET /api/user (Admin only)
- ✅ استفاده صحیح از HTTP Verbs
- ✅ Resource-based URL
- ✅ حذف Action-based Routeها
- ✅ استفاده از
meبهجای ارسال userId - ✅ عدم دریافت اطلاعات هویتی حساس از کلاینت
| Method | کاربرد |
|---|---|
| GET | دریافت اطلاعات |
| POST | ایجاد Resource |
| PATCH | ویرایش جزئی |
| DELETE | حذف / لغو |
- ASP.NET Core
- JWT Authentication
- Clean Architecture
- Entity Framework Core
- FluentValidation
dotnet restore
dotnet runاین پروژه در حال حاضر نسخهی اولیه (v1) محسوب میشود.
با وجود اینکه:
- ساختار معماری بهصورت اصولی (Clean Architecture) طراحی شده
- ملاحظات امنیتی (JWT، Authorization، Ownership Check) رعایت شده
- API از نظر RESTful و Business Logic پایدار است
ممکن است:
- 🐞 باگهای منطقی یا لبهای (Edge Case) وجود داشته باشد
- 🔄 برخی بخشها در آینده Refactor یا بهینهسازی شوند
- ➕ قابلیتهای جدید یا تغییر در Endpointها اضافه شود
✅ پروژه بهصورت Active Development نگهداری میشود و
در بازههای زمانی مختلف بهروزرسانی خواهد شد.
هدف این نسخه، ارائهی یک پایهی تمیز، امن و قابل توسعه برای ادامهی مسیر است.