System Architecture

Explore the microservices architecture of yLearn

12 Healthy
yLearn LMS - Context Level
View Source Code
C4Context
    title yLearn LMS - System Context Diagram
    
    Person(student, "Student", "A user of the yLearn LMS")
    Person(instructor, "Instructor", "Creates and manages courses")
    Person(admin, "Administrator", "Manages the system")
    
    System(yLearn, "yLearn LMS", "Learning Management System for university settings")
    
    System_Ext(email, "Email System", "Sends notifications to users")
    System_Ext(turnItIn, "TurnItIn", "Plagiarism detection service")
    
    Rel(student, yLearn, "Uses")
    Rel(instructor, yLearn, "Manages courses")
    Rel(admin, yLearn, "Administers")
    Rel(yLearn, email, "Sends emails via")
    Rel(yLearn, turnItIn, "Checks submissions with")
yLearn LMS - Container Level
View Source Code
C4Container
    title yLearn LMS - Container Diagram
    
    Person(student, "Student", "A user of the yLearn LMS")
    Person(instructor, "Instructor", "Creates and manages courses")
    
    System_Boundary(yLearn, "yLearn LMS") {
      Container(webApp, "Web Application", "React", "Provides the user interface for the LMS")
      Container(apiGateway, "API Gateway", "AWS API Gateway", "Routes requests to appropriate microservices")
      
      Container(userService, "User Service", "Node.js", "Manages user authentication and profiles")
      Container(courseService, "Course Service", "Node.js", "Manages course information and enrollments")
      Container(assessmentService, "Assessment Service", "Node.js", "Manages assignments, quizzes, and exams")
      Container(gradingService, "Grading Service", "Node.js", "Processes and stores grades")
      Container(notificationService, "Notification Service", "Node.js", "Sends notifications to users")
      
      ContainerDb(userDb, "User Database", "PostgreSQL", "Stores user data")
      ContainerDb(courseDb, "Course Database", "PostgreSQL", "Stores course data")
      ContainerDb(assessmentDb, "Assessment Database", "PostgreSQL", "Stores assessment data")
      ContainerDb(gradeDb, "Grade Database", "PostgreSQL", "Stores grade data")
      
      Container(messageQueue, "Message Queue", "AWS SQS", "Handles asynchronous communication between services")
    }
    
    System_Ext(email, "Email System", "Sends notifications to users")
    System_Ext(turnItIn, "TurnItIn", "Plagiarism detection service")
    
    Rel(student, webApp, "Uses")
    Rel(instructor, webApp, "Uses")
    Rel(webApp, apiGateway, "Makes API calls to")
    
    Rel(apiGateway, userService, "Routes requests to")
    Rel(apiGateway, courseService, "Routes requests to")
    Rel(apiGateway, assessmentService, "Routes requests to")
    Rel(apiGateway, gradingService, "Routes requests to")
    
    Rel(userService, userDb, "Reads from and writes to")
    Rel(courseService, courseDb, "Reads from and writes to")
    Rel(assessmentService, assessmentDb, "Reads from and writes to")
    Rel(gradingService, gradeDb, "Reads from and writes to")
    
    Rel(userService, messageQueue, "Publishes messages to")
    Rel(courseService, messageQueue, "Publishes messages to")
    Rel(assessmentService, messageQueue, "Publishes messages to")
    Rel(gradingService, messageQueue, "Publishes messages to")
    
    Rel(messageQueue, notificationService, "Delivers messages to")
    Rel(notificationService, email, "Sends emails via")
    Rel(assessmentService, turnItIn, "Checks submissions with")
yLearn LMS - Component Level
View Source Code
C4Component
    title yLearn LMS - Component Diagram (Assessment Service)
    
    Container_Boundary(assessmentService, "Assessment Service") {
      Component(assessmentApi, "Assessment API", "Express.js", "Handles HTTP requests for assessments")
      Component(assessmentManager, "Assessment Manager", "TypeScript", "Business logic for assessment operations")
      Component(submissionProcessor, "Submission Processor", "TypeScript", "Processes student submissions")
      Component(plagiarismChecker, "Plagiarism Checker", "TypeScript", "Integrates with TurnItIn")
      Component(notificationPublisher, "Notification Publisher", "TypeScript", "Publishes events to message queue")
      Component(dataAccess, "Data Access Layer", "TypeScript + Prisma", "Handles database operations")
    }
    
    ContainerDb(assessmentDb, "Assessment Database", "PostgreSQL", "Stores assessment data")
    Container(messageQueue, "Message Queue", "AWS SQS", "Handles asynchronous communication")
    System_Ext(turnItIn, "TurnItIn", "Plagiarism detection service")
    
    Rel(assessmentApi, assessmentManager, "Uses")
    Rel(assessmentManager, submissionProcessor, "Uses")
    Rel(assessmentManager, dataAccess, "Uses")
    Rel(submissionProcessor, plagiarismChecker, "Uses")
    Rel(submissionProcessor, notificationPublisher, "Uses")
    Rel(plagiarismChecker, turnItIn, "Calls API of")
    Rel(dataAccess, assessmentDb, "Reads from and writes to")
    Rel(notificationPublisher, messageQueue, "Publishes to")