调整图片画布路由和画布数据模型
将图片画布入口改为 /editor/canvas 新增 editor_canvas 表并关联 editor_project 默认画布 更新 project API 响应中的 canvas 快照兼容层 统一图片画布侧栏列表项和图标按钮组件 同步前端测试、SpacetimeDB bindings、技术文档和 TRACKING 记录
This commit is contained in:
@@ -12,6 +12,7 @@ pub struct EditorProjectRecord {
|
||||
pub project_id: String,
|
||||
pub owner_user_id: String,
|
||||
pub title: String,
|
||||
pub canvas: EditorCanvasRecord,
|
||||
pub viewport: EditorCanvasViewportRecord,
|
||||
pub layers: serde_json::Value,
|
||||
pub resources: Vec<EditorProjectResourceRecord>,
|
||||
@@ -19,6 +20,17 @@ pub struct EditorProjectRecord {
|
||||
pub updated_at: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct EditorCanvasRecord {
|
||||
pub canvas_id: String,
|
||||
pub project_id: String,
|
||||
pub title: String,
|
||||
pub viewport: EditorCanvasViewportRecord,
|
||||
pub layers: serde_json::Value,
|
||||
pub created_at: String,
|
||||
pub updated_at: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct EditorProjectResourceRecord {
|
||||
pub resource_id: String,
|
||||
@@ -178,19 +190,31 @@ pub(crate) fn map_editor_project_resource_procedure_result(
|
||||
fn map_editor_project_snapshot(
|
||||
snapshot: EditorProjectSnapshot,
|
||||
) -> Result<EditorProjectRecord, SpacetimeClientError> {
|
||||
let layers = serde_json::from_str(&snapshot.layers_json).map_err(|error| {
|
||||
let layers: serde_json::Value =
|
||||
serde_json::from_str(&snapshot.canvas.layers_json).map_err(|error| {
|
||||
SpacetimeClientError::validation_failed(format!("图片画布图层布局 JSON 无法解析:{error}"))
|
||||
})?;
|
||||
let viewport = EditorCanvasViewportRecord {
|
||||
x: snapshot.canvas.viewport.x,
|
||||
y: snapshot.canvas.viewport.y,
|
||||
scale: snapshot.canvas.viewport.scale,
|
||||
};
|
||||
let canvas = EditorCanvasRecord {
|
||||
canvas_id: snapshot.canvas.canvas_id,
|
||||
project_id: snapshot.canvas.project_id,
|
||||
title: snapshot.canvas.title,
|
||||
viewport: viewport.clone(),
|
||||
layers: layers.clone(),
|
||||
created_at: format_timestamp_micros(snapshot.canvas.created_at_micros),
|
||||
updated_at: format_timestamp_micros(snapshot.canvas.updated_at_micros),
|
||||
};
|
||||
|
||||
Ok(EditorProjectRecord {
|
||||
project_id: snapshot.project_id,
|
||||
owner_user_id: snapshot.owner_user_id,
|
||||
title: snapshot.title,
|
||||
viewport: EditorCanvasViewportRecord {
|
||||
x: snapshot.viewport.x,
|
||||
y: snapshot.viewport.y,
|
||||
scale: snapshot.viewport.scale,
|
||||
},
|
||||
canvas,
|
||||
viewport,
|
||||
layers,
|
||||
resources: snapshot
|
||||
.resources
|
||||
|
||||
Reference in New Issue
Block a user