یک سیستم مدیریت نوبت بلادرنگ برای آتلیههای عکاسی و باجههای پرسنلی
ساختهشده با تکنولوژیهای: .NET 9، WinForms، SignalR و Entity Framework Core
یک اپلیکیشن دسکتاپ است که برای مدیریت دو نوع نوبت در یک محیط کاری (مثلاً آتلیه عکاسی) طراحی شده:
- نوبت آتلیه — نوبتهای زمانبندیشده عکاسی با تاریخ، بازه زمانی، مدت زمان و وضعیت نوبت
- نوبت پرسنلی — نوبتهای حضوری و بهترتیب ورود برای کارمندان و پرسنل
این سیستم امکان کار همزمان چند کارمند را فراهم میکند. تمام کلاینتهای متصل، بهمحض تغییر یک نوبت توسط یک کارمند، تغییرات را بهصورت آنی و بلادرنگ دریافت میکنند (پیادهسازیشده با SignalR).
- 🔐 احراز هویت — ورود و ثبتنام امن، همراه با هشکردن پسورد (الگوریتم SHA-256)
- 💾 مرا به خاطر بسپار — ورود خودکار با توکن رمزنگاریشده (بر پایهی Data Protection API ویندوز)
- 🖼️ مدیریت نوبت آتلیه
- ثبت نوبت همراه با تاریخ، مدت زمان و تشخیص خودکار ساعتهای آزاد
- فیلتر کردن نوبتها بر اساس بازه زمانی، وضعیت، نام یا شماره تماس
- تغییر وضعیت نوبت به «انجامشده»، «کنسلشده» یا «در انتظار»
- افزودن یادداشت برای هر نوبت
- 👥 مدیریت نوبت پرسنلی
- افزودن مراجعهکنندگان حضوری به صف زنده
- محاسبهی زمان تقریبی انتظار
- اعلام نوبت بعدی یا اتمام نوبت فعلی
- 📡 بهروزرسانی بلادرنگ — کاربران آنلاین، تغییرات نوبت و تغییرات کارمندان بهصورت آنی برای همه ارسال میشود (از طریق SignalR)
- 📊 داشبورد آماری — نمایش تعداد نوبتهای هر کارمند و وضعیت آنلاین یا آفلاین بهصورت زنده
- 🔔 نوتیفیکیشن و هشدار صوتی — نمایش پیام کوتاه روی دسکتاپ همراه با پخش صدا، هنگام اعلام نوبت جدید
- 📅 پشتیبانی از تقویم شمسی — نمایش و ورود تمام تاریخها بهصورت شمسی
- ✅ اعتبارسنجی تمیز و متمرکز — با استفاده از کتابخانه FluentValidation
- 🌐 رابط کاربری فارسی — رابط کاربری کاملاً راستبهچپ، همراه با برچسبها و پیامهای فارسی
این پروژه از یک معماری لایهای و تمیز پیروی میکند:
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 updatecd 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 را ببینید.
ساخته شده با ❤️ در داتنت