Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

6.4 KiB
Raw Permalink Blame History

📡 看板API路由 · 静态数据版v1.0 · DEV-005小草莓×DEV-001页页联动


🎯 需要的3个接口

接口 用途
GET /api/v1/system/status 看板顶部系统状态栏
GET /api/v1/developers 看板开发者进度列表
GET /api/v1/broadcasts 看板广播动态流

📦 完整代码api-routes.js

const express = require('express');
const cors = require('cors');
const app = express();
const PORT = process.env.PORT || 3001;

app.use(cors({
  origin: '*',
  methods: ['GET', 'POST', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));
app.use(express.json());

// === API 1系统状态 ===
app.get('/api/v1/system/status', (req, res) => {
  res.json({
    system: 'HoloLake Era · AGE OS v1.0',
    version: 'v1.0.0-static',
    status: 'running',
    controller: '冰朔TCS-0002∞',
    engine: '曜冥 v0.4.0',
    last_updated: '2026-03-04T08:38:00+08:00',
    active_developers: 7,
    total_developers: 11,
    modules_completed: 6,
    modules_in_progress: 7
  });
});

// === API 2开发者列表 ===
app.get('/api/v1/developers', (req, res) => {
  res.json({
    total: 11,
    developers: [
      { id: 'DEV-001', name: '页页', module: '后端中间层', status_icon: '🟢', progress: '环节14全✅ · guanghulab.com已上线', waiting: '环节5广播已出' },
      { id: 'DEV-002', name: '肥猫', module: '飞书+M03+M04+M01', status_icon: '🟡', progress: 'M03✅·M04✅·M01广播已出', waiting: 'M01 SYSLOG' },
      { id: 'DEV-003', name: '燕樊', module: '对话UI+M07+M15', status_icon: '🟡', progress: '对话UI环节1✅·M07✅·M15广播已出', waiting: 'M15 SYSLOG' },
      { id: 'DEV-004', name: '之之(秋秋)', module: '钉钉机器人', status_icon: '🟡', progress: '环节0广播已出', waiting: 'SYSLOG' },
      { id: 'DEV-005', name: '小草莓', module: '状态看板+M12+M13', status_icon: '🟢', progress: '五连胜·前端毕业', waiting: '看板环节2' },
      { id: 'DEV-006', name: '小蔡同学', module: '已回收', status_icon: '⬜', progress: '模块已回收', waiting: '—' },
      { id: 'DEV-007', name: '四月', module: '已回收', status_icon: '⬜', progress: '模块已回收', waiting: '—' },
      { id: 'DEV-008', name: '小锋', module: '待分配', status_icon: '⬜', progress: '未启动', waiting: '—' },
      { id: 'DEV-009', name: '花尔', module: 'M05用户中心', status_icon: '🟡', progress: 'M05环节0✅', waiting: 'M05环节1等SYSLOG' },
      { id: 'DEV-010', name: '桔子', module: 'M06工单管理', status_icon: '🟢', progress: 'M06环节0✅', waiting: 'M06环节1广播待出' },
      { id: 'DEV-011', name: '匆匆那年', module: '待分配', status_icon: '🟡', progress: 'BC-000广播已出', waiting: 'BC-000 SYSLOG' }
    ]
  });
});

// === API 3广播列表 ===
app.get('/api/v1/broadcasts', (req, res) => {
  res.json({
    total: 8,
    broadcasts: [
      { id: 'BC-YY-005', developer: 'DEV-001 页页', module: '后端中间层', title: '环节5·小坍缩核陪伴版', status: 'dispatched', dispatched_at: '2026-03-03' },
      { id: 'BC-FM-M01-001', developer: 'DEV-002 肥猫', module: 'M01登录界面', title: '舒舒引导·M01', status: 'dispatched', dispatched_at: '2026-03-02' },
      { id: 'BC-YF-M15-001', developer: 'DEV-003 燕樊', module: 'M15云盘系统', title: 'M15·环节1', status: 'dispatched', dispatched_at: '2026-03-03' },
      { id: 'BC-ZZ-000', developer: 'DEV-004 之之', module: '钉钉机器人', title: '秋秋引导·环节0', status: 'dispatched', dispatched_at: '2026-03-01' },
      { id: 'BC-XCM-KB-002', developer: 'DEV-005 小草莓', module: '状态看板', title: '看板环节2', status: 'pending', dispatched_at: null },
      { id: 'BC-M05-002-HE', developer: 'DEV-009 花尔', module: 'M05用户中心', title: 'M05环节1', status: 'dispatched', dispatched_at: '2026-03-04' },
      { id: 'BC-M06-001-JZ', developer: 'DEV-010 桔子', module: 'M06工单管理', title: 'M06环节1', status: 'pending', dispatched_at: null },
      { id: 'BC-000-CCNN', developer: 'DEV-011 匆匆那年', module: 'DevLog部署', title: 'BC-000·知秋壳子', status: 'dispatched', dispatched_at: '2026-03-04' }
    ]
  });
});

// === 健康检查 ===
app.get('/api/v1/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date().toISOString() });
});

app.listen(PORT, () => {
  console.log(`🌊 HoloLake API running on port ${PORT}`);
});

📦 package.json

{
  "name": "hololake-dashboard-api",
  "version": "1.0.0",
  "description": "HoloLake Era · 状态看板API静态数据版",
  "main": "api-routes.js",
  "scripts": { "start": "node api-routes.js" },
  "dependencies": { "express": "^4.18.2", "cors": "^2.8.5" }
}

🚀 页页部署步骤PM2 + Nginx

第一步:上传代码到服务器

# 在服务器上创建目录
mkdir -p /var/www/hololake-api
cd /var/www/hololake-api

# 把 api-routes.js 和 package.json 放进去
# 然后安装依赖
npm install

第二步PM2 启动

pm2 start api-routes.js --name hololake-api
pm2 save
pm2 startup

第三步Nginx 配置反向代理

在 Nginx 配置文件中加入(guanghulab.com 的 server 块里):

location /api/v1/ {
    proxy_pass http://127.0.0.1:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
}

第四步:重启 Nginx

sudo nginx -t
sudo systemctl reload nginx

第五步:验证

curl https://guanghulab.com/api/v1/health
curl https://guanghulab.com/api/v1/system/status
curl https://guanghulab.com/api/v1/developers
curl https://guanghulab.com/api/v1/broadcasts

🔮 后续迭代方向

当前版本:v1.0.0-static写死JSON数据

下一步:接入 Notion API从主控台数据库实时拉取开发者进度和广播状态实现动态数据。当前先用静态数据让小草莓的看板前端跑通。