logo
1
0
WeChat Login

SEM Mentor Backend

基于 Elysia + Bun + Prisma + PostgreSQL 的师生项目管理系统后端。

技术栈

  • 运行时Bun
  • 框架Elysia
  • ORMPrisma(PostgreSQL)
  • 认证 — JWT(Access Token + Refresh Token Rotation)

快速开始

1. 安装依赖

bun install

2. 配置环境变量

复制 .env.example 并填写实际值:

cp .env.example .env

需要配置的关键变量:

变量说明必填
DATABASE_URLPostgreSQL 连接字符串
ACCESS_TOKEN_SECRETJWT Access Token 签名密钥
REFRESH_TOKEN_SECRETJWT Refresh Token 签名密钥
PORT服务端口,默认 3000
CORS_ORIGINS允许的跨域来源,逗号分隔
NODE_ENV运行环境,影响 CORS 策略

3. 初始化数据库

生成 Prisma Client 并执行数据库迁移:

bunx prisma generate bunx prisma migrate deploy

4. 启动服务

开发模式(文件变更自动重启):

bun run dev

生产构建:

bun run build bun run start

启动后访问 http://localhost:3000/swagger 查看 API 文档。

种子数据

应用启动时会自动检查用户表,仅当用户表为空时才会初始化种子数据。已有数据的数据库不会受到影响。

种子账户:

角色学号/工号密码
管理员admin001Admin123
教师teacher001Teacher123
学生student001Student123
学生student002Student123

密码均满足校验规则(≥8位,包含大小写字母和数字),存储时经过 bcrypt 哈希。

种子还会创建两个示例项目和对应的学生申请记录。

Docker 部署

docker build -t sem-mentor-backend . docker run -p 3000:3000 --env-file .env sem-mentor-backend

容器启动时会自动执行 prisma migrate deploy,随后启动应用。

项目结构

src/ ├── index.ts # 入口:Elysia 配置、统一响应包装、种子逻辑 ├── lib/ │ ├── auth.ts # JWT 认证、角色/权限中间件 │ └── prisma.ts # Prisma Client 实例 ├── routes/ │ ├── userRoutes.ts # 用户相关接口 │ ├── projectRoutes.ts # 项目相关接口 │ └── stuprojectRoutes.ts # 学生申请相关接口 └── services/ ├── userService.ts # 用户业务逻辑 ├── projectService.ts # 项目业务逻辑 └── stuprojectService.ts # 学生申请业务逻辑

API 响应格式

所有接口返回统一的 JSON 结构:

成功:

{ "code": 200, "message": "", "data": { ... } }

失败:

{ "code": "VALIDATION_ERROR", "message": "请求参数验证失败", "data": null }

About

No description, topics, or website provided.
Language
TypeScript99.5%
Dockerfile0.5%
Shell0%