Skip to content

fix: Release已读状态跨设备同步 + 仓库四字段持久化#141

Closed
lostiv wants to merge 68 commits into
AmintaCCCP:mainfrom
lostiv:fix/bug
Closed

fix: Release已读状态跨设备同步 + 仓库四字段持久化#141
lostiv wants to merge 68 commits into
AmintaCCCP:mainfrom
lostiv:fix/bug

Conversation

@lostiv
Copy link
Copy Markdown

@lostiv lostiv commented May 13, 2026

@

Summary

  • Release 已读状态跨设备同步:标记已读时推送后端 PATCH,自动同步时从后端合并 is_read
  • 仓库四字段持久化:forks_count / forks / last_release_fetch_time / has_fetched_releases 添加到 DB

Changes

前端

  • store markReleaseAsRead/markAllReleasesAsRead 同步设置 is_read 到 Release 对象
  • backendAdapter 添加 markReleaseAsRead/markAllReleasesAsRead 方法
  • ReleaseTimeline fire-and-forget 调用后端标记已读
  • autoSync 拉取时合并后端 is_read 到本地 readReleases Set

后端

  • DB migration v2 添加四列到 repositories 表
  • transformRepo/PUT/PATCH 支持新四字段

Test plan

  • TypeScript 类型检查通过
  • 标记 Release 已读后 Network 面板可见 PATCH /api/releases/:id
  • 清除 IndexedDB 后自动同步恢复已读状态
  • 仓库 forks_count 等字段经 backend 同步往返不丢失
    @

Summary by CodeRabbit

  • New Features

    • Server-side AI repository analysis with batch processing and progress tracking
    • Automatic backup scheduling with retention policies
    • Docker-based deployment for frontend and backend services
    • Enhanced fork management and upstream synchronization
  • Improvements

    • Dynamic version reporting from server configuration
    • Better data preservation during repository syncs
    • Improved release tracking and subscription management
    • Refined error handling and user feedback
  • Chores

    • Version bumped to 0.6.2
    • Updated Node.js runtime to version 22
    • Docker Compose configured to use prebuilt images

Review Change Stack

lostiv and others added 30 commits May 8, 2026 12:46
支持 release 发布和手动触发,前后端镜像分开构建并推送到 Docker Hub。
feat: 添加 Docker Build & Push GitHub Actions 工作流
fix: 前端 Dockerfile 升级 Node 18 → 22,修复 Actions 构建失败
Updated CodeRabbit configuration with new review settings and ignore patterns.
chore: build-desktop 改为仅手动触发
当后端可用时,WebDAVService 通过 POST /api/proxy/webdav 代理请求,
避免浏览器直接跨域访问 WebDAV 服务器。后端不可用时回退到浏览器直连。
fix: WebDAV 优先走后端代理,解决浏览器 CORS 跨域问题
@
chore: 使用预构建镜像替代本地构建

前端使用 lost4/gitstars:latest,后端使用 lost4/gitstars:backend
@
@
fix: 修复 PUT /api/releases 缺少一个占位符导致插入失败

VALUES 子句只有 14 个 ?,但表有 15 列,补全为 15 个
@
Fix placeholder issue in PUT /api/releases for successful insertion
@
fix: 修复 PUT /api/settings 存储非字符串值时报参数错误

自动将数组/对象序列化为 JSON 字符串存储,读取时自动解析回原始类型
@
Fix parameter error for non-string values in settings API
@
chore: 适配 CodeRabbit 配置到 GithubStarsManager 项目

技术栈:React 18 + Express + better-sqlite3 + Tailwind CSS
@
后端新增 analysisService(README 获取 → AI 调用 → 解析入库)和 analysis 路由。
前端新增 backendAnalysisService 轮询服务,RepositoryList/RepositoryCard/
DiscoveryView/SubscriptionRepoCard 均采用后端优先、前端降级策略。
修复了 openai-responses 响应解析缺失、DiscoveryView 停止按钮无效、
批量分析 toast 不区分停止/完成 三个 bug。
- getAnalysisProgress 缺少认证头导致轮询失败 (Critical)
- batches Map 无 TTL 清理导致内存泄漏 (Major)
- JSON.parse(repo.topics) 无异常处理 (Minor)
- 后端分析时暂停按钮行为误导,改为禁用 (Minor)
- AI API 错误消息不再暴露完整响应体,仅提取安全字段 (Minor)
- 暂停按钮添加 aria-label 无障碍属性 (Minor)
 feat: 将 AI 分析移到后端执行,前端仅发起和轮询
