Skip to content

feat(style-preset): 增加画风预设目录表与接口 - #614

Open
xiaocheny214 wants to merge 3 commits into
1024XEngineer:mainfrom
xiaocheny214:feat/style-preset-catalog
Open

feat(style-preset): 增加画风预设目录表与接口#614
xiaocheny214 wants to merge 3 commits into
1024XEngineer:mainfrom
xiaocheny214:feat/style-preset-catalog

Conversation

@xiaocheny214

@xiaocheny214 xiaocheny214 commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • 新增 windup_style_preset 运营目录:画风种类、必填参考图、提示词、像素化开关,以及与项目对齐的精灵图集宽高。
  • 提供登录后的 GET /style-presets 列表,以及 POST / PATCH 供后续管理端维护;单条查询留给管理端再加。
  • 前端选档后把字段填回项目已有的 game_style / sprite_sample_url / sprite_width / sprite_height,不改生成编排。

Refs #475
Close #475

Test plan

  • pytest tests/test_style_preset.py 通过
  • GET /style-presets 未登录返回 401
  • 创建两档后列表按 sort_order 返回,enabled=0 不出现
  • 重复 code 返回 400;PATCH 可下架并从列表消失
  • OpenAPI 含 /style-presets

@vercel

vercel Bot commented Aug 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
windup Ignored Ignored Preview Aug 24, 2026 3:07pm

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown

✅ 此 PR 已关联 issue,之前的提醒已自动标记为已解决。

@codecov

codecov Bot commented Aug 24, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 99.20635% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...ackages/app/src/windup_app/web/api/style_preset.py 98.73% 1 Missing ⚠️

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #614      +/-   ##
==========================================
+ Coverage   86.52%   86.58%   +0.06%     
==========================================
  Files         293      297       +4     
  Lines       21902    22028     +126     
  Branches     3329     3329              
