Skip to content

Amal-0807/Lab-tutor

Repository files navigation

CodeTutor: Comprehensive Technical Documentation

Table of Contents

  1. Project Overview
  2. System Architecture
  3. Backend (Django) Components
  4. Frontend (React) Components
  5. Judge0 Integration
  6. Database Schema
  7. API Endpoints
  8. Authentication & Authorization
  9. Deployment Configuration
  10. Management Commands
  11. File Structure Analysis
  12. Development Workflow

Project Overview

CodeTutor is a comprehensive lab management platform designed for educational institutions to manage programming courses, exercises, and automated code evaluation. The system integrates with Judge0 for real-time code execution and provides a complete learning management solution.

Core Features

  • Multi-Role System: Students, Faculty, and Administrators
  • Automated Code Evaluation: Integration with Judge0 for 40+ programming languages
  • Exercise Management: Pre-quiz, coding problems, and viva assessments
  • Real-time Monitoring: Live progress tracking and instant feedback
  • Plagiarism Detection: Automated similarity checking for submissions
  • Certificate Generation: PDF reports and certificates
  • Video Tutorials: Interactive learning with embedded questions
  • LDAP Integration: University authentication system

System Architecture

Technology Stack

  • Frontend: React 18.3.1, Material-UI, Chakra UI, Monaco Editor
  • Backend: Django 5.0.6, Django REST Framework
  • Database: PostgreSQL (Production), SQLite (Development)
  • Code Execution: Judge0 v1.13.1
  • Authentication: Django-auth-LDAP, JWT
  • Containerization: Docker, Docker Compose
  • Web Server: NGINX with SSL/TLS
  • Code Quality: SonarQube
  • File Processing: LaTeX to PDF conversion

Backend (Django) Components

Core Applications

1. User Module (/backend/user/)

Purpose: User management, authentication, and department organization

Models:

  • User: Extended AbstractUser with faculty flag and department relation
  • Department: Organizational units

Key Features:

  • LDAP integration for university authentication
  • Automatic department synchronization
  • Username case normalization

Files:

user/
├── models.py          # User and Department models
├── views.py           # Authentication endpoints
├── serializers.py     # User data serialization
├── permissions.py     # Custom permission classes
├── admin.py           # Django admin configuration
└── management/
    └── commands/
        ├── sync_users.py        # LDAP user synchronization
        ├── check_plagiarism.py  # Plagiarism detection
        └── populate_department.py

2. API Module (/backend/api/)

Purpose: Core business logic, course management, and code evaluation

Models (25+ models including):

  • Course: Course definitions and metadata
  • Exercise: Lab exercises within courses
  • QuestionBank: Programming problems with test cases
  • TestCase: Input/output test cases for problems
  • Submission: Student code submissions with results
  • CourseOffered: Course instances for specific batches
  • BatchStudents: Student enrollment management
  • Viva/PreQuizz: Assessment components
  • Judge0: Programming language configurations

Key Features:

  • Automated code evaluation with Judge0
  • Test case management and execution
  • Batch processing for multiple submissions
  • Video tutorial with interactive questions
  • Plagiarism detection workflow
  • PDF report generation

Files:

api/
├── models.py          # 25+ data models
├── views.py           # 50+ API endpoints (1364 lines)
├── serializers.py     # Data serialization/validation
├── utils.py           # Helper functions for grading
├── admin.py           # Django admin interfaces
├── urls.py            # API routing configuration
└── management/
    └── commands/       # 12 management commands
        ├── populate_judge0.py    # Language setup
        ├── populate_course.py    # Course data
        ├── populate_problem.py   # Problem import
        ├── export_problems.py    # Data export
        └── add_dummy_data.py     # Test data generation

3. Faculty Module (/backend/faculty/)

Purpose: Faculty-specific functionality and course management

Database Configuration

Development: SQLite (db.sqlite3) Production: PostgreSQL with Docker

# settings.py excerpt
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": "db.sqlite3",
    }
}

Key Backend Features

Judge0 Integration

  • Supports 40+ programming languages
  • Configurable time/memory limits
  • Batch submission processing
  • Real-time execution status tracking

Assessment System

  1. Pre-Quiz: Multiple choice questions before lab
  2. Coding Problems: Programming challenges with test cases
  3. Viva: Post-lab assessment questions

LDAP Authentication

# Authentication backends
AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
]

Frontend (React) Components

Application Structure

frontend/src/
├── index.js           # App entry point with routing
├── pages/             # Main application pages
├── components/        # Reusable UI components
├── context/           # Global state management
└── assets/            # Static resources

