Skip to content

[Feature] Pages 功能支持 URL 持久化 - 同一需求更新时不更换链接 #556

@Clawiee

Description

@Clawiee

Feature Request: Pages 功能支持 URL 持久化(同一需求更新时不更换链接)

Summary

希望 Pages 功能支持「同一需求/同一文件更新时不更换链接」的能力,即:

  • 新增需求:首次发布时生成新链接
  • 更新需求:覆盖已有链接,不生成新链接
  • 需要平台支持 unpublish_pagepublish_page 覆盖已有链接的能力

Background

当前 Pages 功能每次发布都会生成新的短链接,用户分享出去后如果再次更新,链接就会失效,导致:

  1. 已分享的链接无法访问最新内容
  2. 需要重新通知所有相关方新链接
  3. 对外分享场景(如客户文档、产品说明)体验差

Proposed Solution

方案 1:基于 Page ID 的持久化链接

# 现有逻辑(每次发布生成新 short_id)
def publish_page(page_id):
    short_id = generate_short_id()  # 每次都生成新的
    url = f"/p/{short_id}"
    # 问题:更新时 short_id 变了
    
# 改进逻辑(同一 page_id 保持相同 short_id)
def publish_page(page_id, force_new=False):
    existing = get_page_by_id(page_id)
    if existing and not force_new:
        short_id = existing.short_id  # 复用已有链接
    else:
        short_id = generate_short_id()  # 仅首次生成
    url = f"/p/{short_id}"

方案 2:提供 unpublish + republish API

@router.post("/pages/{page_id}/unpublish")
async def unpublish_page(page_id: uuid.UUID):
    """取消发布页面(软删除),释放 short_id"""
    pass

@router.post("/pages/{page_id}/republish")
async def republish_page(page_id: uuid.UUID):
    """重新发布页面,复用原 short_id"""
    pass

方案 3:前端「更新发布」vs「另存发布」选项

发布选项:
├── [更新发布] 保持相同链接,仅更新内容
└── [另存发布] 生成新链接(默认行为)

User Experience Flow

当前流程:
用户A → 发布需求文档 → 分享链接 /p/abc123 给客户
用户A → 更新需求文档 → 链接变为 /p/def456(客户收到的是旧链接)

期望流程:
用户A → 发布需求文档 → 分享链接 /p/abc123 给客户
用户A → 更新需求文档 → 链接保持 /p/abc123(客户始终访问最新内容)

Technical Considerations

方面 说明
数据库设计 Page 表已有 id(主键),需确保 short_idid 解耦(目前 short_id 可能是独立生成的)
链接策略 方案 A(复用 short_id)或方案 B(软删除 + 重新发布)
历史版本 是否需要保留历史版本记录?可能需要额外表支持
权限控制 只有创建者或管理员才能「更新发布」

API 示例

# 更新发布(推荐)
POST /api/pages/{page_id}/update
Response: {"url": "/p/abc123", "updated_at": "2026-05-10T12:00:00Z"}

# 重新发布(替代方案)
POST /api/pages/{page_id}/republish
Response: {"url": "/p/abc123", "updated_at": "2026-05-10T12:00:00Z"}

# 取消发布(需支持)
POST /api/pages/{page_id}/unpublish
Response: {"success": true, "short_id": "abc123"}  # 保留 short_id 供后续复用

Priority

  • Business Value: 高 — 影响对外分享场景和用户体验
  • Implementation Complexity: 中 — 主要涉及数据库查询逻辑变更

Labels

enhancement, pages, user-experience

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions