56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package handlers
|
|
|
|
import (
|
|
"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"
|
|
)
|
|
|
|
// FramePromptHandler 处理帧提示词生成请求
|
|
type FramePromptHandler struct {
|
|
framePromptService *services.FramePromptService
|
|
log *logger.Logger
|
|
}
|
|
|
|
// NewFramePromptHandler 创建帧提示词处理器
|
|
func NewFramePromptHandler(framePromptService *services.FramePromptService, log *logger.Logger) *FramePromptHandler {
|
|
return &FramePromptHandler{
|
|
framePromptService: framePromptService,
|
|
log: log,
|
|
}
|
|
}
|
|
|
|
// GenerateFramePrompt 生成指定类型的帧提示词
|
|
// POST /api/v1/storyboards/:id/frame-prompt
|
|
func (h *FramePromptHandler) GenerateFramePrompt(c *gin.Context) {
|
|
storyboardID := c.Param("id")
|
|
|
|
var req struct {
|
|
FrameType string `json:"frame_type" binding:"required"` // first, key, last, panel, action
|
|
PanelCount int `json:"panel_count"`
|
|
}
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.BadRequest(c, "Invalid request body")
|
|
return
|
|
}
|
|
|
|
// 构建请求
|
|
serviceReq := services.GenerateFramePromptRequest{
|
|
StoryboardID: storyboardID,
|
|
FrameType: services.FrameType(req.FrameType),
|
|
PanelCount: req.PanelCount,
|
|
}
|
|
|
|
// 生成提示词
|
|
result, err := h.framePromptService.GenerateFramePrompt(serviceReq)
|
|
if err != nil {
|
|
h.log.Errorw("Failed to generate frame prompt", "error", err)
|
|
response.InternalError(c, err.Error())
|
|
return
|
|
}
|
|
|
|
response.Success(c, result)
|
|
}
|