70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package http
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"gitlink.org.cn/cloudream/common/consts/errorcode"
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
"gitlink.org.cn/cloudream/common/utils/serder"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
type JobService struct {
|
|
*Server
|
|
}
|
|
|
|
type CreateInstanceResp struct {
|
|
InstanceID schsdk.JobID `json:"instanceID"`
|
|
UploadScheme schsdk.JobFilesUploadScheme `json:"uploadScheme"`
|
|
}
|
|
|
|
type CreateInstanceReq struct {
|
|
JobID schsdk.JobID `json:"jobID" binding:"required"`
|
|
LocalPath schsdk.JobFileInfo `json:"localPath" binding:"required"`
|
|
}
|
|
|
|
func (s *Server) JobSvc() *JobService {
|
|
return &JobService{
|
|
Server: s,
|
|
}
|
|
}
|
|
|
|
func (s *JobService) CreateInstance(ctx *gin.Context) {
|
|
log := logger.WithField("HTTP", "JobSet.HTTP")
|
|
|
|
//var req CreateInstanceReq
|
|
//if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
// log.Warnf("binding body: %s", err.Error())
|
|
// ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
|
|
// return
|
|
//}
|
|
|
|
bodyData, err := io.ReadAll(ctx.Request.Body)
|
|
if err != nil {
|
|
log.Warnf("reading request body: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "read request body failed"))
|
|
return
|
|
}
|
|
|
|
req, err := serder.JSONToObjectEx[CreateInstanceReq](bodyData)
|
|
if err != nil {
|
|
log.Warnf("parsing request body: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "parse request body failed"))
|
|
return
|
|
}
|
|
|
|
jobID, filesUploadScheme, err := s.svc.JobSetSvc().CreateInstance(req.JobID, req.LocalPath)
|
|
if err != nil {
|
|
log.Warnf("create job instance: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "create job instance failed"))
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, OK(CreateInstanceResp{
|
|
InstanceID: jobID,
|
|
UploadScheme: filesUploadScheme,
|
|
}))
|
|
|
|
}
|