Core Pages (/frontend/src/pages/)

1. Login.jsx

  • University LDAP authentication
  • JWT token management
  • Role-based routing

2. CoursesList.jsx

  • Student enrolled courses
  • Course metadata display
  • Navigation to exercises

3. Exercises.jsx

  • Exercise listing for courses
  • Progress tracking
  • Assessment type indicators

4. Coding.jsx (500+ lines)

  • Monaco code editor integration
  • Multi-language support
  • Real-time code execution
  • Test case visualization
  • Submission history
  • File upload for code submission

5. Faculty.jsx

  • Batch management
  • Student enrollment
  • Excel file processing for bulk operations

6. Problem.jsx

  • Problem statement rendering
  • Test case display
  • Coding environment integration

7. StudentMarkSheet.jsx

  • Grade visualization
  • Progress reports
  • Certificate generation

Reusable Components (/frontend/src/components/)

1. Header.jsx

  • Navigation bar
  • User authentication status
  • Role-based menu options

2. Question.jsx (300+ lines)

  • Quiz question rendering
  • Multiple choice interface
  • Timer functionality
  • Answer validation
  • Progress tracking

3. Viva.jsx

  • Post-lab assessment
  • Question randomization
  • Keyboard/context menu restrictions
  • Auto-submission

4. Tutorial.jsx

  • Video playback
  • Interactive questions
  • Progress tracking

5. FacultyBatch.jsx

  • Batch creation interface
  • Student management
  • Excel import functionality

Context Providers (/frontend/src/context/)

State Management

// Global state contexts
- CoursesContext.js    # Course selection state
- BatchesContext.js    # Batch management
- ExercisesContext.js  # Exercise data
- QuestionContext.js   # Question navigation

UI Libraries Integration

  • Material-UI: Primary component library
  • Chakra UI: Alternative components
  • Monaco Editor: Code editing interface
  • React Router: Navigation management

Judge0 Integration

Two Judge0 Instances

1. Standard Judge0 (/judge0-v1.13.1/)

  • Port: 2358
  • Languages: Standard programming languages
  • Configuration: Basic limits and settings

2. Extra Judge0 (/judge0-v1.13.1-extra/)

  • Port: 2359 (if configured)
  • Languages: Extended language support
  • Features: Additional tools and compilers

Configuration Files

judge0.conf Key Settings:

# Resource Limits
CPU_TIME_LIMIT=5              # Seconds
MEMORY_LIMIT=128000           # KB
WALL_TIME_LIMIT=10            # Seconds
MAX_PROCESSES_AND_OR_THREADS=60

# Database Configuration
POSTGRES_HOST=db
POSTGRES_USER=judge0
POSTGRES_PASSWORD=8PqhgXSyjcUAWrhs64ehKkRRbuUweAsC

# Redis Configuration
REDIS_HOST=redis
REDIS_PASSWORD=PsBxZ5sL3JgVw66RGR9fbgsCkya3urhL

Supported Languages (40+)

  • C/C++: Multiple GCC versions
  • Python: 2.7.17, 3.8.1
  • Java: OpenJDK 13.0.1
  • JavaScript: Node.js 12.14.0
  • And 35+ more languages

Docker Compose Structure

services:
  server:     # Judge0 API server
  workers:    # Background job processors
  db:         # PostgreSQL database
  redis:      # Cache and queue management

Database Schema

Core Entities and Relationships

User Management

User (AbstractUser extension)
├── id, username, email, is_faculty
├── dept → Department
└── Related: BatchStudents, Submissions

Department
├── id, name
└── Related: Users, CourseOffered

Course Structure

Course
├── id, name, course_id, description, sem_available
└── Related: Exercises, QuestionBank, CourseOffered

Exercise
├── id, exercise_name, order
├── course → Course
└── Related: QuestionBank, Viva, PreQuizz

CourseOffered
├── id, batch, semester, year, is_active
├── course → Course
├── faculty → User
├── offered_department → Department
└── Related: BatchStudents, Submissions

Assessment System

QuestionBank
├── id, title, question, difficulty
├── language → Judge0
├── course → Course
├── exercise → Exercise
└── Related: TestCase, Submissions

TestCase
├── id, input, expected_output, hidden
├── question → QuestionBank
└── Related: TestCasesSolved

Submission
├── id, code, mark, is_accepted, created_at
├── user → User
├── problem → QuestionBank
├── batch → CourseOffered
└── result → ManyToMany(TestCasesSolved)

