Skip to content

sobhanrajabi31/QueuingSystem

Repository files navigation

سیستم نوبت‌دهی (QueuingSystem)

یک سیستم مدیریت نوبت بلادرنگ برای آتلیه‌های عکاسی و باجه‌های پرسنلی

ساخته‌شده با تکنولوژی‌های: .NET 9، WinForms، SignalR و Entity Framework Core


📋 معرفی

یک اپلیکیشن دسکتاپ است که برای مدیریت دو نوع نوبت در یک محیط کاری (مثلاً آتلیه عکاسی) طراحی شده:

  • نوبت آتلیه — نوبت‌های زمان‌بندی‌شده عکاسی با تاریخ، بازه زمانی، مدت زمان و وضعیت نوبت
  • نوبت پرسنلی — نوبت‌های حضوری و به‌ترتیب ورود برای کارمندان و پرسنل

این سیستم امکان کار همزمان چند کارمند را فراهم می‌کند. تمام کلاینت‌های متصل، به‌محض تغییر یک نوبت توسط یک کارمند، تغییرات را به‌صورت آنی و بلادرنگ دریافت می‌کنند (پیاده‌سازی‌شده با SignalR).


✨ امکانات

  • 🔐 احراز هویت — ورود و ثبت‌نام امن، همراه با هش‌کردن پسورد (الگوریتم SHA-256)
  • 💾 مرا به خاطر بسپار — ورود خودکار با توکن رمزنگاری‌شده (بر پایه‌ی Data Protection API ویندوز)
  • 🖼️ مدیریت نوبت آتلیه
    • ثبت نوبت همراه با تاریخ، مدت زمان و تشخیص خودکار ساعت‌های آزاد
    • فیلتر کردن نوبت‌ها بر اساس بازه زمانی، وضعیت، نام یا شماره تماس
    • تغییر وضعیت نوبت به «انجام‌شده»، «کنسل‌شده» یا «در انتظار»
    • افزودن یادداشت برای هر نوبت
  • 👥 مدیریت نوبت پرسنلی
    • افزودن مراجعه‌کنندگان حضوری به صف زنده
    • محاسبه‌ی زمان تقریبی انتظار
    • اعلام نوبت بعدی یا اتمام نوبت فعلی
  • 📡 به‌روزرسانی بلادرنگ — کاربران آنلاین، تغییرات نوبت و تغییرات کارمندان به‌صورت آنی برای همه ارسال می‌شود (از طریق SignalR)
  • 📊 داشبورد آماری — نمایش تعداد نوبت‌های هر کارمند و وضعیت آنلاین یا آفلاین به‌صورت زنده
  • 🔔 نوتیفیکیشن و هشدار صوتی — نمایش پیام کوتاه روی دسکتاپ همراه با پخش صدا، هنگام اعلام نوبت جدید
  • 📅 پشتیبانی از تقویم شمسی — نمایش و ورود تمام تاریخ‌ها به‌صورت شمسی
  • اعتبارسنجی تمیز و متمرکز — با استفاده از کتابخانه FluentValidation
  • 🌐 رابط کاربری فارسی — رابط کاربری کاملاً راست‌به‌چپ، همراه با برچسب‌ها و پیام‌های فارسی
image

🏗️ معماری

این پروژه از یک معماری لایه‌ای و تمیز پیروی می‌کند:

QueuingSystem/
├── QueuingSystem.Client/       # اپلیکیشن دسکتاپ (لایه رابط کاربری)
├── QueuingSystem.Business/     # سرویس‌ها، اعتبارسنجی‌ها و منطق کسب‌وکار
├── QueuingSystem.Data/         # دیتابیس، ریپازیتوری‌ها و کانفیگ‌ها
├── QueuingSystem.Shared/       # مدل‌ها، اِنتیتی‌ها و هندلرهای پیام و خطا
└── QueuingSystem.SignalR/      # سرور بلادرنگ (هاب ارتباطی)
لایه مسئولیت
Client رابط کاربری، اتصال به سرور بلادرنگ، نگهداری وضعیت محلی
Business کلاس‌های سرویس و قوانین اعتبارسنجی
Data دسترسی به دیتابیس، الگوی ریپازیتوری، کانفیگ اِنتیتی‌ها
Shared مدل‌های اِنتیتی، مدل‌های انتقال داده، دیکشنری کدهای پیام و خطا
SignalR هاب ارتباطی برای پخش وضعیت کاربران آنلاین و تغییرات نوبت

🛠️ تکنولوژی‌های استفاده‌شده

دسته‌بندی تکنولوژی
فریم‌ورک دات‌نت نسخه ۹
رابط کاربری دسکتاپ ویندوز فرمز
ارتباطات بلادرنگ سیگنال آر
دیتابیس و ORM Entity Framework Core به همراه SQL Server
اعتبارسنجی FluentValidation
سریالایز داده Newtonsoft.Json
امنیت رمزنگاری با DPAPI، هش‌کردن پسورد با SHA-256

🚀 شروع به کار

پیش‌نیازها

  • نصب بودن دات‌نت نسخه ۹ (.NET 9 SDK)
  • دیتابیس SQL Server (نسخه LocalDB یا نسخه کامل)
  • سیستم‌عامل ویندوز (به‌دلیل نیاز کلاینت به WinForms)

۱. کلون کردن ریپازیتوری

git clone https://github.com/<your-username>/QueuingSystem.git
cd QueuingSystem

۲. تنظیم اتصال دیتابیس

کانکشن‌استرینگ از طریق یک متغیر محیطی خوانده می‌شود:

setx QueuingSystemCS "Server=YOUR_SERVER;Database=QueuingSystemDb;Trusted_Connection=True;TrustServerCertificate=True;"

⚠️ پس از تنظیم متغیر محیطی، لازم است IDE یا ترمینال خود را ری‌استارت کنید.

۳. اعمال مایگریشن‌ها

cd QueuingSystem.Data
dotnet ef database update

۴. اجرای سرور بلادرنگ

cd QueuingSystem.SignalR
dotnet run

آدرس هاب پس از اجرا به‌صورت زیر در دسترس خواهد بود:

http://localhost:5005/queueHub

۵. اجرای کلاینت

فایل QueuingSystem.Client.slnx را در ویژوال استودیو باز کنید و پروژه‌ی QueuingSystem.Client را اجرا کنید. یا از دستور زیر استفاده کنید:

cd QueuingSystem.Client
dotnet run

📁 نکات مهم ساختار پروژه

  • مدل ResultModel — الگویی یکپارچه برای پاسخ موفق یا ناموفق، که در تمام فراخوانی‌های سرویس استفاده می‌شود
  • کلاس‌های ErrorHandler و MessageHandler — دیکشنری‌های متمرکز پیام‌های خطا و موفقیت، به زبان فارسی
  • کلاس HubHandler — لایه‌ی کلاینت برای مدیریت اتصال مجدد، خطاها و رویدادهای دریافتی از سرور بلادرنگ
  • کلاس AppState — نگهداری وضعیت نشست کاربر در حافظه، شامل کارمند فعلی، نقش و وضعیت احراز هویت

📄 لایسنس

این پروژه تحت لایسنس MIT منتشر شده است. برای جزئیات بیشتر، فایل LICENSE را ببینید.


ساخته شده با ❤️ در دات‌نت

About

A QueuingSystem that was created for Saba Photography and based on WinForm with EFCore

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Contributors

Languages