@
@ fix: 修复版本号管理问题

- health.ts 改为运行时读取 server/package.json 版本号,不再硬编码
- update-version.cjs 同步更新前后端两个 package.json,移除无效的 updateServiceVersion
- docker-build.yml 前后端镜像使用各自独立的版本号 tag
@
@
@ chore: 更新 versions/README.md 反映当前版本管理流程
@
@
@ fix: 添加 @types/node 解决 server TypeScript 63 个类型错误

- server/package.json devDependencies 新增 @types/node
- 修复 analysisService.ts 唯一的类型错误 (errData?.error?.message)
- tsc --noEmit 现在零错误通过
@
@
@ fix: 修复 CodeRabbit 指出的 2 个容错问题

- health.ts: readFileSync 添加 try-catch,文件缺失时回退 unknown
- analysisService.ts: decrypt 添加 try-catch,防止敏感信息泄露
@
@
@ fix: 同步 server/package.json 版本号为 0.5.7

之前 server/package.json 停留在 0.1.0,导致 Docker 后端镜像 tag 和
/api/health 返回的版本号与前端不一致
@
@
@ chore: bump version to 0.6.0
@
@
@ fix: AI API 错误日志只记录安全字段,避免泄露敏感信息
@
@
@ fix: 修复后端 AI 分析两个 bug

- buildApiUrl 改为从 origin 拼接路径,避免 base URL 已有 /v1 时叠加成 /v1/v1
- syncSettings 添加 github_token,确保后端分析能获取 GitHub Token 避免 429 限流
@
lostiv and others added 26 commits May 11, 2026 23:39
Fix analysis stop button, category matching, and polling timeout
@
refactor: Star/Unstar、Fork、翻译操作统一迁移到后端代理

"后端为唯一数据源"架构整改:
- Star/Unstar: 4处调用点改用 backend 代理
- Fork: 6种操作 (getUserForks/checkForkSyncNeeded/getBranches/
  getRepositoryWorkflows/syncFork/triggerWorkflowRun) 迁移到后端
- 翻译: MS auth token 管理移到后端,前端仅保留 chunking/retry
- 同步按钮: 优先使用 backend.fetchStarredRepos 代理
- 后端通配符代理支持 body 转发
@
Refactor Star/Unstar, Fork, and Translation operations to backend proxy
@
fix: 修复 CodeRabbit 审查发现的问题

- MS auth fetch 添加 AbortController + 30s 超时控制
- newRepoCount 改用 Set-based ID 差集计算(修复取消星标时计数错误)
- isTransient 增加 instanceof TypeError 结构化检测
- loadWorkflows 失败时添加 toast 提示
- Trending 按钮添加 aria-label 和 title 属性
@
- ReleaseTimeline: 移除GitHubApiService, 改用backend.getMultipleRepositoryReleases走后端代理
- BackendAdapter: 新增fetchAllReleasesForRepo和getMultipleRepositoryReleases, getRepositoryReleases返回Release[]
- ForkTimeline: 添加挂载时自动加载forks, 避免新开页面显示空状态
- ReleaseTimeline: 添加挂载时自动加载releases
- RepositoryCard: 订阅发布按钮同步调用backend.updateRepository持久化
- useAppStore: setRepositories时从subscribed_to_releases自动重建releaseSubscriptions
- backendAdapter: releases.forEach 改 map 避免原地修改副作用
- backendAdapter: fetchAllReleasesForRepo 加 maxPages=50 上限和 try/catch
- useAppStore: setRepositories 同时处理取消订阅 (subscribed_to_releases=false)
- RepositoryCard: 订阅同步失败改为 console.warn 记录
refactor: Release迁移到后端代理, 添加Fork和Release自动加载, 订阅发布同步后端
后端新增备份调度服务,支持设置自动备份间隔和保留最近N份备份。
前端新增自动备份设置面板,可在设置中配置参数和手动触发。

