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 مستخدمين نشطين، اكتشاف
النشاط المشبوه)