package handlers import ( services2 "github.com/drama-generator/backend/application/services" "github.com/drama-generator/backend/pkg/logger" "github.com/drama-generator/backend/pkg/response" "github.com/gin-gonic/gin" "gorm.io/gorm" ) type SceneHandler struct { sceneService *services2.StoryboardCompositionService log *logger.Logger } func NewSceneHandler(db *gorm.DB, log *logger.Logger, imageGenService *services2.ImageGenerationService) *SceneHandler { return &SceneHandler{ sceneService: services2.NewStoryboardCompositionService(db, log, imageGenService), log: log, } } func (h *SceneHandler) GetStoryboardsForEpisode(c *gin.Context) { episodeID := c.Param("episode_id") storyboards, err := h.sceneService.GetScenesForEpisode(episodeID) if err != nil { h.log.Errorw("Failed to get storyboards for episode", "error", err, "episode_id", episodeID) response.InternalError(c, err.Error()) return } response.Success(c, gin.H{ "storyboards": storyboards, "total": len(storyboards), }) } func (h *SceneHandler) UpdateScene(c *gin.Context) { sceneID := c.Param("scene_id") var req services2.UpdateSceneRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "Invalid request") return } if err := h.sceneService.UpdateScene(sceneID, &req); err != nil { h.log.Errorw("Failed to update scene", "error", err, "scene_id", sceneID) response.InternalError(c, err.Error()) return } response.Success(c, gin.H{"message": "Scene updated successfully"}) } func (h *SceneHandler) GenerateSceneImage(c *gin.Context) { var req services2.GenerateSceneImageRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "Invalid request") return } imageGen, err := h.sceneService.GenerateSceneImage(&req) if err != nil { h.log.Errorw("Failed to generate scene image", "error", err) response.InternalError(c, err.Error()) return } response.Success(c, gin.H{ "message": "Scene image generation started", "image_generation": imageGen, }) }