Define entities: USER, ROLE, AUDIT_LOG with relationships and constraints.
تحديد الكيانات: USER, ROLE, AUDIT_LOG مع العلاقات والقيود.
- Use diagrams.net or Lucidchart
- Define keys and relationships
- Add constraints (unique email, hashed password)
- Team checkpoint for verification
- استخدام diagrams.net أو Lucidchart
- تحديد المفاتيح والعلاقات
- إضافة القيود (بريد إلكتروني فريد، كلمة مرور مشفرة)
- نقطة تفتيش الفريق للتحقق
Tools Needed
الأدوات المطلوبة
- diagrams.net (draw.io) OR Lucidchart (EER diagram)
- Phase 1 requirements (roles + audit/log requirement)
- diagrams.net (draw.io) أو Lucidchart (مخطط EER)
- متطلبات المرحلة 1 (الأدوار + متطلبات المراجعة/السجل)
Steps to Complete Phase 2
خطوات إكمال المرحلة 2
- Define entities: USER (stores identity + credentials), ROLE (optional table) OR role attribute inside USER, AUDIT_LOG (stores user activity)
- Define keys: USER: user_id as PK, AUDIT_LOG: log_id as PK, If ROLE is separate: role_id as PK
- Add relationships: USER (1) - (M) AUDIT_LOG ("a user generates many logs; each log belongs to one user")
- Add constraints: Every USER must have a role (Citizen/Admin/Provider), Email must be unique, Credentials required (password stored hashed), AUDIT_LOG must reference a valid USER
- Team checkpoint (quick review): One teammate verifies cardinalities, Another teammate verifies roles match Phase 1
- تحديد الكيانات: USER (يخزن الهوية + بيانات الاعتماد)، ROLE (جدول اختياري) أو سمة دور داخل USER، AUDIT_LOG (يخزن نشاط المستخدم)
- تحديد المفاتيح: USER: user_id كمفتاح أساسي، AUDIT_LOG: log_id كمفتاح أساسي، إذا كان ROLE منفصلًا: role_id كمفتاح أساسي
- إضافة العلاقات: USER (1) - (M) AUDIT_LOG ("يولد المستخدم سجلات كثيرة؛ ينتمي كل سجل إلى مستخدم واحد")
- إضافة القيود: يجب أن يكون لكل USER دور (مواطن/مسؤول/مزود)، يجب أن يكون البريد الإلكتروني فريدًا، مطلوب بيانات اعتماد (كلمة مرور مخزنة مشفرة)، يجب أن يشير AUDIT_LOG إلى مستخدم صالح
- نقطة تفتيش الفريق (مراجعة سريعة): يقوم زميل واحد بالتحقق من العلاقات، يقوم زميل آخر بالتحقق من مطابقة الأدوار للمرحلة 1
Map entities to tables, define foreign keys and constraints.
تعيين الكيانات إلى الجداول، وتحديد المفاتيح الخارجية والقيود.
- USER and AUDIT_LOG tables
- Decide role representation (ENUM or table)
- Add NOT NULL and UNIQUE constraints
- Share USER PK definition with team
- جداول USER و AUDIT_LOG
- تحديد تمثيل الدور (ENUM أو جدول)
- إضافة قيود NOT NULL و UNIQUE
- مشاركة تعريف USER PK مع الفريق
Tools Needed
الأدوات المطلوبة
- Google Docs / Word (write schema + explanation)
- Optional: dbdiagram.io (visual relational schema)
- Google Docs / Word (كتابة المخطط + الشرح)
- اختياري: dbdiagram.io (مخطط علائقي مرئي)
Steps to Complete Phase 3
خطوات إكمال المرحلة 3
- Map entities to tables: USER(user_id PK, email UNIQUE, full_name, role, password_hash, created_at), AUDIT_LOG(log_id PK, user_id FK, action, timestamp, metadata)
- Decide role representation (team decision): Option A (simpler for CS340): role is an ENUM-like attribute in USER, Option B: ROLE table + FK in USER, Choose one and keep consistent everywhere
- Add constraints: email UNIQUE NOT NULL, password_hash NOT NULL, user_id FK in AUDIT_LOG with ON DELETE behavior (team chooses: CASCADE or RESTRICT)
- Write short mapping explanation: Why audit log is separate (multi-entry history, security, traceability)
- Integration alignment: Share final USER(user_id) definition with other members so they reference the correct PK name/type
- تعيين الكيانات إلى الجداول: USER(user_id PK, email UNIQUE, full_name, role, password_hash, created_at), AUDIT_LOG(log_id PK, user_id FK, action, timestamp, metadata)
- تحديد تمثيل الدور (قرار الفريق): الخيار أ (أبسط لـ CS340): role هو سمة تشبه ENUM في USER، الخيار ب: جدول ROLE + FK في USER، اختر واحدًا وابقَ متسقًا في كل مكان
- إضافة القيود: email UNIQUE NOT NULL, password_hash NOT NULL, user_id FK في AUDIT_LOG مع سلوك ON DELETE (يختار الفريق: CASCADE أو RESTRICT)
- كتابة شرح قصير للتعيين: لماذا سجل المراجعة منفصل (تاريخ متعدد الإدخالات، الأمان، القدرة على التتبع)
- محاذاة التكامل: شارك تعريف USER(user_id) النهائي مع الأعضاء الآخرين حتى يشيروا إلى اسم/نوع PK الصحيح
Write DDL scripts, insert test data, and validate integrity.
كتابة نصوص DDL، وإدخال بيانات الاختبار، والتحقق من السلامة.
- Create tables with MySQL
- Insert ≥10 users and 10-30 audit logs
- Test referential integrity
- Export schema.sql and seed.sql
- إنشاء الجداول باستخدام MySQL
- إدخال ≥10 مستخدمين و 10-30 سجل مراجعة
- اختبار سلامة الإحالة
- تصدير schema.sql و seed.sql
Tools Needed
الأدوات المطلوبة
- DBMS: MySQL (likely for CS340) + MySQL Workbench OR phpMyAdmin
- Optional: VS Code + SQL file (schema.sql, seed.sql)
- نظام إدارة قواعد البيانات: MySQL (على الأرجح لـ CS340) + MySQL Workbench أو phpMyAdmin
- اختياري: VS Code + ملف SQL (schema.sql, seed.sql)
Steps to Complete Phase 4
خطوات إكمال المرحلة 4
- Write DDL scripts: CREATE TABLE user (...), CREATE TABLE audit_log (...) with FK referencing USER
- Choose FK delete rule (team-consistent): Recommended: AUDIT_LOG.user_id → USER.user_id ON DELETE CASCADE (keeps DB clean) OR RESTRICT (keeps logs as evidence, but requires strategy). Pick one based on team policy
- Insert test data: Insert ≥10 users, Insert ≥10 - 30 logs with different actions: LOGIN_SUCCESS, LOGIN_FAIL, CREATE_FAMILY_MEMBER, BOOK_APPOINTMENT, ALERT_GENERATED
- Verify integrity: Try inserting a log with a non-existing user_id (should fail), Try inserting duplicate email (should fail)
- Export scripts: Deliver schema.sql + seed.sql to the team repo
- كتابة نصوص DDL: CREATE TABLE user (...), CREATE TABLE audit_log (...) مع FK تشير إلى USER
- اختر قاعدة حذف FK (متسقة مع الفريق): موصى به: AUDIT_LOG.user_id → USER.user_id ON DELETE CASCADE (يبقي قاعدة البيانات نظيفة) أو RESTRICT (يحتفظ بالسجلات كدليل، لكنه يتطلب استراتيجية). اختر واحدة بناءً على سياسة الفريق
- أدخل بيانات الاختبار: أدخل ≥10 مستخدمين، أدخل ≥10 - 30 سجلًا بإجراءات مختلفة: LOGIN_SUCCESS, LOGIN_FAIL, CREATE_FAMILY_MEMBER, BOOK_APPOINTMENT, ALERT_GENERATED
- تحقق من السلامة: حاول إدراج سجل مع user_id غير موجود (يجب أن يفشل)، حاول إدراج بريد إلكتروني مكرر (يجب أن يفشل)
- تصدير النصوص: تسليم schema.sql + seed.sql إلى مستودع الفريق
Implement backend endpoints, RBAC, and audit logging.
تنفيذ نقاط نهاية الخلفية، RBAC، وتسجيل المراجعة.
- Node.js/Express backend with MySQL
- Implement /auth/register, /auth/login
- Role-based access control middleware
- 5 basic + 5 advanced SQL queries
- Node.js/Express مع MySQL
- تنفيذ /auth/register, /auth/login
- وسيط التحكم في الوصول القائم على الدور
- 5 استعلامات أساسية + 5 متقدمة
Tools Needed
الأدوات المطلوبة
- Backend: Node.js with Express.js
- Database: MySQL, Database Connector: mysql2 (Node.js)
- Password Security: bcrypt
- API Testing: Postman or browser
- Development Environment: VS Code
- الخلفية: Node.js مع Express.js
- قاعدة البيانات: MySQL، موصل قاعدة البيانات: mysql2 (Node.js)
- أمان كلمة المرور: bcrypt
- اختبار API: Postman أو المتصفح
- بيئة التطوير: VS Code
Steps to Complete Phase 5
خطوات إكمال المرحلة 5
- Backend Endpoints (Minimum Required): Implement Express routes: POST /auth/register (Registers a new user and stores hashed credentials), POST /auth/login (Authenticates user credentials), GET /admin/audit-logs (Retrieves all audit logs - Admin access only)
- Login Validation Flow: 1. Receive email and password from request body, 2. Query USER table by email, 3. Compare password using bcrypt.compare(), 4. Return authentication success or failure response. This flow must be logged in the audit table
- Role-Based Access Control (RBAC): Implement Express middleware that checks user role after authentication and allows or denies access based on role. Example: Only users with role Admin can access /admin/audit-logs
- Audit Log Insertion: Audit logging must occur automatically. On every login attempt: Insert a row into AUDIT_LOG with user_id, action (LOGIN_SUCCESS / LOGIN_FAILED), timestamp. For major system actions owned by other modules: Provide a shared helper function: logAction(user_id, action, metadata) for other team members to call from their modules
- SQL Queries Requirement (CS340): 5 Basic Queries (Insert new user, Select user by email, Insert audit log, Select audit logs for user, Update user role) and 5 Advanced Queries (Count login attempts per user, Filter failed login attempts in last 7 days, Join USER and AUDIT_LOG, Retrieve top 5 most active users, Detect suspicious activity)
- نقاط نهاية الخلفية (الحد الأدنى المطلوب): تنفيذ مسارات Express: POST /auth/register (يسجل مستخدمًا جديدًا ويخزن بيانات الاعتماد المشفرة)، POST /auth/login (يصدق بيانات اعتماد المستخدم)، GET /admin/audit-logs (استرداد جميع سجلات المراجعة - وصول المسؤول فقط)
- تدفق التحقق من تسجيل الدخول: 1. استقبال البريد الإلكتروني وكلمة المرور من جسم الطلب، 2. استعلام جدول USER بالبريد الإلكتروني، 3. مقارنة كلمة المرور باستخدام bcrypt.compare()، 4. إرجاع استجابة نجاح أو فشل المصادقة. يجب تسجيل هذا التدفق في جدول المراجعة
- التحكم في الوصول القائم على الدور (RBAC): تنفيذ وسيط Express يتحقق من دور المستخدم بعد المصادقة ويسمح أو يرفض الوصول بناءً على الدور. مثال: فقط المستخدمون الذين لديهم دور المسؤول يمكنهم الوصول إلى /admin/audit-logs
- إدراج سجل المراجعة: يجب أن يحدث تسجيل المراجعة تلقائيًا. في كل محاولة تسجيل دخول: أدخل صفًا في AUDIT_LOG مع user_id، action (LOGIN_SUCCESS / LOGIN_FAILED)، timestamp. للإجراءات الرئيسية للنظام المملوكة للوحدات الأخرى: تقديم وظيفة مساعدة مشتركة: logAction(user_id, action, metadata) للأعضاء الآخرين في الفريق للاستدعاء من وحداتهم
- متطلبات استعلامات SQL (CS340): 5 استعلامات أساسية (إدراج مستخدم جديد، تحديد المستخدم بالبريد الإلكتروني، إدراج سجل مراجعة، تحديد سجلات المراجعة للمستخدم، تحديث دور المستخدم) و5 استعلامات متقدمة (عد محاولات تسجيل الدخول لكل مستخدم، تصفية محاولات تسجيل الدخول الفاشلة في آخر 7 أيام، الانضمام إلى USER و AUDIT_LOG، استرداد أفضل 5 مستخدمين نشطين، اكتشاف النشاط المشبوه)