Judge0 Configuration

Judge0
├── id, language, lang_id, date_time
└── Related: QuestionBank

Key Model Features

Unique Constraints

  • Submission: (user, problem, batch)
  • VivaAnswered: (user, exercise, viva)
  • ExerciseMarks: (batch, student, exercise)

JSON Fields

  • TestCasesSolved.judge0result: Stores Judge0 execution results
  • RunTestCasesSolved.judge0result: For code runs (non-submissions)

File Uploads

  • Record.record: Student submission recordings
  • Basic_Tutorial.video: Tutorial videos

API Endpoints

Authentication Endpoints (/user/)

POST /user/login/              # LDAP authentication
POST /user/refresh/            # JWT token refresh
GET  /user/profile/            # User profile data

Core API Endpoints (/api/)

Course Management

GET  /api/courses/                        # Student enrolled courses
GET  /api/exercise/{batch_id}/            # Exercises for batch
GET  /api/exercises-questions/{batch_id}/ # Questions for batch exercises
GET  /api/excersise_data/{exercise_id}/   # Exercise details

Problem Solving

GET  /api/question/{question_id}/         # Problem details
POST /api/code-submission/{question_id}/  # Submit code
POST /api/file-submission/{question_id}/  # Submit file
POST /api/code-run/{question_id}/         # Run code (test)
POST /api/file-run/{question_id}/         # Run file (test)

Assessment

GET  /api/viva/{exercise_id}/             # Viva questions
POST /api/viva/{exercise_id}/             # Submit viva answers

Multimedia

GET  /api/tutorial/{pk}/                  # Video tutorial
GET  /api/basic-tutorials/               # Tutorial list
POST /api/record/{question_id}/          # Save recording

Utilities

POST /api/process_tex/                   # LaTeX to PDF conversion

Faculty Endpoints (/faculty/)

GET  /faculty/batches/                   # Faculty batches
POST /faculty/create-batch/              # Create new batch
GET  /faculty/students/{batch_id}/       # Batch students
POST /faculty/add-students/              # Add students to batch
GET  /faculty/marks/{batch_id}/          # Student marks

Authentication & Authorization

LDAP Integration

# settings.py
AUTH_LDAP_SERVER_URI = "ldap://your-ldap-server.com"
AUTH_LDAP_BIND_DN = "CN=bind-user,CN=users,DC=domain,DC=com"
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "CN=users,DC=domain,DC=com",
    ldap.SCOPE_SUBTREE,
    "(sAMAccountName=%(user)s)"
)

Permission Classes

# Custom permissions
IsFaculty              # Faculty-only access
IsAuthenticated        # Logged-in users only

JWT Configuration

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
    'ROTATE_REFRESH_TOKENS': True,
}

Deployment Configuration

Docker Setup

Frontend Dockerfile

FROM node:21.7.1-bullseye
WORKDIR /app/frontend/
COPY package*.json /app/frontend/
RUN npm install -f
COPY . /app/frontend
CMD ["npm","start"]

Backend Dockerfile

FROM python:3.10
WORKDIR /app/backend
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

NGINX Configuration

