feat: 添加 ImageGeneration 和 GetImageJob 接口

This commit is contained in:
zerosaturation 2026-04-08 00:04:35 +08:00
parent 76a5eaaad9
commit 40d5e597f6

View File

@ -31,11 +31,13 @@ import (
"go.uber.org/zap"
"github.com/topfans/backend/pkg/logger"
"github.com/topfans/backend/services/assetService/service"
)
// AssetController 资产相关控制器
type AssetController struct {
assetService pbAsset.AssetService
minimaxService service.MinimaxService
}
// NewAssetController 创建资产控制器
@ -48,6 +50,7 @@ func NewAssetController(dubboClient *client.Client) (*AssetController, error) {
return &AssetController{
assetService: assetService,
minimaxService: service.NewMinimaxService(nil),
}, nil
}
@ -1407,3 +1410,81 @@ func (ctrl *AssetController) listOSSImageFiles(
return files, nil
}
// ImageGeneration 创建图生图任务
// @Summary 图生图
// @Description 创建图生图任务
// @Tags assets
// @Accept json
// @Produce json
// @Security BearerAuth
// @Param request body dto.ImageGenerationRequest true "图生图请求"
// @Success 202 {object} response.Response
// @Router /api/v1/assets/mints/image/generation [post]
func (ctrl *AssetController) ImageGeneration(c *gin.Context) {
var req dto.ImageGenerationRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.Error(c, 400, "Invalid request: "+err.Error())
return
}
userID := c.GetInt64("userID")
starID := c.GetInt64("starID")
job, err := ctrl.minimaxService.CreateJob(c.Request.Context(), userID, starID, &req)
if err != nil {
response.Error(c, 500, "Failed to create job: "+err.Error())
return
}
c.JSON(202, gin.H{"code": 202, "message": "ok", "data": &dto.ImageJobCreateResponse{
JobID: job.JobID,
Status: string(job.Status),
CreatedAt: job.CreatedAt,
}})
}
// GetImageJob 查询图生图任务状态
// @Summary 查询图生图任务
// @Description 查询图生图任务状态和结果
// @Tags assets
// @Produce json
// @Security BearerAuth
// @Param job_id path string true "任务ID"
// @Success 200 {object} response.Response
// @Router /api/v1/assets/mints/image/generation/{job_id} [get]
func (ctrl *AssetController) GetImageJob(c *gin.Context) {
jobID := c.Param("job_id")
if jobID == "" {
response.Error(c, 400, "job_id is required")
return
}
userID := c.GetInt64("userID")
starID := c.GetInt64("starID")
job, err := ctrl.minimaxService.GetJob(c.Request.Context(), jobID, userID, starID)
if err != nil {
if strings.Contains(err.Error(), "not found") {
response.Error(c, 404, "Job not found")
return
}
if strings.Contains(err.Error(), "access denied") {
response.Error(c, 403, "Access denied")
return
}
response.Error(c, 500, "Failed to get job: "+err.Error())
return
}
response.Success(c, &dto.ImageJobResponse{
JobID: job.JobID,
Status: string(job.Status),
Progress: job.Progress,
Images: job.Images,
ErrorMsg: job.ErrorMsg,
CreatedAt: job.CreatedAt,
UpdatedAt: job.UpdatedAt,
CompletedAt: job.CompletedAt,
})
}