==========================================
+ Hits        18951    19074     +123     
- Misses       2021     2023       +2     
- Partials      930      931       +1     
Flag Coverage Δ
backend 91.63% <99.20%> (+0.08%) ⬆️
frontend 80.51% <ø> (-0.03%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...ckend/packages/app/src/windup_app/bootstrap/app.py 95.79% <100.00%> (+0.10%) ⬆️
...nd/packages/app/src/windup_app/bootstrap/worker.py 39.28% <100.00%> (+0.73%) ⬆️
...app/src/windup_app/server/style_preset/__init__.py 100.00% <100.00%> (ø)
...es/app/src/windup_app/server/style_preset/model.py 100.00% <100.00%> (ø)
.../app/src/windup_app/server/style_preset/service.py 100.00% <100.00%> (ø)
...ackages/app/src/windup_app/web/api/style_preset.py 98.73% <98.73%> (ø)

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查了预设目录模型与 CRUD、项目约束加载链路、现有前端调用点和 OpenAPI。目录的基础增删改查结构可用,但当前预设仍无法真正应用到项目,且显式 stylize 没有进入生成约束;另外 PATCH 的可空定义会把合法请求推到数据库 500。仓库中未提供可用的 pytest/uv 命令,因此本次以固定 SHA 差异检查和跨层静态追踪为主。

Comment thread backend/packages/app/src/windup_app/server/style_preset/model.py
Comment thread backend/packages/app/src/windup_app/web/api/style_preset.py
Comment thread backend/packages/app/src/windup_app/web/api/style_preset.py
xyh202131
xyh202131 previously approved these changes Aug 25, 2026
@johnnyzhang-eng

Copy link
Copy Markdown
Contributor

#475 这边已经拆成 #600(后端把 game_style 从自由文本改成受控枚举)和 #603(前端三个入口接档位)在做,所以这条目录表的画风种类字段如果另定一套取值,两边会漂。另外提示词短语现在的唯一真相源是 ai_engine.prompt.art_styles,目录表也带提示词字段,这两处是合并成一处还是分工,想先跟你对齐再往下推。

@minorcell

Copy link
Copy Markdown
Member

@fennoai

这个 PR 有对 数据库有变更吗?

@fennoai

fennoai Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

结论

有数据库相关变更,具体如下:

  • 新增 SQLAlchemy ORM 模型 StylePreset,对应新表 windup_style_preset,包含唯一约束 uq_windup_style_preset_code
  • 在应用和 worker 启动装配中导入该模型,使其注册到 Base.metadata;现有启动逻辑会通过 Base.metadata.create_all(engine) 自动创建缺失表。
  • 测试夹具也新增了该表,因此 tests/test_style_preset.py 会在 SQLite 测试库中创建并使用它。
  • 但本 PR 没有新增独立的数据库迁移文件(例如 Alembic migration 或 SQL 脚本);生产环境依赖当前项目的启动自动建表机制。

相关文件:backend/packages/app/src/windup_app/server/style_preset/model.pybackend/packages/app/src/windup_app/bootstrap/app.pybackend/packages/app/src/windup_app/bootstrap/worker.pybackend/tests/conftest.py

@minorcell

Copy link
Copy Markdown
Member

结论

有数据库相关变更,具体如下:

  • 新增 SQLAlchemy ORM 模型 StylePreset,对应新表 windup_style_preset,包含唯一约束 uq_windup_style_preset_code
  • 在应用和 worker 启动装配中导入该模型,使其注册到 Base.metadata;现有启动逻辑会通过 Base.metadata.create_all(engine) 自动创建缺失表。
  • 测试夹具也新增了该表,因此 tests/test_style_preset.py 会在 SQLite 测试库中创建并使用它。
  • 但本 PR 没有新增独立的数据库迁移文件(例如 Alembic migration 或 SQL 脚本);生产环境依赖当前项目的启动自动建表机制。

相关文件:backend/packages/app/src/windup_app/server/style_preset/model.pybackend/packages/app/src/windup_app/bootstrap/app.pybackend/packages/app/src/windup_app/bootstrap/worker.pybackend/tests/conftest.py

@fennoai

当前是如何做数据库迁移的?

自动建表和数据库表字段变更在当前项目需要怎么做?

@fennoai

fennoai Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

结论

当前项目没有使用 Alembic 或其他版本化数据库迁移工具,也没有发现迁移目录、迁移脚本或独立 SQL migration 命令。

  • ORM 模型统一继承 windup_framework.db.Base
  • API 服务启动时在 backend/packages/app/src/windup_app/bootstrap/app.py:86 调用 Base.metadata.create_all(engine)
  • Worker 启动时也在 backend/packages/app/src/windup_app/bootstrap/worker.py:48 调用同样的自动建表逻辑。
  • 因此 PR feat(style-preset): 增加画风预设目录表与接口 #614 中导入 StylePreset 后,启动时会自动创建缺失的 windup_style_preset 表。

自动建表的边界

create_all 只负责创建不存在的表,通常不会把已有表自动升级到新模型定义。例如:

  • 新增表:可以由服务启动自动创建。
  • 已有表新增字段:不会自动执行 ALTER TABLE ADD COLUMN
  • 修改字段类型、删除字段、重命名字段、修改约束或索引:不会自动完成,也不会提供数据迁移和回滚。

当前项目字段变更做法

目前需要由开发者编写并执行针对生产数据库的 SQL,例如:

ALTER TABLE windup_style_preset
ADD COLUMN example_field TEXT NOT NULL DEFAULT '';

建议流程是:

  1. 修改 ORM 模型。
  2. 编写对应的、可审查的 SQL 脚本,先处理已有数据和默认值,再添加 NOT NULL 或约束。
  3. 在备份或测试数据库上验证,并确认升级 SQL 可重复执行或明确只执行一次。
  4. 先执行数据库变更,再发布依赖新字段的应用代码;破坏性变更采用“先兼容、后清理”的两阶段发布。
  5. 将脚本纳入仓库并记录执行版本;目前没有自动记录版本的机制,需要人工维护。

从长期维护看,建议引入 Alembic:为每次模型变更生成 revision,部署时执行 alembic upgrade head,并在 CI 中验证从空库和历史数据库都能升级。这样可以替代目前对手工 SQL 和启动 create_all 的依赖。

运营可配置画风种类、参考图、提示词和精灵尺寸。前端用列表接口选档,把字段填回项目已有约束。

Refs 1024XEngineer#475
省略字段仍可部分更新;传入 null 时返回 400,避免写入非空列后 500。
rebase 到 main 后按现有应用重导 OpenAPI。
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

Deployment failed for project windup with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/huyan-s-projects1?upgradeToPro=build-rate-limit

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.

proposal: 画风改为受控档位,像素与否自动判定

4 participants