Skip to content

Simonwzm/CS3321-Course-Stack

Repository files navigation

Course-Stack

这是 CS3321 数据库技术课程的小组作业仓库。我们设计了一个课程信息查询和可视化的数据库网络应用,名称是 Course-Stack

在线演示地址

项目贡献

小组成员如下:

姓名 学号 邮箱 成员 贡献度
王梓萌 521030910015 @dongyunpeng-sjtu 组员 33%
孙州玥 @every-breaking-wave 组员 33%
刘洺皓 521030910014 @Musicminion 组员 33%

详细分工:

  • 前端: 王梓萌
  • Neo4j & 知识图谱:刘洺皓
  • Mongodb & 用户系统:孙州玥

项目仓库的地址:

项目的CI/CD主要在Github上面运行,所以如有需要查看,请移步到Github查看。

项目架构

Course-Stack 是 CS3321 数据库课程的集大成项目,它结合了前沿的网页技术和复杂的数据管理系统来提供一个多层次的教学与学习平台。此项目不仅包括前端和后端的交互逻辑,还深入到了数据持久化层,采用 Vue.js、MongoDB 以及 Neo4j 等技术栈,打造出一个响应迅速、功能全面的教育工具。项目的核心在于利用知识图谱技术来探索和实现课程内容的深度关联及个性化学习路径,从而优化教学流程并提升学生的学习体验。

技术栈与项目架构简述

  • Vue 3 + Vite: 利用 Vue 3 的响应式框架和 Vite 的快速冷启动特性,提供即时的页面更新和优化的开发体验。
  • UI 框架 - naive-ui: 选择 naive-ui 为用户提供一致而现代的界面元素。
  • 样式处理 - Tailwind CSS: 使用功能类优先的 CSS 框架来构建定制的设计系统,快速响应不同组件的样式需求。
  • 路由管理 - vue-router: 管理复杂的页面路由,保持用户界面与URL的同步。
  • 状态管理 - pinia: 替代传统的 Vuex,为 Vue 3 提供更简洁和强大的状态管理解决方案。
  • JavaScript & Node.js: 使用 JavaScript 运行在 Node.js 环境下,处理服务器逻辑与数据流。
  • MongoDB: 采用非关系型数据库MongoDB,以其高性能和高可扩展性处理大量动态数据。
  • Express.js: 利用 Express.js 构建 RESTful API,简化后端路由和中间件的管理。
  • Docker: 通过 Docker 容器化技术,确保开发和生产环境的一致性。
  • Python & Shell: 结合使用 Python 和 Shell 脚本来操控 Neo4j 数据库,处理复杂的查询和数据转换任务。
  • Neo4j: 使用图形数据库 Neo4j 来存储和管理复杂的课程关系,通过其高效的图查询语言 Cypher 进行数据操作。
  • FastAPI: 使用 FastAPI 构建高性能的 API 服务,支持异步处理,提高系统的并发处理能力。

亮点介绍

  • 快速部署,便捷客制化
  • 全文检索,高效查询
  • 知识点提取查询,打通课程壁垒
  • 用户系统,权限管理
  • 多数据库后端整合框架,高可扩展性

项目管理

项目分支:我们的开发采用多子模块,单主仓库进行,子模块中采用多分支进行项目管理。每一个功能点对应一个Feature分支(对于比较复杂的功能分支可能会有不同组员自己的Branch),所有的推送都在子模块中经过校验,然后更新主仓库中指向子模块commit的记录,然后进行CI测试,并可以在github actions中查看详细的情况。

项目一共包含主要分支包括

软件测试介绍

CI/CD作为我们软件质量的重要保证之一。我们通过Git Action添加了自己的Runner,并编写了项目的测试脚本来实现CI/CD。保证每次运行前环境全部初始化。

  • 所有的日常代码的推送都会被发送到我们自己的服务器,运行单元测试,并直接显示在单次推送的结果后方
  • 当发起Pr时,自动会再一次运行单元测试,测试通过之后才可以合并
  • 运行单元测试通过之后,构建可执行文件,发布到机器的bin目录下
  • 以上2,3条通过之后,对于合并到Master的情况,会构建docker相关的镜像(例如mongodb后端,neo4j后端,vue前端).

功能开发流程

  • 我们的软件开发基于迭代开发、敏捷开发。小组成员[TODO: the detail of cooperation/ how hard do we grind],减少沟通障碍,做到有问题及时解决、沟通,有困难相互请教,这也大大的提高了我们小组的效率。截止15周周末,我们已经完成了所有的功能的开发。基本符合预期进度。
  • 对于新功能开发,我们采用"动态分配"方法,根据进度灵活分配成员的任务。项目框架搭建好之后,基本上在任何时间点小组同时在开发两个或者两个以上的需求。一人开发完成之后,交给另外一个组员完成代码的审查和测试,测试通过之后合并到Master
  • 功能开发的过程主要是:简要的需求分析->设计API对象->编写该需求的运行逻辑代码->编写相关代码->最终测试
  • 具体如下图所示,在整个开发的流程中,我们基本都是在重复下面的流程图。

[TODO: our workflow with repetition]

  • 当然我们在开发的过程中也在及时更新文档,如下图所示,是我们的API-Server的详细接口文档,便于组员之间了解对方的开发情况

开发简介

  • 项目代码体量大约7000行代码,开发周期大约1.5月
  • 完成要求里面的全部功能, 包括需求分析文档,逻辑/概念/物理设计文档, 系统实现演示, 和主要流程图.

开箱即用指南

大作业提供开箱即用的配置方式,需要用户设备安装支持 docker 和 docker-compose

  1. 下拉仓库,更新子模块

    git clone --recurse-submodules https://github.com/Simonwzm/CS3321-Course-Stack
    
    git submodule update --remote
    
  2. 安装 docker && docker-compose

    具体请参考docker官方文档

  3. 创建镜像

    # in root directory
    docker-compose build
  4. 启动容器

    # in root directory
    docker-compose up

通过访问 http://localhost:5173 可以看到前端应用,检查所有服务是否正常拉起

开发指南

前后端各部件通过子模块形式连接到主仓库,因此建议首先下拉本仓库,然后按照 git 建议的子模块标准工作流开发,自动同步到子模块自己的仓库,使用示例如下

  • 下拉仓库和子模块

      git clone --recurse-submodules https://github.com/Simonwzm/CS3321-Course-Stack
    
      git submodule update --remote
    
  • 修改子模块

    cd path/to/submodule
    git checkout -b new-feature-branch
    # Make changes to submodule
    git add .
    git commit -m "Your commit message"
    git push origin new-feature-branch
  • 更新主仓库

    cd ../  # Go back to the main repository
    git add path/to/repo-1
    git commit -m "Update submodule repo-1 to latest commit"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •