Files
gen2d/backend/internal/handler/edit.go
T
wonder 25c11ed649 refactor: 全面集成 slog 日志到 handler、service、middleware
- cmd/main.go: 集成 logger.Init 和日志中间件,替换标准 log 包
- handler 层: 5xx 错误记录完整日志,返回通用消息(防内部信息泄露)
- service 层: LLM/图片生成/存储/认证等关键操作补充结构化日志
- auth 中间件: 记录认证失败原因
- generate.go: 后台管线任务使用带 task_id 的 logger
2026-05-25 14:31:04 +08:00

68 lines
1.8 KiB
Go
Executable File

package handler
import (
"encoding/base64"
"net/http"
"gen2d/internal/logger"
"gen2d/internal/model"
"gen2d/internal/service"
"github.com/gin-gonic/gin"
)
// EditImageRequest 图片编辑请求。
type EditImageRequest struct {
Image string `json:"image" binding:"required"` // 底图 base64 编码
Prompt string `json:"prompt" binding:"required"` // 编辑指令
Count int `json:"count"` // 生成数量,默认 1
}
// editAssetResponse 编辑结果素材(返回 base64)。
type editAssetResponse struct {
Data string `json:"data"`
Format string `json:"format"`
}
// EditImageResponse 图片编辑响应体。
type EditImageResponse struct {
Assets []editAssetResponse `json:"assets"`
}
// EditImage 图片编辑接口,基于已有图片和文本指令生成修改后的图片。
func EditImage(c *gin.Context) {
var req EditImageRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, model.Fail(http.StatusBadRequest, "参数错误: "+err.Error()))
return
}
imageData, err := base64.StdEncoding.DecodeString(req.Image)
if err != nil {
c.JSON(http.StatusBadRequest, model.Fail(http.StatusBadRequest, "图片 base64 解码失败"))
return
}
count := req.Count
if count <= 0 {
count = 1
}
images, err := service.EditImages(c.Request.Context(), imageData, req.Prompt, count)
if err != nil {
logger.FromCtx(c.Request.Context()).Error("图片编辑失败", "error", err)
c.JSON(http.StatusInternalServerError, model.Fail(http.StatusInternalServerError, "图片编辑失败"))
return
}
assets := make([]editAssetResponse, len(images))
for i, img := range images {
assets[i] = editAssetResponse{
Data: base64.StdEncoding.EncodeToString(img.Data),
Format: img.Format,
}
}
c.JSON(http.StatusOK, model.OK(EditImageResponse{Assets: assets}))
}