server {
    listen 443 ssl;
    server_name Codetutor.karunya.edu;
    ssl_certificate /etc/pki/nginx/karunya.edu.crt;
    ssl_certificate_key /etc/pki/nginx/karunya.edu.key;
    
    location / {
        proxy_pass http://0.0.0.0:8086;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

SSL Certificates

  • Location: /backend/certificates/
  • Files: karunya.edu.crt, karunya.edu.key

Environment Configuration

  • Frontend: .env files for API endpoints
  • Backend: .env files for database and LDAP settings

Management Commands

Database Population Commands

1. populate_judge0.py

Purpose: Initialize Judge0 language configurations Usage: python manage.py populate_judge0 Function: Creates Judge0 model entries for 40+ programming languages

2. populate_course.py

Purpose: Create course entries Usage: python manage.py populate_course

3. populate_exercise.py

Purpose: Create exercise data Usage: python manage.py populate_exercise

4. populate_problem.py

Purpose: Import problems from JSON files Usage: python manage.py populate_problem

5. populate_users.py

Purpose: Create test user accounts Usage: python manage.py populate_users

User Management Commands

6. sync_users.py

Purpose: Synchronize users from LDAP via CSV Usage: python manage.py sync_users users.csv Features:

  • LDAP user lookup
  • Automatic batch assignment
  • Department synchronization

7. populate_department.py

Purpose: Create department structures Usage: python manage.py populate_department

Assessment Commands

8. populate_viva.py

Purpose: Create viva questions Usage: python manage.py populate_viva

9. populate_prequizz.py

Purpose: Create pre-quiz questions Usage: python manage.py populate_prequizz

Data Management Commands

10. export_problems.py

Purpose: Export problem data to JSON Usage: python manage.py export_problems

11. add_dummy_data.py

Purpose: Generate test data for development Usage: python manage.py add_dummy_data

12. check_plagiarism.py

Purpose: Extract and analyze code submissions for plagiarism Usage: python manage.py check_plagiarism Features:

  • Code extraction by language
  • Temporary file organization
  • Similarity analysis preparation

File Structure Analysis

Root Directory

Lab-Tutor/
├── README.md                    # Project documentation
├── data.json                    # LaTeX configuration
├── package.json                 # Node.js metadata
├── .gitignore                   # Git exclusions
├── backend/                     # Django application
├── frontend/                    # React application
├── judge0-v1.13.1/             # Standard Judge0
├── judge0-v1.13.1-extra/       # Extended Judge0
├── Doc/                         # Documentation
└── snipert/                     # Utility scripts

Backend Structure (/backend/)

backend/
├── manage.py                    # Django management script
├── requirements.txt             # Python dependencies (40 packages)
├── db.sqlite3                   # Development database
├── Dockerfile                   # Container configuration
├── karunya_logo.png            # University branding
├── sample.tex                   # LaTeX template
├── department.txt              # Department data
├── backend/                     # Django project settings
│   ├── settings.py             # Configuration (255 lines)
│   ├── urls.py                 # URL routing
│   ├── wsgi.py                 # WSGI application
│   └── asgi.py                 # ASGI application
├── api/                        # Core API application
│   ├── models.py               # Data models (454 lines)
│   ├── views.py                # API endpoints (1364 lines)
│   ├── serializers.py          # Data serialization
│   ├── utils.py                # Helper functions
│   ├── admin.py                # Admin interface
│   ├── urls.py                 # API routing
│   └── management/commands/    # 12 management commands
├── user/                       # User management
│   ├── models.py               # User and Department models
│   ├── views.py                # Authentication views
│   ├── permissions.py          # Custom permissions
│   └── management/commands/    # User utilities
├── faculty/                    # Faculty-specific features
├── certificates/               # SSL certificates
├── data/                       # Problem and exercise data
│   ├── problems_export.json    # Problem definitions (669 lines)
│   ├── excersise/             # Exercise data files
│   └── problems/              # Problem collections
├── basic_tutorial/             # Video content storage
├── record/                     # Student recordings (PDF format)
└── templates/                  # Django templates

Frontend Structure (/frontend/)

frontend/
├── package.json                # Dependencies (50+ packages)
├── webpack.config.js           # Build configuration
├── Dockerfile                  # Container setup
├── public/                     # Static assets
│   ├── index.html             # App entry point
│   ├── manifest.json          # PWA configuration
│   └── *.png                  # Icons and logos
└── src/                       # Source code
    ├── index.js               # App initialization with routing
    ├── index.css              # Global styles
    ├── assets/                # Images and resources
    ├── pages/                 # 7 main application pages
    │   ├── Login.jsx          # Authentication
    │   ├── CoursesList.jsx    # Course listing
    │   ├── Exercises.jsx      # Exercise navigation
    │   ├── Coding.jsx         # Code editor (500+ lines)
    │   ├── Faculty.jsx        # Faculty dashboard
    │   ├── Problem.jsx        # Problem viewer
    │   └── StudentMarkSheet.jsx # Grade reports
    ├── components/            # 14 reusable components
    │   ├── Header.jsx         # Navigation bar
    │   ├── Question.jsx       # Quiz interface (300+ lines)
    │   ├── Viva.jsx          # Assessment component
    │   ├── Tutorial.jsx       # Video tutorials
    │   ├── FacultyBatch.jsx  # Batch management
    │   └── *.jsx             # Additional components
    └── context/              # 5 state providers
        ├── CoursesContext.js  # Course state
        ├── BatchesContext.js  # Batch management
        ├── ExercisesContext.js # Exercise data
        ├── QuestionContext.js # Question navigation
        └── SideBarContext.jsx # UI state

Judge0 Configuration

judge0-v1.13.1/
├── docker-compose.yml          # Standard setup
└── judge0.conf                 # Configuration (350+ lines)

judge0-v1.13.1-extra/
├── docker-compose.yml          # Extended setup
├── docker-compose.yaml.bak     # Backup configuration
└── judge0.conf                 # Extended configuration

Documentation (/Doc/)

Doc/
├── API.postman_collection.json # API testing (2606 lines)
├── Deployment.md               # Production setup guide
├── Development.md              # Development instructions
├── index.html                  # Documentation portal
└── Note                        # Additional notes

Development Workflow

Prerequisites

  • Python 3.8+: Backend development
  • Node.js v20: Frontend development
  • Docker: Judge0 and containerization
  • Git: Version control

Local Development Setup

1. Environment Preparation

# Clone repository
git clone https://git.karunya.edu/computer-technology-centre/Codetutor
cd Lab-Tutor

# Set up Judge0
cd judge0-v1.13.1
docker-compose up -d db redis
sleep 10
docker-compose up -d
cd ..

2. Backend Setup

cd backend
python -m venv venv
source ./venv/bin/activate  # Linux
pip install -r requirements.txt

# Database setup
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

# Populate initial data
python manage.py populate_judge0
python manage.py populate_course
python manage.py populate_exercise

# Start development server
python manage.py runserver

3. Frontend Setup

cd frontend
npm install -f
npm start

Development Ports

Key Development Files

Environment Configuration

# Frontend .env
REACT_APP_API_BASE_URL=http://localhost:8000

# Backend .env
DATABASE_URL=sqlite:///db.sqlite3
LDAP_SERVER_URI=ldap://your-server.com
DEBUG=True

Common Development Commands

# Backend
python manage.py shell          # Django shell
python manage.py test           # Run tests
python manage.py collectstatic  # Static files

# Frontend
npm test                        # Run tests
npm run build                   # Production build
npm run eject                   # Expose configuration

Data Management

Problem Import Process

  1. Create JSON: Use problems_export.json format
  2. Import: python manage.py populate_problem
  3. Verify: Check Django admin interface

User Management

  1. LDAP Sync: python manage.py sync_users users.csv
  2. Department Setup: python manage.py populate_department
  3. Batch Creation: Use Faculty interface

Code Quality Tools

SonarQube Integration

# Start SonarQube
docker run -d -p 9000:9000 --name sonarqube sonarqube

# Run analysis
docker run --rm \
  -v $(pwd):/usr/src \
  -e SONAR_HOST_URL="http://localhost:9000" \
  -e SONAR_LOGIN="<TOKEN>" \
  sonarsource/sonar-scanner-cli \
  -Dsonar.projectKey=CodeTutor \
  -Dsonar.sources=/usr/src

Debugging and Troubleshooting

Common Issues

  1. Judge0 Connection: Check Docker containers
  2. Database Errors: Verify migrations
  3. Frontend Build: Clear node_modules cache
  4. LDAP Issues: Check server connectivity

Logging

  • Django: Console and file logging
  • React: Browser console
  • Judge0: Docker logs

Security Considerations

Authentication Security

  • LDAP Integration: Secure university authentication
  • JWT Tokens: Short-lived access tokens
  • Permission Classes: Role-based access control

Code Execution Security

  • Sandboxing: Judge0 isolate containers
  • Resource Limits: CPU, memory, time constraints
  • Network Restrictions: Isolated execution environment

Data Protection

  • HTTPS: SSL/TLS encryption
  • Input Validation: Serializer validation
  • SQL Injection: Django ORM protection

File Upload Security

  • Type Validation: File extension checking
  • Size Limits: Upload size restrictions
  • Virus Scanning: Consider integration

Performance Optimization

Database Optimization

  • Indexing: Key foreign key relationships
  • Query Optimization: Select_related, prefetch_related
  • Connection Pooling: PostgreSQL connections

Caching Strategy

  • Redis: Judge0 queue management
  • Django Cache: Session and query caching
  • Frontend: React memoization

Scalability Considerations

  • Load Balancing: NGINX upstream servers
  • Database Scaling: Read replicas
  • Judge0 Scaling: Multiple worker instances

Monitoring and Analytics

System Monitoring

  • Health Checks: API endpoint monitoring
  • Resource Usage: CPU, memory, disk space
  • Error Tracking: Exception logging

User Analytics

  • Submission Tracking: Success rates
  • Performance Metrics: Execution times
  • Usage Patterns: Peak hours analysis

Educational Analytics

  • Learning Progress: Exercise completion rates
  • Difficulty Analysis: Problem success rates
  • Plagiarism Reports: Similarity patterns

This comprehensive documentation covers all aspects of the CodeTutor platform. For specific implementation details, refer to the individual source files and their inline documentation.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy