mirror of
https://github.com/AmirAref/paya-university-fault-system.git
synced 2026-11-05 15:46:24 +00:00
297 lines
16 KiB
Markdown
297 lines
16 KiB
Markdown
# نمودار کلاس (Class Diagram) – سامانه مدیریت و گزارش خرابی دانشگاهی
|
||
|
||
**تهیهکننده:** ارشیا همتیزاده
|
||
**بازبین:** امیرحسن عارف اصل
|
||
**آخرین بهروزرسانی:** ۱۴۰۵/۰۸/۱۴
|
||
|
||
---
|
||
|
||
## مقدمه
|
||
|
||
این سند نمودار کلاس سامانهٔ مدیریت و گزارش خرابی دانشگاهی را بر اساس مستندات موجود در مخزن ارائه میدهد.
|
||
|
||
> **نکته:** چون پروژه هنوز وارد فاز کدنویسی نشده است، این نمودار یک **مدل دامنه (Domain Model)** است و کلاسهای فنی مانند Repository، Controller و جدول پایگاهداده را شامل نمیشود. برای مشاهدهٔ مدل دامنهٔ تفصیلی، به `domain-model.md` (در صورت وجود) مراجعه کنید.
|
||
|
||
## ۱. بازیگران و نقشها در نمودار
|
||
|
||
| بازیگر | کلاس متناظر | مستند مرجع |
|
||
|---|---|---|
|
||
| کاربر سیستم | `User` | FR-01، FR-02، US-15، AD-01 |
|
||
| گزارشدهنده | `Reporter` (انتزاعی) | requirements §۲ |
|
||
| دانشجو | `Student` | US-01 تا US-05، AD-02 |
|
||
| استاد | `Professor` | US-02 تا US-05، AD-02 |
|
||
| کارمند تأسیسات | `FacilitiesStaff` | FR-06 تا FR-09، FR-11، FR-16، FR-17، US-06 تا US-10، US-17، AD-03 |
|
||
| تعمیرکار | `Technician` | FR-10 تا FR-13، US-11 تا US-14، AD-04 |
|
||
| مدیر | `Manager` | FR-17، US-17، AD-03 |
|
||
|
||
## ۲. نمودار کلاس
|
||
|
||
```mermaid
|
||
classDiagram
|
||
direction LR
|
||
|
||
class User["کاربر سیستم"] {
|
||
+String نام_کاربری
|
||
+String رمز_عبور_هششده
|
||
+Boolean فعال
|
||
+ورود(نام_کاربری, رمز_عبور) Boolean
|
||
+خروج() void
|
||
+بررسی_دسترسی(عملیات) Boolean
|
||
}
|
||
|
||
class Reporter["گزارشدهنده"] {
|
||
<<abstract>>
|
||
+ثبت_گزارش(عنوان, توضیحات, محل, نوع_تجهیز) FaultReport
|
||
+افزودن_اطلاعات_تکمیلی(گزارش, محتوا) void
|
||
+مشاهده_گزارشهای_خود() List
|
||
+مشاهده_تاریخچه(گزارش) List
|
||
+تأیید_تعمیر(گزارش) void
|
||
+رد_تعمیر(گزارش, دلیل) void
|
||
}
|
||
|
||
class Student["دانشجو"]
|
||
class Professor["استاد"]
|
||
|
||
class FacilitiesStaff["کارمند تأسیسات"] {
|
||
+بررسی_گزارشها(فیلتر) List
|
||
+تعیین_اولویت(گزارش, اولویت) void
|
||
+تخصیص_تعمیرکار(گزارش, تعمیرکار) Assignment
|
||
+تغییر_وضعیت(گزارش, وضعیت) void
|
||
+مشاهده_تاریخچه(گزارش) List
|
||
+مشاهده_داشبورد() Dashboard
|
||
}
|
||
|
||
class Technician["تعمیرکار"] {
|
||
+مشاهده_مأموریتها() List
|
||
+شروع_تعمیر(گزارش) void
|
||
+ثبت_نتیجه_تعمیر(گزارش, توضیحات) RepairResult
|
||
+درخواست_اطلاعات(گزارش, توضیحات) InfoRequest
|
||
}
|
||
|
||
class Manager["مدیر"] {
|
||
+مشاهده_داشبورد_مدیریتی() Dashboard
|
||
}
|
||
|
||
class FaultReport["گزارش خرابی"] {
|
||
+String شناسه
|
||
+String عنوان
|
||
+String توضیحات
|
||
+ReportStatus وضعیت
|
||
+Priority اولویت
|
||
+DateTime تاریخ_ثبت
|
||
+اعتبارسنجی() Boolean
|
||
+تغییر_وضعیت(وضعیت_جدید) void
|
||
+بستن() void
|
||
+افزودن_رویداد(اقدام, انجامدهنده) void
|
||
}
|
||
|
||
class Location["محل خرابی"] {
|
||
+String ساختمان
|
||
+String طبقه
|
||
+String اتاق
|
||
}
|
||
|
||
class ReportStatus["وضعیت گزارش"] {
|
||
<<enumeration>>
|
||
ثبتشده
|
||
ارجاعشده
|
||
در_حال_تعمیر
|
||
تعمیر_انجامشده
|
||
بستهشده
|
||
}
|
||
|
||
class Priority["اولویت"] {
|
||
<<enumeration>>
|
||
کم
|
||
متوسط
|
||
زیاد
|
||
فوری
|
||
}
|
||
|
||
class EquipmentType["نوع تجهیز"] {
|
||
<<enumeration>>
|
||
روشنایی
|
||
تهویه
|
||
آسانسور
|
||
برق
|
||
پروژکتور
|
||
سایر
|
||
}
|
||
|
||
class Assignment["تخصیص تعمیرکار"] {
|
||
+DateTime تاریخ_تخصیص
|
||
+String وضعیت
|
||
}
|
||
|
||
class RepairResult["نتیجه تعمیر"] {
|
||
+String توضیحات
|
||
+DateTime تاریخ_ثبت
|
||
}
|
||
|
||
class ReporterFeedback["بازخورد گزارشدهنده"] {
|
||
+Boolean تأیید_شده
|
||
+String دلیل_رد
|
||
+DateTime تاریخ
|
||
+اعتبارسنجی_دلیل() Boolean
|
||
}
|
||
|
||
class SupplementaryInfo["اطلاعات تکمیلی"] {
|
||
+String نوع
|
||
+String محتوا
|
||
+DateTime تاریخ
|
||
}
|
||
|
||
class InfoRequest["درخواست اطلاعات تکمیلی"] {
|
||
+String توضیحات
|
||
+DateTime تاریخ
|
||
+Boolean پاسخ_داده_شده
|
||
}
|
||
|
||
class ReportHistoryEntry["رویداد تاریخچه"] {
|
||
+String اقدام
|
||
+String توضیحات
|
||
+DateTime تاریخ
|
||
}
|
||
|
||
class Notification["اعلان"] {
|
||
+String رویداد
|
||
+String کانال
|
||
+DateTime تاریخ
|
||
+Boolean خوانده_شده
|
||
}
|
||
|
||
class Dashboard["داشبورد مدیریتی"] {
|
||
+int تعداد_کل_گزارشها
|
||
+int تعداد_گزارشهای_باز
|
||
+int تعداد_درخواستهای_فوری
|
||
+محاسبه_آمار() void
|
||
}
|
||
|
||
class AuthService["سرویس احراز هویت"] {
|
||
<<service>>
|
||
+اعتبارسنجی(نام_کاربری, رمز_عبور) Boolean
|
||
}
|
||
|
||
User <|-- Reporter
|
||
Reporter <|-- Student
|
||
Reporter <|-- Professor
|
||
User <|-- FacilitiesStaff
|
||
User <|-- Technician
|
||
User <|-- Manager
|
||
|
||
Reporter "1" --> "*" FaultReport : ثبت_میکند
|
||
FaultReport "*" --> "1" Location : در_محل
|
||
FaultReport "*" --> "1" EquipmentType : نوع_تجهیز
|
||
FaultReport "1" --> "1" ReportStatus : وضعیت
|
||
FaultReport "1" --> "0..1" Priority : اولویت
|
||
|
||
FaultReport "1" *-- "*" SupplementaryInfo : اطلاعات_تکمیلی
|
||
SupplementaryInfo "*" --> "1" Reporter : ارائهدهنده
|
||
InfoRequest "1" --> "0..1" SupplementaryInfo : پاسخ
|
||
|
||
FaultReport "1" *-- "*" InfoRequest : درخواستها
|
||
InfoRequest "*" --> "1" User : درخواستدهنده
|
||
|
||
FaultReport "1" *-- "*" Assignment : تخصیصها
|
||
Assignment "*" --> "1" Technician : تعمیرکار
|
||
Assignment "*" --> "1" FacilitiesStaff : تخصیصدهنده
|
||
|
||
FaultReport "1" *-- "*" RepairResult : نتایج_تعمیر
|
||
RepairResult "*" --> "1" Technician : ثبتکننده
|
||
|
||
FaultReport "1" *-- "*" ReporterFeedback : بازخوردها
|
||
ReporterFeedback "*" --> "1" Reporter : تأییدکننده
|
||
ReporterFeedback "*" --> "0..1" RepairResult : درباره_نتیجه
|
||
|
||
FaultReport "1" *-- "*" ReportHistoryEntry : تاریخچه
|
||
ReportHistoryEntry "*" --> "1" User : انجامدهنده
|
||
|
||
Notification "*" --> "1" User : گیرنده
|
||
Notification "*" --> "1" FaultReport : مربوط_به
|
||
|
||
FacilitiesStaff ..> Dashboard : مشاهده
|
||
Manager ..> Dashboard : مشاهده
|
||
Dashboard ..> FaultReport : محاسبه_از
|
||
User ..> AuthService : احراز_هویت
|
||
|
||
note for Manager "طبق FR-17 و US-17 فقط «مشاهده داشبورد» برای مدیر ذکر شده؛ سطح دسترسی کامل او پرسش باز ۹ در activity.md است."
|
||
note for Priority "سطوح رسمی اولویت در نیازمندیها تعیین نشده (پرسش باز ۳). این مقادیر موقتاند."
|
||
note for ReportStatus "فهرست رسمی وضعیتها و انتقالهای مجاز تعیین نشده (پرسش باز ۴). «باز» در FR-17 و US-06 بهمعنای گزارش بستهنشده است، نه یک وضعیت رسمی."
|
||
note for Assignment "پرسش باز ۵: آیا یک گزارش همزمان به یک تعمیرکار تخصیص مییابد یا چند تعمیرکار؟"
|
||
note for InfoRequest "پرسش باز ۶: چه کسانی مجاز به درخواست اطلاعات و پاسخ به آن هستند؟"
|
||
note for ReporterFeedback "دلیل رد اجباری است (US-05.feature). تأیید فقط توسط گزارشدهنده همان گزارش و فقط در وضعیت «تعمیر انجامشده» مجاز است."
|
||
note for FaultReport "عنوان حداکثر ۱۵۰ کاراکتر؛ فیلدهای اجباری: عنوان، توضیحات، محل خرابی، نوع تجهیز (US-01.feature). وضعیت اولیه: ثبتشده."
|
||
note for AuthService "از سناریوی «سرویس احراز هویت در دسترس نیست» در US-15.feature. روش احراز هویت و بازیابی رمز در مستندات مشخص نشده."
|
||
```
|
||
|
||
## ۳. جدول ردیابی (Traceability)
|
||
|
||
| عنصر نمودار | نوع | مستند مرجع |
|
||
|---|---|---|
|
||
| `User` / کاربر سیستم | کلاس | FR-01، FR-02، US-15، AD-01؛ activity §۱ |
|
||
| `Reporter` / گزارشدهنده | کلاس انتزاعی | requirements §۲ («گزارشدهنده = دانشجو یا استاد»)، US-01 تا US-05، AD-02، AD-05 |
|
||
| `Student` / دانشجو | کلاس | US-01، US-03، US-04، US-05، AD-02 |
|
||
| `Professor` / استاد | کلاس | US-02، US-03، US-04، US-05، AD-02 |
|
||
| `FacilitiesStaff` / کارمند تأسیسات | کلاس | FR-06 تا FR-09، FR-11، FR-16، FR-17، US-06 تا US-10، US-17، AD-03 |
|
||
| `Technician` / تعمیرکار | کلاس | FR-10 تا FR-13، US-11 تا US-14، AD-04 |
|
||
| `Manager` / مدیر | کلاس | FR-17، US-17، AD-03؛ activity §۱ |
|
||
| `FaultReport` / گزارش خرابی | کلاس | FR-03 تا FR-05، FR-11، FR-14 تا FR-16، US-01 تا US-05، US-09، US-10، AD-02 تا AD-06 |
|
||
| `ReportStatus` / وضعیت گزارش | enum | US-01 (`ثبتشده`)، US-05 (`ارجاعشده`، `در حال تعمیر`، `تعمیر انجامشده`، `بستهشده`)، US-12، AD-03 تا AD-05 |
|
||
| `Priority` / اولویت | enum موقت | FR-07، US-07، AD-03؛ سطوح دقیق: پرسش باز ۳ |
|
||
| `Location` / محل خرابی | کلاس | FR-03، US-01؛ دامنه فضاها: ابهام README |
|
||
| `EquipmentType` / نوع تجهیز | enum | FR-03، US-01؛ مثالهای README: روشنایی، تهویه، آسانسور، برق، پروژکتور |
|
||
| `Assignment` / تخصیص تعمیرکار | کلاس | FR-09، US-08، US-11، AD-03، AD-04 |
|
||
| `RepairResult` / نتیجه تعمیر | کلاس | FR-12، US-13، AD-04 |
|
||
| `ReporterFeedback` / بازخورد گزارشدهنده | کلاس | FR-14، US-05، AD-05، US-05.feature |
|
||
| `SupplementaryInfo` / اطلاعات تکمیلی | کلاس | FR-04، US-04، US-14، AD-02، AD-04 |
|
||
| `InfoRequest` / درخواست اطلاعات | کلاس | FR-13، US-14، AD-04 |
|
||
| `ReportHistoryEntry` / تاریخچه | کلاس | FR-16، US-03، US-05، US-10، AD-03 |
|
||
| `Notification` / اعلان | کلاس | FR-15، US-16، AD-04 |
|
||
| `Dashboard` / داشبورد | کلاس (Read Model) | FR-17، US-17، AD-03 |
|
||
| `AuthService` / سرویس احراز هویت | سرویس خارجی | US-15.feature: «سرویس احراز هویت در دسترس نیست» |
|
||
|
||
## ۴. محدودیتهای اعمالشده از فایلهای Feature
|
||
|
||
| محدودیت | منبع | محل بازتاب در نمودار |
|
||
|---|---|---|
|
||
| عنوان حداکثر ۱۵۰ کاراکتر | US-01.feature | `note for FaultReport` |
|
||
| عنوان، توضیحات، محل، نوع تجهیز اجباریاند | US-01.feature | `FaultReport.اعتبارسنجی()` + note |
|
||
| وضعیت اولیه «ثبتشده» | US-01.feature | `ReportStatus` + note |
|
||
| دلیل رد بازخورد اجباری است | US-05.feature | `ReporterFeedback.دلیل_رد` + `اعتبارسنجی_دلیل()` |
|
||
| تأیید فقط توسط گزارشدهنده همان گزارش | US-05.feature | رابطه `ReporterFeedback --> Reporter` + note |
|
||
| تأیید فقط در وضعیت «تعمیر انجامشده» | US-05.feature | `note for ReporterFeedback` |
|
||
| تأیید دوباره نباید وضعیت را دوباره تغییر دهد (Idempotent) | US-05.feature | `note for ReporterFeedback` |
|
||
| کنترل دسترسی مبتنی بر نقش و جلوگیری از دسترسی مستقیم به صفحات نقش دیگر | US-15.feature | `User.بررسی_دسترسی()` + ارثبری نقشها |
|
||
| پیام خطای ورود نباید مشخص کند کدام فیلد اشتباه است | US-15.feature | `User.ورود()` + `note for AuthService` |
|
||
|
||
## ۵. نکات و پرسشهای باز
|
||
|
||
موارد زیر در مستندات بهعنوان پرسش باز علامتگذاری شدهاند و در نمودار فقط بهصورت `note` آمدهاند، نه بهعنوان قانون قطعی:
|
||
|
||
1. **فهرست رسمی وضعیتها و انتقالهای مجاز** — پرسش باز ۴ در [`activity.md`](activity.md).
|
||
2. **سطوح و معیارهای اولویت** — پرسش باز ۳ در [`activity.md`](activity.md).
|
||
3. **یک یا چند تعمیرکار برای هر گزارش** — پرسش باز ۵ در [`activity.md`](activity.md).
|
||
4. **چه کسانی میتوانند درخواست اطلاعات بدهند یا پاسخ دهند** — پرسش باز ۶ در [`activity.md`](activity.md).
|
||
5. **جریان دقیق پس از رد تعمیر توسط گزارشدهنده** — پرسش باز ۷ در [`activity.md`](activity.md).
|
||
6. **کانال اعلانها: داخل سامانه، پیامک یا ایمیل** — پرسش باز ۸ در [`activity.md`](activity.md) و بخش پرسشهای باز [`requirements-specification.md`](requirements-specification.md).
|
||
7. **سطح دسترسی دقیق مدیر** — پرسش باز ۹ در [`activity.md`](activity.md).
|
||
8. **دامنه فضاها: آموزشی/عمومی یا شامل خوابگاه و اداری** — ابهام باقیمانده در [`README.md`](../../README.md).
|
||
9. **آیا یک کاربر میتواند چند نقش داشته باشد؟** — در مستندات صریحاً مشخص نشده است. اگر پاسخ «بله» باشد، ارثبری `User` به نقشها باید به **ترکیب (Composition)** با کلاس `نقش` تغییر کند.
|
||
10. **روش احراز هویت و بازیابی رمز عبور** — در [`activity.md`](activity.md) §۲ بهعنوان نامشخص علامتگذاری شده است.
|
||
|
||
## ۶. مواردی که عمداً مدل نشدهاند
|
||
|
||
موارد زیر در مستندات تحلیل تعریف نشدهاند و آگاهانه از نمودار حذف شدهاند:
|
||
|
||
- **Repository، Controller، Database، API** — مربوط به فاز طراحی فنی هستند.
|
||
- **سرویس ذخیرهسازی** (US-01.feature) — فقط یک سناریوی خطاست، نه یک مؤلفهٔ معماری تعریفشده.
|
||
- **«باز» بهعنوان وضعیت** — در FR-17 و US-06 بهمعنای گزارش بستهنشده است؛ وضعیت رسمی نیست.
|
||
- **«نیازمند پیگیری» بهعنوان وضعیت** — در US-05 بهصورت «علامتگذاری برای پیگیری بیشتر» آمده، نه وضعیت رسمی.
|
||
|
||
## ۷. پیشنهاد اصلاح استاندارد
|
||
|
||
استاندارد فعلی [`CONTRIBUTING.md`](../../CONTRIBUTING.md) §۷ شناسهٔ `AD-NN` را برای Activity Diagram تعریف کرده است اما شناسهای برای Class Diagram ندارد. پیشنهاد میشود شناسهٔ `CD-NN` (مثلاً `CD-01` برای همین سند) به استاندارد اضافه شود تا ارجاعدهی یکدست بماند.
|
||
|
||
---
|
||
|
||
**وضعیت سند:** نسخه اولیه (Draft) – آماده بازبینی |