Skip to content

Advanced-Computer-Lab-2025/Akwa-Team

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

338 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Akwa-Team - GUC Event Management System

Brief Description

Akwa-Team is a comprehensive event management platform designed for the German University in Cairo (GUC). The system facilitates event creation, registration, payment processing, vendor management, visitor tracking, and community engagement through polls and loyalty programs. It supports multiple user roles including students, staff, professors, vendors, events office personnel, and administrators, each with tailored functionalities and access controls.

Motivation

The project was developed to streamline event management processes at GUC by providing a centralized platform where:

  • Events Office staff can create and manage various event types (workshops, trips, bazaars, conferences, gym sessions)
  • Students, staff, and professors can discover, register, and pay for events
  • Vendors can apply for bazaars and booths, manage applications, and participate in loyalty programs
  • Administrators can oversee the entire system, manage users, and generate reports
  • External visitors can register for events and receive QR codes for check-in
  • The community can vote on vendor selection through polls

The system automates email notifications, payment processing, certificate generation, and event reminders to reduce manual administrative work and improve user experience.

Build Status

Production Ready - The system is fully functional with all core features implemented and tested.

  • Backend: Running on Node.js with Express
  • Frontend: React application with Vite
  • Database: MongoDB connection established
  • Authentication: JWT-based authentication implemented
  • Email Service: Configured with Nodemailer
  • File Uploads: Multer configured for document handling

Code Style

The project follows JavaScript/Node.js best practices:

  • Backend: CommonJS modules with Express.js
  • Frontend: ES6 modules with React 19
  • Naming Conventions:
    • Controllers: camelCase (e.g., eventController.js)
    • Routes: camelCase (e.g., eventRoutes.js)
    • Models: PascalCase (e.g., Event.js, Student.js)
  • Code Organization:
    • MVC pattern (Models, Views/Components, Controllers)
    • Separation of concerns (routes, controllers, middleware, services)
    • Reusable middleware for authentication and authorization
  • Error Handling: Try-catch blocks with appropriate error responses
  • Linting: ESLint configured for frontend code

Screenshots

Dashboard Views

  • /screenshots/admin-dashboard.png - Admin dashboard showing system overview
  • /screenshots/student-dashboard.png - Student dashboard with upcoming events
  • /screenshots/events-office-dashboard.png - Events Office dashboard for event management
  • /screenshots/vendor-dashboard.png - Vendor dashboard with application status

Event Management

  • /screenshots/create-event.png - Event creation form
  • /screenshots/event-details.png - Event details page with registration
  • /screenshots/payment-page.png - Payment processing interface
  • /screenshots/certificates-page.png - Certificate management and download

Vendor Features

  • /screenshots/apply-bazaar.png - Vendor bazaar application form
  • /screenshots/vendor-polls.png - Community voting on vendor selection
  • /screenshots/loyalty-partners.png - Loyalty program partners list

Administrative Features

  • /screenshots/pending-events.png - Events pending approval
  • /screenshots/pending-vendors.png - Vendor applications awaiting review
  • /screenshots/reports.png - System reports and analytics
  • /screenshots/visitor-management.png - Visitor registration and QR code generation

Tech / Frameworks Used

Backend Technologies

  • Node.js (v18+) - Runtime environment
  • Express.js (v5.1.0) - Web framework
  • MongoDB - NoSQL database
  • Mongoose (v8.19.1) - MongoDB object modeling
  • JSON Web Token (v9.0.2) - Authentication
  • bcryptjs (v3.0.2) - Password hashing
  • Joi (v18.0.1) - Input validation
  • Multer (v2.0.2) - File upload handling
  • Nodemailer (v7.0.9) - Email service
  • node-cron (v4.2.1) - Scheduled tasks (event reminders)
  • QRCode (v1.5.4) - QR code generation
  • XLSX (v0.18.5) - Excel file generation
  • Puppeteer (v24.31.0) - PDF generation
  • dotenv (v17.2.3) - Environment variable management
  • CORS (v2.8.5) - Cross-origin resource sharing