- 新增 backupService.ts: 数据导出、自动备份、旧备份清理调度
- 新增 backup.ts 路由: settings CRUD / status / trigger 四个API
- 提取 exportAllData 函数供 sync 和 backup 服务共用
- webdavService 新增 deleteFile 方法
- 前端新增 AutoBackupPanel 配置面板
- webdavDeleteFile 返回 boolean,清理逻辑根据实际删除结果计数
- backup settings 路由增加 req.body 类型检查和 Number.isInteger 校验
- AutoBackupPanel 开关和输入框添加 aria-labelledby/htmlFor 关联
防止字符串 "false" 被当作 truthy 存储为 'true'。
feat: WebDAV自动备份和自定义保留份数
- throwTranslatedError 优先使用 data.error 中的具体错误信息,避免校验失败原因被丢弃
- checkAndBackup 增加活跃配置变更检测,切换 WebDAV 配置后立即触发新备份
- 补充 VALIDATION_FAILED 及备份相关错误码映射
CodeRabbit 审查:data.error 若非字符串会变成 [object Object],增加 typeof 检查,仅当非空字符串时直抛,否则走 code 翻译回退。
fix: 自动备份400错误修复及配置切换调度缺陷
- 移除独立的自动备份标签页,功能整合进备份与恢复
- 恢复数据支持从备份文件列表中选择特定备份
- 立即备份优先使用后端触发,回退直传 WebDAV
- 修复保存设置时后端不可用误报成功
- 修复上次备份时间取旧值的问题
Refactor backup settings and unify panel button styles
fix: 保存自动备份前置同步 WebDAV、恢复兼容后端格式、文件名加时间戳
fix: WebDAV 配置激活后 isActive 字段未同步,导致自动备份校验失败
@
fix: Release已读状态跨设备同步 + 仓库四字段持久化

- store markReleaseAsRead/markAllReleasesAsRead 同步设置 is_read
- backendAdapter 添加 markReleaseAsRead/markAllReleasesAsRead 调用后端
- ReleaseTimeline onMarkAsRead fire-and-forget 推送后端
- autoSync 拉取时合并后端 is_read 到本地 readReleases Set
- DB migration v2 添加 forks_count/forks/last_release_fetch_time/has_fetched_releases
- repositories 路由 transformRepo/PUT/PATCH 支持新四字段
@
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 13, 2026

Caution

Review failed

Pull request was closed or merged during review

Warning

Ignoring CodeRabbit configuration file changes. For security, only the configuration from the base branch is applied for open source repositories.

📝 Walkthrough

Walkthrough

Adds backend analysis batches and auto-backup services with routes/scheduler, DB/schema/type changes, frontend pivot to backend-first workflows (analysis, sync, forks, releases, backup), proxy endpoints (translate/WebDAV), CI/docker/version updates, and extensive skills/docs.

Changes

End-to-end backend-first analysis/backup and frontend integration

Layer / File(s) Summary
Full stack implementation and documentation
.github/..., server/src/..., src/services/..., src/components/..., .agents/skills/*, docs/*, versions/*, package.json, Docker*, docker-compose.yml
Implements server analysis/backup with routes/scheduler and schema/types, migrates frontend services/components to backend-first flows, adds proxy endpoints and adapters, simplifies auto-sync, updates CI/docker/versioning, and adds skills/docs.

Sequence Diagram(s)

sequenceDiagram
  participant Frontend (UI)
  participant Backend Adapter
  participant Analysis Routes
  participant Analysis Service
  Frontend (UI)->>Backend Adapter: Start batch analysis (repoIds, configId, lang, categories)
  Backend Adapter->>Analysis Routes: POST /api/analysis/batch
  Analysis Routes->>Analysis Service: createBatch -> run
  loop Poll progress
    Frontend (UI)->>Backend Adapter: Get batch status
    Backend Adapter->>Analysis Routes: GET /api/analysis/batch/:id
  end
  Frontend (UI)->>Backend Adapter: Cancel (if needed)
  Backend Adapter->>Analysis Routes: POST /api/analysis/batch/:id/cancel
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Poem

Bunny ships a batch that hums,
Backups bloom on WebDAV drums.
Forks all march in tidy rows,
Releases flow where backend goes.
Skills and docs like clover spread—
Carrots tagged, the CI fed.
Thump! New versions hop ahead. 🥕✨

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

⚠️ This pull request might be slop. It has been flagged by CodeRabbit slop detection and should be reviewed carefully.

@
fix: CodeRabbit审查 — PUT/PATCH新字段入口校验 + autoSync原子更新

- PUT repositories: forks_count/forks/last_release_fetch_time/has_fetched_releases 入参严格校验
- PATCH repositories: 新字段校验前置,allowedFields 简化为透传
- autoSync: 合并 releases 与 readReleases 单次 setState 原子更新
@
@lostiv lostiv closed this May 13, 2026
@lostiv lostiv deleted the fix/bug branch May 13, 2026 08:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant