• 需求文档 7.4 节's stated floor: an expired user_paid character (T36)
    or its videos must stay individually retrievable by their owner —
    "下线=不再出现在公开直播间和其他人的衣柜/随机池里",不是"下线=消失".
    
    GET /api/dance/my-works (login required, no emailVerified gate — this
    reads your own past purchases, doesn't spend anything) returns the
    requesting user's own characters/garments (ownerUserId match) each
    joined with their generated videos from library.json. New standalone
    page my-works.html (matches live.css's visual language) renders two
    sections with inline video players (same preload="none" pattern as
    admin.html), a status badge (播放中/已下线 for characters, 衣柜中/已下架
    for garments), and a login gate for logged-out visitors — reusing
    GET /api/dance/my-works's 401 rather than duplicating dance.html's auth
    modal in a second page. Linked from dance.html's header once logged in.
    
    my-works.test.js: 401 without a session; a real user who uploaded one
    garment (T27) and one 1-segment character (T35, deliberately expired
    by test time) sees both with their videos still attached; a second,
    unrelated user sees neither.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011DUiYs6UjxDMkfvnjtsKFo
    yibo authored
     
    Browse File »