انتقل إلى المحتوى الرئيسي

المشروع ب: نظام إدارة المهام

الوصف​

تطوير API RESTful لنظام إدارة المشاريع والمهام، مما يسمح للفرق بالتعاون، متابعة التقدم، وإدارة وقتهم.


الميزات المطلوبة​

1. إدارة المستخدمين​

POST   /api/auth/register     - تسجيل
POST /api/auth/login - تسجيل الدخول (يُرجع JWT)
GET /api/users/me - الملف الشخصي للمستخدم
PUT /api/users/me - تعديل الملف الشخصي
GET /api/users - قائمة المستخدمين (ADMIN/MANAGER)

كيان المستخدم:

  • id، البريد الإلكتروني، كلمة المرور، الاسم الأول، الاسم الأخير
  • الدور (ADMIN، MANAGER، MEMBER)
  • القسم، تاريخ الإنشاء

2. إدارة المشاريع​

GET    /api/projects              - مشاريعي
POST /api/projects - إنشاء مشروع
GET /api/projects/{id} - تفاصيل المشروع
PUT /api/projects/{id} - تعديل المشروع
DELETE /api/projects/{id} - حذف المشروع
POST /api/projects/{id}/members - إضافة عضو
DELETE /api/projects/{id}/members/{userId} - إزالة عضو

كيان المشروع:

  • id، الاسم، الوصف
  • المالك (المستخدم)
  • الأعضاء (ManyToMany المستخدم)
  • الحالة (PLANNING، ACTIVE، ON_HOLD، COMPLETED)
  • تاريخ البدء، تاريخ الانتهاء، تاريخ الإنشاء

3. إدارة المهام​

GET    /api/projects/{id}/tasks       - مهام المشروع
POST /api/projects/{id}/tasks - إنشاء مهمة
GET /api/tasks/{id} - تفاصيل المهمة
PUT /api/tasks/{id} - تعديل المهمة
DELETE /api/tasks/{id} - حذف المهمة
PUT /api/tasks/{id}/status - تغيير الحالة
PUT /api/tasks/{id}/assign - تعيين المهمة
GET /api/tasks/my-tasks - مهامي

كيان المهمة:

  • id، العنوان، الوصف
  • المشروع (ManyToOne)
  • المكلف (المستخدم)
  • الأولوية (LOW، MEDIUM، HIGH، URGENT)
  • الحالة (TODO، IN_PROGRESS، IN_REVIEW، DONE)
  • تاريخ الاستحقاق، الساعات المقدرة، تاريخ الإنشاء

4. التعليقات والنشاط​

GET    /api/tasks/{id}/comments       - التعليقات
POST /api/tasks/{id}/comments - إضافة تعليق
DELETE /api/comments/{id} - حذف تعليق
GET /api/tasks/{id}/activity - سجل النشاط

كيان التعليق:

  • id، المهمة، المؤلف، المحتوى، تاريخ الإنشاء

كيان النشاط:

  • id، المهمة، المستخدم، الإجراء، التفاصيل، تاريخ الإنشاء

5. تتبع الوقت​

POST   /api/tasks/{id}/time-entries   - تسجيل الوقت
GET /api/tasks/{id}/time-entries - الوقت على المهمة
GET /api/time-entries/my-entries - وقتي
GET /api/projects/{id}/time-report - تقرير وقت المشروع

كيان تسجيل الوقت:

  • id، المهمة، المستخدم، الساعات، الوصف، التاريخ

مخطط قاعدة البيانات​

users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
├── department
└── created_at

projects
├── id (PK)
├── name
├── description
├── owner_id (FK)
├── status
├── start_date
├── end_date
└── created_at

project_members
├── project_id (FK)
└── user_id (FK)

tasks
├── id (PK)
├── title
├── description
├── project_id (FK)
├── assignee_id (FK)
├── priority
├── status
├── due_date
├── estimated_hours
└── created_at

comments
├── id (PK)
├── task_id (FK)
├── author_id (FK)
├── content
└── created_at

activities
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── action
├── details
└── created_at

time_entries
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── hours
├── description
└── date

قواعد العمل​

المشاريع​

  • فقط المالك أو ADMIN يمكنه حذف مشروع
  • MANAGER يمكنه إنشاء مشاريع
  • يمكن للعضو رؤية المشاريع التي ينتمي إليها

المهام​

  • فقط أعضاء المشروع يمكنهم رؤية المهام
  • تعيين مهمة ينشئ نشاطًا
  • تغيير الحالة ينشئ نشاطًا

انتقالات حالة المهمة​

TODO -> IN_PROGRESS -> IN_REVIEW -> DONE
<- (يمكن العودة للخلف)

الأذونات​

الدورالمشاريعالمهامالأعضاء
ADMINCRUD الكلCRUD الكلإدارة الكل
MANAGERCRUD الخاصةCRUD المشاريعإدارة المشاريع
MEMBERقراءة المعينةCRUD المعينة-

نقاط النهاية المفصلة​

المشاريع​

POST /api/projects
Authorization: Bearer <token>
Content-Type: application/json

{
"name": "Website Redesign",
"description": "Complete redesign of company website",
"startDate": "2024-02-01",
"endDate": "2024-04-30"
}

Response 201:
{
"id": 1,
"name": "Website Redesign",
"description": "Complete redesign of company website",
"owner": { "id": 1, "firstName": "John", "lastName": "Doe" },
"status": "PLANNING",
"startDate": "2024-02-01",
"endDate": "2024-04-30",
"members": [],
"createdAt": "2024-01-15T10:30:00"
}

المهام​

POST /api/projects/1/tasks
Authorization: Bearer <token>
Content-Type: application/json

{
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"priority": "HIGH",
"dueDate": "2024-02-15",
"estimatedHours": 16,
"assigneeId": 2
}

Response 201:
{
"id": 1,
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"project": { "id": 1, "name": "Website Redesign" },
"assignee": { "id": 2, "firstName": "Jane", "lastName": "Smith" },
"priority": "HIGH",
"status": "TODO",
"dueDate": "2024-02-15",
"estimatedHours": 16
}

تتبع الوقت​

POST /api/tasks/1/time-entries
Authorization: Bearer <token>
Content-Type: application/json

{
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}

Response 201:
{
"id": 1,
"task": { "id": 1, "title": "Design Homepage" },
"user": { "id": 2, "firstName": "Jane" },
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}

تقرير الوقت​

GET /api/projects/1/time-report
Authorization: Bearer <token>

Response 200:
{
"project": { "id": 1, "name": "Website Redesign" },
"totalHours": 45.5,
"estimatedHours": 120,
"byUser": [
{ "user": "Jane Smith", "hours": 28.5 },
{ "user": "Bob Wilson", "hours": 17.0 }
],
"byTask": [
{ "task": "Design Homepage", "logged": 16, "estimated": 16 },
{ "task": "Implement Header", "logged": 12.5, "estimated": 24 }
]
}

الاختبارات المطلوبة​

اختبارات وحدات​

  • ProjectService: CRUD، إدارة الأعضاء
  • TaskService: CRUD، انتقالات الحالة
  • TimeEntryService: التسجيل، الحسابات

اختبارات تكامل​

  • ProjectController: جميع نقاط النهاية
  • TaskController: سير عمل المهمة
  • الأمان: الوصول القائم على الدور

نقاط إضافية​

الميزةالنقاط
إشعارات WebSocket+5
نقطة بيانات لوحة Kanban+3
إشعارات البريد الإلكتروني (محاكاة)+3
مهام متكررة+3
تصدير تقرير PDF+3
لوحة إحصائيات+5

تقدير الوقت​

المهمةالساعات
إعداد المشروع وقاعدة البيانات2
الكيانات والمستودعات5
خدمات الأعمال8
وحدات التحكم REST5
الأمان والأذونات5
الاختبارات6
التوثيق2
النقاط الإضافية4-8
الإجمالي33-41

العودة إلى المشروع النهائي