# liyuan551408-bot/coursecamposs architecture

> Architecture diagram of the GitHub repository liyuan551408-bot/coursecamposs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/liyuan551408-bot/coursecamposs
- Repository: https://github.com/liyuan551408-bot/coursecamposs

## Overview

CourseCompass lets university students discover and evaluate courses, then save completed or prospective courses, build study plans, and request AI recommendations; moderators and administrators manage reviews and platform data. The frontend routes users through Vue views and stores into API modules and the Express API, whose domain services apply business rules and persist through Prisma/PostgreSQL. The README documents these product capabilities; some controller/service links and integrations are not excerpted, so uncertain connections are omitted or shown as unverified.

Main entry points: [`backend/src/lib/prisma.js`](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/lib/prisma.js) (Prisma client), [`backend/src/routes`](https://github.com/liyuan551408-bot/coursecamposs/tree/master/backend/src/routes) (API routes), [`backend/src/controllers/aiController.js`](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/aiController.js) (AI handlers), [`backend/src/services/courseService.js`](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseService.js) (Course catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Student experience"]
  node_shell["App shell<br/>[App.vue]"]
  node_pages["Product pages"]
  node_frontend_api["API modules"]
  node_frontend_stores["Client stores"]
end

subgraph group_api["API and access"]
  node_express["Express API<br/>[app.js]"]
  node_routes["API routes"]
  node_auth_middleware["Token auth<br/>[authMiddleware.js]"]
  node_role_middleware["Role checks<br/>[roleMiddleware.js]"]
  node_course_controller["Course handlers"]
  node_ai_controller["AI handlers<br/>[aiController.js]"]
  node_review_controller["Review handlers"]
end

subgraph group_domain["Course planning"]
  node_course_service["Course catalog<br/>[courseService.js]"]
  node_planning["Planning services<br/>[planService.js]"]
  node_saved_courses["Saved courses"]
  node_completed_courses["Completed courses"]
  node_reviews["Reviews and moderation<br/>[reviewService.js]"]
end

subgraph group_intelligence["AI recommendations"]
  node_ai_service["AI orchestration<br/>[aiService.js]"]
  node_retrieval["Semantic retrieval"]
  node_embeddings["Course embeddings"]
  node_llm["Language model<br/>[llmService.js]"]
end

subgraph group_platform["Identity and operations"]
  node_identity["Identity services<br/>[userService.js]"]
  node_notifications["Notifications"]
  node_prisma["Prisma client<br/>[prisma.js]"]
  node_postgres[("PostgreSQL")]
end

node_student(("Student"))
node_siliconflow["SiliconFlow embeddings"]
node_zhipu["Zhipu AI"]

node_student -->|"uses"| node_shell
node_shell -->|"routes to"| node_pages
node_pages -->|"requests data"| node_frontend_api
node_pages -->|"uses state"| node_frontend_stores
node_frontend_api -.->|"calls API"| node_express
node_express -->|"mounts"| node_routes
node_routes -->|"dispatches"| node_course_controller
node_routes -->|"dispatches"| node_ai_controller
node_routes -->|"dispatches"| node_review_controller
node_routes -->|"protects routes"| node_auth_middleware
node_routes -->|"checks roles"| node_role_middleware
node_course_controller -->|"calls"| node_course_service
node_ai_controller -->|"generates embeddings"| node_ai_service
node_ai_controller -->|"retrieves candidates"| node_retrieval
node_ai_controller -->|"gets course data"| node_course_service
node_ai_controller -->|"requests analysis"| node_llm
node_review_controller -->|"calls"| node_reviews
node_course_service -->|"queues refresh"| node_embeddings
node_retrieval -->|"embeds query"| node_ai_service
node_embeddings -->|"generates vectors"| node_ai_service
node_embeddings -->|"writes vectors"| node_prisma
node_course_service -->|"reads and writes"| node_prisma
node_reviews -->|"persists reviews"| node_prisma
node_reviews -->|"notifies users"| node_notifications
node_prisma -->|"queries"| node_postgres
node_planning -.->|"persists plans"| node_prisma
node_saved_courses -.->|"persists saved items"| node_prisma
node_completed_courses -.->|"persists completions"| node_prisma
node_ai_service -.->|"embeds text"| node_siliconflow
node_llm -.->|"requests generation"| node_zhipu
node_identity -.->|"persists accounts"| node_prisma

click node_shell "https://github.com/liyuan551408-bot/coursecamposs/blob/master/frontend/src/App.vue"
click node_pages "https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/views"
click node_frontend_api "https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/api"
click node_frontend_stores "https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/stores"
click node_express "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/app.js"
click node_routes "https://github.com/liyuan551408-bot/coursecamposs/tree/master/backend/src/routes"
click node_auth_middleware "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/middlewares/authMiddleware.js"
click node_role_middleware "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/middlewares/roleMiddleware.js"
click node_course_controller "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/courseController.js"
click node_ai_controller "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/aiController.js"
click node_review_controller "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/reviewController.js"
click node_course_service "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseService.js"
click node_planning "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/planService.js"
click node_saved_courses "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/savedCourseService.js"
click node_completed_courses "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/completedCourseService.js"
click node_reviews "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/reviewService.js"
click node_ai_service "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/aiService.js"
click node_retrieval "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseRetrievalService.js"
click node_embeddings "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseEmbeddingService.js"
click node_llm "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/llmService.js"
click node_identity "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/userService.js"
click node_notifications "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/notificationService.js"
click node_prisma "https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/lib/prisma.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_shell,node_pages,node_frontend_api,node_frontend_stores toneBlue
class node_express,node_routes,node_auth_middleware,node_role_middleware,node_course_controller,node_ai_controller,node_review_controller toneAmber
class node_course_service,node_planning,node_saved_courses,node_completed_courses,node_reviews toneMint
class node_ai_service,node_retrieval,node_embeddings,node_llm toneRose
class node_identity,node_notifications,node_prisma,node_postgres,node_student,node_siliconflow,node_zhipu toneIndigo
```

## Components

### Student experience

- [App shell](https://github.com/liyuan551408-bot/coursecamposs/blob/master/frontend/src/App.vue): `frontend/src/App.vue`
- [Product pages](https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/views): `frontend/src/views`
- [API modules](https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/api): `frontend/src/api`
- [Client stores](https://github.com/liyuan551408-bot/coursecamposs/tree/master/frontend/src/stores): `frontend/src/stores`

### API and access

- [Express API](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/app.js): `backend/app.js`
- [API routes](https://github.com/liyuan551408-bot/coursecamposs/tree/master/backend/src/routes): `backend/src/routes`
- [Token auth](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/middlewares/authMiddleware.js): `backend/src/middlewares/authMiddleware.js`
- [Role checks](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/middlewares/roleMiddleware.js): `backend/src/middlewares/roleMiddleware.js`
- [Course handlers](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/courseController.js): `backend/src/controllers/courseController.js`
- [AI handlers](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/aiController.js): `backend/src/controllers/aiController.js`
- [Review handlers](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/controllers/reviewController.js): `backend/src/controllers/reviewController.js`

### Course planning

- [Course catalog](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseService.js): `backend/src/services/courseService.js`
- [Planning services](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/planService.js): `backend/src/services/planService.js`
- [Saved courses](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/savedCourseService.js): `backend/src/services/savedCourseService.js`
- [Completed courses](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/completedCourseService.js): `backend/src/services/completedCourseService.js`
- [Reviews and moderation](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/reviewService.js): `backend/src/services/reviewService.js`

### AI recommendations

- [AI orchestration](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/aiService.js): `backend/src/services/aiService.js`
- [Semantic retrieval](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseRetrievalService.js): `backend/src/services/courseRetrievalService.js`
- [Course embeddings](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/courseEmbeddingService.js): `backend/src/services/courseEmbeddingService.js`
- [Language model](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/llmService.js): `backend/src/services/llmService.js`

### Identity and operations

- [Identity services](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/userService.js): `backend/src/services/userService.js`
- [Notifications](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/services/notificationService.js): `backend/src/services/notificationService.js`
- [Prisma client](https://github.com/liyuan551408-bot/coursecamposs/blob/master/backend/src/lib/prisma.js): `backend/src/lib/prisma.js`
- **PostgreSQL**

### Other components

- **Student**
- **SiliconFlow embeddings**
- **Zhipu AI**

## Connections

- Student → App shell: uses (evidence: `README.md`)
- App shell → Product pages: routes to
- Product pages → API modules: requests data (evidence: `frontend/src/views/ReviewSubmit.vue`)
- Product pages → Client stores: uses state (evidence: `frontend/src/views/ReviewSubmit.vue`)
- API modules → Express API: calls API (evidence: `README.md`)
- Express API → API routes: mounts (evidence: `backend/app.js`)
- API routes → Course handlers: dispatches (evidence: `backend/src/routes/courseRoutes.js`)
- API routes → AI handlers: dispatches (evidence: `backend/src/routes/aiRoutes.js`)
- API routes → Review handlers: dispatches (evidence: `backend/src/routes/reviewRoutes.js`)
- API routes → Token auth: protects routes (evidence: `backend/src/routes/reviewRoutes.js`)
- API routes → Role checks: checks roles (evidence: `backend/src/routes/reviewRoutes.js`)
- Course handlers → Course catalog: calls (evidence: `backend/src/controllers/courseController.js`)
- AI handlers → AI orchestration: generates embeddings (evidence: `backend/src/controllers/aiController.js`)
- AI handlers → Semantic retrieval: retrieves candidates (evidence: `backend/src/controllers/aiController.js`)
- AI handlers → Course catalog: gets course data (evidence: `backend/src/controllers/aiController.js`)
- AI handlers → Language model: requests analysis (evidence: `backend/src/controllers/aiController.js`)
- Review handlers → Reviews and moderation: calls (evidence: `backend/src/controllers/reviewController.js`)
- Course catalog → Course embeddings: queues refresh (evidence: `backend/src/services/courseService.js`)
- Semantic retrieval → AI orchestration: embeds query (evidence: `backend/src/services/courseRetrievalService.js`)
- Course embeddings → AI orchestration: generates vectors (evidence: `backend/src/services/courseEmbeddingService.js`)
- Course embeddings → Prisma client: writes vectors (evidence: `backend/src/services/courseEmbeddingService.js`)
- Course catalog → Prisma client: reads and writes (evidence: `backend/src/services/courseService.js`)
- Reviews and moderation → Prisma client: persists reviews (evidence: `backend/src/services/reviewService.js`)
- Reviews and moderation → Notifications: notifies users (evidence: `backend/src/services/reviewService.js`)
- Prisma client → PostgreSQL: queries (evidence: `backend/src/lib/prisma.js`)
- Planning services → Prisma client: persists plans
- Saved courses → Prisma client: persists saved items
- Completed courses → Prisma client: persists completions
- AI orchestration → SiliconFlow embeddings: embeds text (evidence: `README.md`)
- Language model → Zhipu AI: requests generation (evidence: `README.md`)
- Identity services → Prisma client: persists accounts
