diff --git a/api/handlers/scene.go b/api/handlers/scene.go index 1367992..cf9fa4f 100644 --- a/api/handlers/scene.go +++ b/api/handlers/scene.go @@ -74,6 +74,28 @@ func (h *SceneHandler) GenerateSceneImage(c *gin.Context) { }) } +func (h *SceneHandler) UpdateScenePrompt(c *gin.Context) { + sceneID := c.Param("scene_id") + + var req services2.UpdateScenePromptRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "Invalid request") + return + } + + if err := h.sceneService.UpdateScenePrompt(sceneID, &req); err != nil { + h.log.Errorw("Failed to update scene prompt", "error", err, "scene_id", sceneID) + if err.Error() == "scene not found" { + response.NotFound(c, "场景不存在") + return + } + response.InternalError(c, err.Error()) + return + } + + response.Success(c, gin.H{"message": "场景提示词已更新"}) +} + func (h *SceneHandler) DeleteScene(c *gin.Context) { sceneID := c.Param("scene_id") diff --git a/api/routes/routes.go b/api/routes/routes.go index 295e7d4..a97fc92 100644 --- a/api/routes/routes.go +++ b/api/routes/routes.go @@ -137,6 +137,7 @@ func SetupRouter(cfg *config.Config, db *gorm.DB, log *logger.Logger, localStora scenes := api.Group("/scenes") { scenes.PUT("/:scene_id", sceneHandler.UpdateScene) + scenes.PUT("/:scene_id/prompt", sceneHandler.UpdateScenePrompt) scenes.DELETE("/:scene_id", sceneHandler.DeleteScene) scenes.POST("/generate-image", sceneHandler.GenerateSceneImage) } diff --git a/application/services/storyboard_composition_service.go b/application/services/storyboard_composition_service.go index 0b203c3..9264729 100644 --- a/application/services/storyboard_composition_service.go +++ b/application/services/storyboard_composition_service.go @@ -399,6 +399,28 @@ func (s *StoryboardCompositionService) GenerateSceneImage(req *GenerateSceneImag return nil, fmt.Errorf("image generation service not available") } +type UpdateScenePromptRequest struct { + Prompt string `json:"prompt"` +} + +func (s *StoryboardCompositionService) UpdateScenePrompt(sceneID string, req *UpdateScenePromptRequest) error { + var scene models.Scene + if err := s.db.Where("id = ?", sceneID).First(&scene).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return fmt.Errorf("scene not found") + } + return fmt.Errorf("failed to find scene: %w", err) + } + + scene.Prompt = req.Prompt + if err := s.db.Save(&scene).Error; err != nil { + return fmt.Errorf("failed to update scene prompt: %w", err) + } + + s.log.Infow("Scene prompt updated", "scene_id", sceneID, "prompt", req.Prompt) + return nil +} + func (s *StoryboardCompositionService) DeleteScene(sceneID string) error { var scene models.Scene if err := s.db.Where("id = ?", sceneID).First(&scene).Error; err != nil { diff --git a/web/src/api/drama.ts b/web/src/api/drama.ts index 34a3acf..12d0cfa 100644 --- a/web/src/api/drama.ts +++ b/web/src/api/drama.ts @@ -108,8 +108,12 @@ export const dramaAPI = { return request.put(`/scenes/${sceneId}`, data) }, - generateSceneImage(data: { scene_id: string; prompt?: string; model?: string }) { - return request.post('/scenes/generate-image', data) + generateSceneImage(data: { scene_id: number; prompt?: string; model?: string }) { + return request.post<{ image_generation: { id: number } }>('/scenes/generate-image', data) + }, + + updateScenePrompt(sceneId: string, prompt: string) { + return request.put(`/scenes/${sceneId}/prompt`, { prompt }) }, deleteScene(sceneId: string) { diff --git a/web/src/locales/zh-CN.ts b/web/src/locales/zh-CN.ts index 8eeaa5f..bd8bd14 100644 --- a/web/src/locales/zh-CN.ts +++ b/web/src/locales/zh-CN.ts @@ -68,7 +68,9 @@ export default { tip: '提示', status: '状态', createdAt: '创建时间', - updatedAt: '更新时间' + updatedAt: '更新时间', + name: '名称', + description: '描述' }, settings: { title: '设置', diff --git a/web/src/views/drama/DramaManagement.vue b/web/src/views/drama/DramaManagement.vue index 8bf61d7..41fcd43 100644 --- a/web/src/views/drama/DramaManagement.vue +++ b/web/src/views/drama/DramaManagement.vue @@ -241,10 +241,10 @@ - + - +