Frontend Technologies

  • React (v19.1.1) - UI library
  • React Router DOM (v7.9.4) - Client-side routing
  • Vite (v5.4.21) - Build tool and dev server
  • Axios (v1.12.2) - HTTP client
  • Tailwind CSS (v4.1.14) - Utility-first CSS framework
  • Framer Motion (v12.23.24) - Animation library
  • Lucide React (v0.546.0) - Icon library
  • QRCode (v1.5.4) - QR code generation (client-side)
  • XLSX (v0.18.5) - Excel file handling (client-side)
  • clsx (v2.1.1) - Conditional class names
  • tailwind-merge (v3.3.1) - Tailwind class merging

Development Tools

  • Nodemon (v3.1.10) - Auto-restart for development
  • ESLint (v9.36.0) - Code linting
  • Babel Plugin React Compiler - React optimization

Features

User Authentication & Authorization

  • Multi-role authentication (Student, Staff, Professor, Vendor, Events Office, Admin)
  • JWT-based session management
  • Email verification for new registrations
  • Role-based access control (RBAC)
  • Protected routes with middleware

Event Management

  • Event Types: Workshops, Trips, Bazaars, Conferences, Gym Sessions
  • Event Creation: Events Office can create various event types
  • Event Approval: Admin/Events Office approval workflow for professor-created workshops
  • Event Search: Advanced search by name, type, date range, and filters
  • Event Archiving: Archive and unarchive past events
  • Event Rating & Comments: Users can rate and comment on events
  • Event Favorites: Save favorite events for quick access
  • Past Events: View and filter past events

Registration System

  • Event Registration: Register for workshops, trips, and gym sessions
  • Court Reservations: Reserve sports courts with time slots
  • Registration Management: View, cancel, and manage registrations
  • Payment Integration: Wallet-based payment system
  • Payment Methods: Save and manage payment methods
  • Refunds: Automatic refund processing for cancellations

Payment System

  • Wallet System: User wallet with balance tracking
  • Payment Processing: Secure payment processing for event registrations
  • Payment History: Track all payment transactions
  • Refund Management: Automatic refunds for cancelled registrations
  • Payment Methods: Multiple payment method support

Vendor Management

  • Vendor Registration: Vendors can register with logo and tax card upload
  • Bazaar Applications: Apply to participate in bazaars with attendee information
  • Booth Applications: Apply for permanent booths in the platform
  • Application Status: Track application status (pending, accepted, rejected)
  • Payment for Applications: Pay for accepted vendor applications
  • Application Cancellation: Cancel applications before payment

Visitor Management

  • External Visitor Registration: Public registration for external visitors
  • QR Code Generation: Automatic QR code generation for visitors
  • QR Code Verification: Verify visitor QR codes at event check-in
  • Visitor Check-in: Events Office can check in visitors
  • Visitor Export: Export visitor lists and QR codes

Notification System

  • Email Notifications: Automated email notifications for:
    • Registration confirmations
    • Payment receipts
    • Event reminders (24 hours and 1 hour before)
    • Application status updates
    • Staff verification links
  • In-App Notifications: Real-time notification system
  • Notification Management: Mark as read, view unread count

Certificate System

  • Certificate Generation: Automatic certificate generation for completed workshops
  • Certificate Download: Download certificates as PDF
  • Certificate Email: Send certificates via email
  • Completed Workshops: Track workshops eligible for certificates

Gym Session Management

  • Session Creation: Events Office creates gym sessions
  • Monthly Calendar View: View gym sessions by month
  • Session Registration: Register for available gym sessions
  • Session Management: Edit and cancel gym sessions

Loyalty Program

  • Loyalty Partner Applications: Vendors can apply to become loyalty partners
  • Application Review: Admin/Events Office reviews and approves applications
  • Partner Directory: Public directory of approved loyalty partners
  • Program Management: Vendors can cancel their loyalty program participation

Poll System

  • Vendor Selection Polls: Events Office creates polls for vendor selection
  • Community Voting: Students, staff, and professors vote on vendor selection
  • Poll Management: Create, view, close, and delete polls
  • Poll Results: View poll results and statistics
  • Overlapping Booth Detection: Automatically detect overlapping vendor applications

Reporting & Analytics

  • Attendee Reports: Generate reports on event attendance
  • Sales Reports: Generate sales and revenue reports
  • Event Registration Export: Export event registrations to Excel
  • Visitor Export: Export visitor data and QR codes

Administrative Features

  • User Management: View, block, and unblock users
  • Staff Management: Assign roles, verify staff, manage staff accounts
  • Admin Management: Create and manage admin accounts
  • Events Office Management: Create and manage Events Office accounts
  • Pending Approvals: Review and approve pending events, vendors, and staff
  • System Reports: Access comprehensive system reports

Code Examples

Backend API Example - Event Registration

// POST /api/student/register
// Register for an event
const registerForEvent = async (req, res) => {
  try {
    const { eventId } = req.body;
    const accountId = req.user.id;
    
    // Check if already registered
    const existing = await Registration.findOne({ 
      event: eventId, 
      account: accountId 
    });
    
    if (existing) {
      return res.status(400).json({ 
        message: 'Already registered for this event' 
      });
    }
    
    // Create registration
    const registration = await Registration.create({
      event: eventId,
      account: accountId,
      status: 'pending_payment'
    });
    
    res.status(201).json({ 
      message: 'Registration successful', 
      registration 
    });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
};

Frontend Component Example - Event Card

// EventCard.jsx
import { Link } from 'react-router-dom';
import { Calendar, MapPin, Users } from 'lucide-react';

function EventCard({ event }) {
  return (
    <div className="bg-white rounded-lg shadow-md p-6 hover:shadow-lg transition">
      <h3 className="text-xl font-bold mb-2">{event.name}</h3>
      <div className="flex items-center gap-2 text-gray-600 mb-2">
        <Calendar className="w-4 h-4" />
        <span>{new Date(event.date).toLocaleDateString()}</span>
      </div>
      <div className="flex items-center gap-2 text-gray-600 mb-4">
        <MapPin className="w-4 h-4" />
        <span>{event.location}</span>
      </div>
      <Link 
        to={`/events/${event._id}`}
        className="text-blue-600 hover:underline"
      >
        View Details
      </Link>
    </div>
  );
}

Authentication Middleware Example

// middleware/auth.js
const jwt = require('jsonwebtoken');

function requireAuth(req, res, next) {
  try {
    const header = req.headers.authorization || '';
    const [, token] = header.split(' ');
    if (!token) {
      return res.status(401).json({ message: 'Unauthorized: missing token' });
    }

    const payload = jwt.verify(token, process.env.JWT_SECRET);
    req.user = {
      id: payload.sub || payload.accountId,
      role: payload.role?.toLowerCase(),
      email: payload.email
    };
    next();
  } catch {
    return res.status(401).json({ message: 'Unauthorized: invalid token' });
  }
}

function requireRole(roles = []) {
  return (req, res, next) => {
    if (!req.user || !roles.includes(req.user.role)) {
      return res.status(403).json({ message: 'Forbidden: insufficient role' });
    }
    next();
  };
}

Email Service Example

// services/eventReminderService.js
const { sendEmail } = require('../config/emailConfig');
const cron = require('node-cron');

async function sendOneDayReminders() {
  const tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  
  const events = await Event.find({
    date: { $gte: tomorrow, $lt: new Date(tomorrow.getTime() + 86400000) }
  });
  
  for (const event of events) {
    const registrations = await Registration.find({ 
      event: event._id,
      status: 'paid'
    });
    
    for (const reg of registrations) {
      await sendEmail({
        to: reg.account.email,
        subject: `Reminder: ${event.name} is tomorrow!`,
        html: `<p>Don't forget about ${event.name} tomorrow at ${event.time}!</p>`
      });
    }
  }
}

Installation & Setup

Prerequisites

  • Node.js (v18 or higher)
  • MongoDB (v6 or higher) - Local installation or MongoDB Atlas account
  • npm or yarn package manager
  • Git for version control

Backend Setup

  1. Navigate to backend directory:

    cd backend
  2. Install dependencies:

    npm install
  3. Create .env file in the backend directory:

    # Database
    MONGO_URI=mongodb://localhost:27017/akwa-team
    # Or use MongoDB Atlas:
    # MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/akwa-team
    
    # JWT Secret
    JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
    
    # Email Configuration
    EMAIL_HOST=smtp.gmail.com
    EMAIL_PORT=587
    EMAIL_SECURE=false
    EMAIL_USER=your-email@gmail.com
    EMAIL_PASS=your-app-password
    MAIL_FROM=GUC Events <no-reply@guc.edu.eg>
    
    # Frontend URL (for email links)
    FRONTEND_URL=http://localhost:5173
    
    # Server Port (optional, defaults to 5001)
    PORT=5001
  4. Start MongoDB (if using local installation):

    # Windows
    mongod
    
    # macOS/Linux
    sudo systemctl start mongod
    # or
    brew services start mongodb-community
  5. Run the backend server:

    # Development mode (with auto-restart)
    npm run dev
    
    # Production mode
    npm start

    The backend server will start on http://localhost:5001

Frontend Setup

  1. Navigate to frontend directory:

    cd frontend/Acl
  2. Install dependencies:

    npm install
  3. Create .env file in the frontend/Acl directory (if needed):

    VITE_API_URL=http://localhost:5001/api
  4. Start the development server:

    npm run dev

    The frontend will start on http://localhost:5173

  5. Build for production:

    npm run build

Email Configuration

For Gmail:

  1. Enable 2-Step Verification on your Google account
  2. Generate an App Password:
    • Go to Google Account settings
    • Security → 2-Step Verification → App passwords
    • Generate a password for "Mail"
  3. Use the generated app password in EMAIL_PASS (not your regular password)

File Upload Configuration

The system uses Multer for file uploads. Uploaded files are stored in:

  • backend/Public/uploads/vendors/ - Vendor logos and tax cards
  • backend/Public/uploads/attendee-ids/ - Attendee identification documents

Ensure these directories exist and have write permissions.

API Reference

Authentication Routes (/api/auth)

Method Endpoint Description Auth Required
POST /api/auth/register Register new user (supports vendor file uploads) No
GET /api/auth/verify-email Verify email address No
POST /api/auth/login User login No
POST /api/auth/logout User logout Yes

Event Routes (/api/events)

Method Endpoint Description Auth Required
GET /api/events/upcoming Get all upcoming events No
GET /api/events/search Search events by name or type No
GET /api/events/search/advanced Advanced event search with filters No
GET /api/events/archived Get archived events No
GET /api/events/past Get past events for authenticated user Yes
GET /api/events/past/:userId Get past events by user ID No
GET /api/events/:id Get event by ID No
PATCH /api/events/:id Edit event Yes
PATCH /api/events/:id/archive Archive event Yes
PATCH /api/events/:id/unarchive Unarchive event Yes
POST /api/events/:eventId/rate Rate an event Yes
POST /api/events/:eventId/comment Comment on an event Yes
GET /api/events/:eventId/comments Get event comments No
DELETE /api/events/comments/:commentId Delete comment (Admin only) Yes (Admin)
GET /api/events/:eventId/registrations Get event registrations Yes (Events Office)
GET /api/events/:eventId/registrations/export Export registrations to Excel Yes (Events Office)
POST /api/events/conference Create conference Yes
GET /api/events/conferences Get all conferences No
PUT /api/events/conference/:id Update conference Yes

Student Routes (/api/student)

Method Endpoint Description Auth Required
GET /api/student/events/available Get available workshops and trips No
POST /api/student/register Register for event Yes
GET /api/student/registrations Get user registrations No
GET /api/student/my/registrations Get authenticated user's registrations Yes
GET /api/student/courts/available Get available courts Yes
POST /api/student/courts/reserve Reserve a court Yes
GET /api/student/courts/my-reservations Get my court reservations Yes
GET /api/student/payment/registrations Get registrations pending payment Yes
GET /api/student/payment/paid-registrations Get paid registrations Yes
GET /api/student/payment/wallet-balance Get wallet balance Yes
POST /api/student/payment/process Process payment Yes
POST /api/student/payment/refund Cancel registration and refund Yes
GET /api/student/payment/methods Get payment methods Yes
POST /api/student/payment/methods Save payment method Yes
GET /api/student/certificates/completed-workshops Get completed workshops Yes
POST /api/student/certificates/send Send certificate via email Yes
GET /api/student/certificates/download Download certificate Yes
GET /api/student/gym/sessions/month/:year/:month Get gym sessions by month Yes
POST /api/student/gym/sessions/:sessionId/register Register for gym session Yes

Professor Routes (/api/professor)

Method Endpoint Description Auth Required
POST /api/professor/workshops Create workshop Yes (Professor)
GET /api/professor/events Get all available events Yes (Professor)
GET /api/professor/events/search Search events Yes (Professor)
POST /api/professor/events/:eventId/register Register for event Yes (Professor)
GET /api/professor/my-registrations Get my registrations Yes (Professor)
PUT /api/professor/workshops/:workshopId Update workshop Yes (Professor)
GET /api/professor/my-workshops Get my workshops Yes (Professor)
GET /api/professor/workshops/:workshopId/participants Get workshop participants Yes (Professor)
GET /api/professor/gym/sessions Get gym sessions Yes (Professor)
POST /api/professor/gym/sessions/:sessionId/register Register for gym session Yes (Professor)
GET /api/professor/payment/registrations Get payment registrations Yes
GET /api/professor/payment/paid-registrations Get paid registrations Yes
GET /api/professor/payment/wallet-balance Get wallet balance Yes
POST /api/professor/payment/process Process payment Yes
POST /api/professor/payment/refund Cancel and refund Yes
GET /api/professor/certificates/completed-workshops Get completed workshops Yes
POST /api/professor/certificates/send Send certificate Yes
GET /api/professor/certificates/download Download certificate Yes

Staff Routes (/api/staff)

Method Endpoint Description Auth Required
GET /api/staff/events Get all available events Yes (Staff/TA/Professor)
GET /api/staff/gym/sessions/month/:year/:month Get gym sessions by month Yes (Staff/TA/Professor)
POST /api/staff/gym/sessions/:sessionId/register Register for gym session Yes (Staff/TA/Professor)
GET /api/staff/payment/registrations Get payment registrations Yes
GET /api/staff/payment/paid-registrations Get paid registrations Yes
GET /api/staff/payment/wallet-balance Get wallet balance Yes
POST /api/staff/payment/process Process payment Yes
POST /api/staff/payment/refund Cancel and refund Yes
GET /api/staff/certificates/completed-workshops Get completed workshops Yes
POST /api/staff/certificates/send Send certificate Yes
GET /api/staff/certificates/download Download certificate Yes

Vendor Routes (/api/vendor)

Method Endpoint Description Auth Required
GET /api/vendor/vendor/bazaars/upcoming View upcoming bazaars Yes (Vendor)
POST /api/vendor/vendor/bazaars/apply Apply for bazaar Yes (Vendor)
POST /api/vendor/vendor/booths/apply Apply for booth Yes (Vendor)
GET /api/vendor/vendor/applications/accepted View accepted applications Yes (Vendor)
GET /api/vendor/vendor/applications/pending-rejected View pending/rejected applications Yes (Vendor)
POST /api/vendor/vendor/applications/cancel Cancel application Yes (Vendor)
POST /api/vendor/vendor/applications/pay Pay for accepted application Yes (Vendor)

Admin Routes (/api/admin)

Method Endpoint Description Auth Required
GET /api/admin/staff/pending Get pending staff applications Yes (Admin)
POST /api/admin/assign-role Assign role to staff Yes (Admin)
GET /api/admin/verify/:token Verify staff email No
GET /api/admin/staff/all Get all staff Yes (Admin)
GET /api/admin/admins/all Get all admins Yes (Admin)
GET /api/admin/eventsOffice/all Get all Events Office staff Yes (Admin)
POST /api/admin/admins/create Create admin Yes (Admin)
POST /api/admin/eventsOffice/create Create Events Office account Yes (Admin)
DELETE /api/admin/admins/:adminId Delete admin Yes (Admin)
DELETE /api/admin/eventsOffice/:adminId Delete Events Office account Yes (Admin)
GET /api/admin/users/all Get all users Yes (Admin)
POST /api/admin/users/block Block user Yes (Admin)
POST /api/admin/users/unblock Unblock user Yes (Admin)
GET /api/admin/events/upcoming Get upcoming events Yes (Admin)
GET /api/admin/events/pending Get pending events Yes (Admin)
DELETE /api/admin/events/:eventId Delete event Yes (Admin)
GET /api/admin/vendors/pending Get pending vendors Yes (Admin)
GET /api/admin/vendors/all Get all vendor applications Yes (Admin)
POST /api/admin/vendors/applications/:applicationId/attendees/:attendeeIndex/generate-qr Generate attendee QR Yes (Admin)
POST /api/admin/vendors/approve Approve vendor Yes (Admin)
POST /api/admin/vendors/reject Reject vendor Yes (Admin)

Events Office Routes

Bazaars (/api/events-office/bazaars)

Method Endpoint Description Auth Required
POST /api/events-office/bazaars Create bazaar Yes (Events Office/Admin)

Trips (/api/events-office/trips)

Method Endpoint Description Auth Required
POST /api/events-office/trips Create trip Yes (Events Office/Admin)
PUT /api/events-office/trips/:id Edit trip Yes (Events Office/Admin)
PATCH /api/events-office/trips/:id Edit trip Yes (Events Office/Admin)

Workshops (/api/events-office/workshops)

Method Endpoint Description Auth Required
PATCH /api/events-office/workshops/:id/publish Publish workshop Yes
PATCH /api/events-office/workshops/:id/reject Reject workshop Yes
PATCH /api/events-office/workshops/:id/request-edits Request edits Yes (Events Office/Admin)

Gym Sessions (/api/events-office/gym-sessions)

Method Endpoint Description Auth Required
POST /api/events-office/gym-sessions Create gym session Yes (Events Office/Admin)
GET /api/events-office/gym-sessions Get all gym sessions Yes
GET /api/events-office/gym-sessions/month/:year/:month Get gym sessions by month Yes
GET /api/events-office/gym-sessions/:id Get gym session by ID Yes
PATCH /api/events-office/gym-sessions/:id Edit gym session Yes (Events Office/Admin)
PATCH /api/events-office/gym-sessions/:id/cancel Cancel gym session Yes (Events Office/Admin)

Notification Routes (/api/notifications)

Method Endpoint Description Auth Required
GET /api/notifications Get all notifications Yes
GET /api/notifications/unread-count Get unread count Yes
PATCH /api/notifications/:id/read Mark notification as read Yes
PATCH /api/notifications/mark-all-read Mark all as read Yes

Visitor Routes (/api/visitors)

Method Endpoint Description Auth Required
POST /api/visitors/register/:eventId Register visitor No
POST /api/visitors/verify Verify QR token No
GET /api/visitors/:visitorId Get visitor details Yes
GET /api/visitors/:visitorId/qr Get visitor QR code Yes
GET /api/visitors/event/:eventId Get event visitors Yes (Events Office/Admin)
GET /api/visitors/event/:eventId/export-qrs Export visitor QR codes Yes (Events Office/Admin)
POST /api/visitors/:visitorId/checkin Check in visitor Yes (Events Office/Admin)

Vendor Poll Routes (/api/vendor-polls)

Method Endpoint Description Auth Required
GET /api/vendor-polls/find-overlapping Find overlapping booths Yes (Events Office/Admin)
POST /api/vendor-polls/create Create poll Yes (Events Office/Admin)
GET /api/vendor-polls Get all polls Yes (Events Office/Admin)
GET /api/vendor-polls/active/list Get active polls Yes
GET /api/vendor-polls/:pollId Get poll details Yes
GET /api/vendor-polls/:pollId/results Get poll results Yes
POST /api/vendor-polls/:pollId/vote Submit vote Yes
POST /api/vendor-polls/:pollId/close Close poll Yes (Events Office/Admin)
DELETE /api/vendor-polls/:pollId Delete poll Yes (Events Office/Admin)

Loyalty Program Routes (/api/loyalty)

Method Endpoint Description Auth Required
POST /api/loyalty/apply Apply for loyalty program Yes (Vendor)
POST /api/loyalty/cancel Cancel loyalty program Yes (Vendor)
GET /api/loyalty/my-status Get my loyalty status Yes (Vendor)
GET /api/loyalty/partners Get all loyalty partners Yes
GET /api/loyalty/pending Get pending applications Yes (Admin/Events Office)
POST /api/loyalty/:applicationId/approve Approve application Yes (Admin/Events Office)
POST /api/loyalty/:applicationId/reject Reject application Yes (Admin/Events Office)

Favorites Routes (/api/favorites)

Method Endpoint Description Auth Required
GET /api/favorites Get favorite events Yes
POST /api/favorites Add favorite event Yes
DELETE /api/favorites/:eventId Remove favorite event Yes

Report Routes (/api/reports)

Method Endpoint Description Auth Required
GET /api/reports/attendees Get attendees report Yes (Events Office/Admin)
GET /api/reports/sales Get sales report Yes (Events Office/Admin)

Tests

Test Structure

Currently, the project does not have automated test suites implemented. However, the following test files exist for manual testing:

  • backend/test-event-api.js - Manual API testing for events
  • backend/test-reports-api.js - Manual API testing for reports
  • backend/seed-test.js - Database seeding for testing

Running Manual Tests

  1. Test Event API:

    cd backend
    node test-event-api.js
  2. Test Reports API:

    cd backend
    node test-reports-api.js
  3. Test Email Configuration:

    cd backend
    node scripts/test-email-config.js

Test Coverage Areas

The following areas should be covered in future test implementations:

  • Unit Tests:

    • Controllers (event, registration, payment, vendor)
    • Middleware (authentication, authorization)
    • Services (email, reminders)
    • Utilities (validation, parsing)
  • Integration Tests:

    • API endpoints
    • Database operations
    • File upload handling
    • Email sending
  • End-to-End Tests:

    • User registration and login flow
    • Event creation and registration flow
    • Payment processing flow
    • Vendor application flow

Future Test Implementation

To add comprehensive testing:

  1. Install testing frameworks:

    npm install --save-dev jest supertest @testing-library/react
  2. Create test directories:

    • backend/__tests__/ - Backend tests
    • frontend/Acl/src/__tests__/ - Frontend tests
  3. Add test scripts to package.json:

    {
      "scripts": {
        "test": "jest",
        "test:watch": "jest --watch",
        "test:coverage": "jest --coverage"
      }
    }

How to Use the System

For Students

  1. Registration:

    • Navigate to /register
    • Select "Student" role
    • Fill in registration form (name, email, password, student ID)
    • Verify email via link sent to your email
    • Login at /login
  2. Browse Events:

    • View upcoming events on dashboard
    • Use search to find specific events
    • Click on event to view details
  3. Register for Events:

    • Go to "Register" page
    • Select available workshop or trip
    • Complete registration form
    • Proceed to payment
  4. Make Payments:

    • Go to "Payment" page
    • View pending registrations
    • Add payment method
    • Process payment from wallet balance
  5. Reserve Courts:

    • Go to "Courts" page
    • View available time slots
    • Select court and time slot
    • Complete reservation
  6. View Certificates:

    • Go to "Certificates" page
    • View completed workshops
    • Download or email certificates

For Professors

  1. Create Workshop:

    • Navigate to "Create Workshop"
    • Fill in workshop details (name, description, date, time, location, capacity)
    • Submit for Events Office approval
  2. Manage Workshops:

    • View "My Workshops" to see created workshops
    • Edit workshop details
    • View participants list
  3. Register for Events:

    • Browse available events
    • Register for workshops, trips, or gym sessions
    • Make payments as needed

For Vendors

  1. Registration:

    • Navigate to /register
    • Select "Vendor" role
    • Fill in business information
    • Upload logo and tax card
    • Verify email and wait for admin approval
  2. Apply for Bazaars:

    • View upcoming bazaars
    • Click "Apply for Bazaar"
    • Fill in application form
    • Upload attendee IDs (up to 5)
    • Submit application
  3. Apply for Booths:

    • Navigate to "Apply Booth"
    • Fill in booth application
    • Upload required documents
    • Submit application
  4. Manage Applications:

    • View application status
    • Pay for accepted applications
    • Cancel pending applications
  5. Loyalty Program:

    • Apply to become a loyalty partner
    • View application status
    • Manage loyalty program participation

For Events Office Staff

  1. Create Events:

    • Create Bazaars: Navigate to "Create Bazaar"
    • Create Trips: Navigate to "Create Trip"
    • Create Conferences: Navigate to "Create Conference"
    • Create Gym Sessions: Navigate to "Create Gym Session"
  2. Manage Events:

    • View pending events requiring approval
    • Approve or reject professor-created workshops
    • Archive past events
    • View event registrations
  3. Manage Vendors:

    • Review pending vendor applications
    • Approve or reject applications
    • Generate QR codes for vendor attendees
  4. Manage Visitors:

    • View visitor registrations for events
    • Export visitor QR codes
    • Check in visitors at events
  5. Create Polls:

    • Navigate to "Vendor Polls"
    • Create polls for vendor selection
    • View poll results
    • Close polls when voting ends
  6. Generate Reports:

    • View attendee reports
    • View sales reports
    • Export data as needed

For Administrators

  1. User Management:

    • View all users
    • Block or unblock users
    • Manage staff accounts
  2. Staff Management:

    • Review pending staff applications
    • Assign roles to staff
    • Verify staff accounts
    • Create admin and Events Office accounts
  3. Vendor Management:

    • Review all vendor applications
    • Approve or reject vendors
    • Generate attendee QR codes
  4. System Oversight:

    • View all events
    • Delete events if needed
    • Access comprehensive reports
    • Manage loyalty program applications

For External Visitors

  1. Register for Event:

    • Navigate to visitor registration link (provided by event organizer)
    • Fill in visitor registration form
    • Receive QR code via email
  2. Check-in at Event:

    • Present QR code at event entrance
    • Staff will scan and verify QR code
    • Complete check-in process

Contribute Guidelines

We welcome contributions to the Akwa-Team project! Please follow these guidelines:

Getting Started

  1. Fork the repository

  2. Create a feature branch:

    git checkout -b feature/your-feature-name
  3. Make your changes:

    • Follow the existing code style
    • Write clear, descriptive commit messages
    • Test your changes thoroughly
  4. Commit your changes:

    git commit -m "Add: Description of your feature"
  5. Push to your fork:

    git push origin feature/your-feature-name
  6. Create a Pull Request:

    • Provide a clear description of changes
    • Reference any related issues
    • Include screenshots if UI changes

Code Standards

  • JavaScript/Node.js: Follow ESLint configuration
  • React: Use functional components with hooks
  • Naming: Use descriptive, camelCase variable names
  • Comments: Add comments for complex logic
  • Error Handling: Always handle errors appropriately

Pull Request Process

  1. Ensure your code follows the project's style guidelines
  2. Update documentation if needed
  3. Test your changes locally
  4. Ensure all existing tests pass
  5. Request review from maintainers

Reporting Issues

When reporting bugs or requesting features:

  • Use clear, descriptive titles
  • Provide steps to reproduce (for bugs)
  • Include expected vs actual behavior
  • Add screenshots if applicable
  • Specify environment details (OS, Node version, etc.)

Credits

Akwa-Team - Developed for the German University in Cairo (GUC)

Special Thanks

A special thanks to our amazing product manager Nada Ibrahim for her wonderful guidance and help.

Team Members

  • Abobakr Hossam (Scrum Master)
  • Amr Khalefa
  • Youssef Elhamy
  • Amr Haitham
  • Abubakr Khaled
  • Ali Mohamed
  • Ahmed Adham
  • Salma Khaled
  • Rodaina Ashraf
  • Basmala Mohamed

Technologies & Libraries

  • Built with Node.js, Express, React, and MongoDB
  • UI components with Tailwind CSS and Framer Motion
  • Icons provided by Lucide React
  • Email service powered by Nodemailer
  • QR code generation using QRCode library
  • PDF generation with Puppeteer

Special Features

  • Automated event reminders via node-cron
  • QR code-based visitor management
  • Community voting system for vendor selection
  • Loyalty program integration
  • Certificate generation and distribution
  • Comprehensive reporting system

License

This project is developed for academic purposes as part of the ACL (Advanced Computer Lab) course at the German University in Cairo.

Copyright © 2024 Akwa-Team

All rights reserved. This project and its source code are proprietary and confidential. Unauthorized copying, modification, distribution, or use of this project, via any medium, is strictly prohibited without express written permission from the project maintainers.


For questions or support, please contact the development team or refer to the project documentation.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 11