pcm-participant/client/api/cloud.go

95 lines
2.6 KiB
Go

package api
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"gitlink.org.cn/JointCloud/pcm-participant-cloud/container"
"gitlink.org.cn/JointCloud/pcm-participant-cloud/service"
"gitlink.org.cn/JointCloud/pcm-participant-k8s/model"
"net/http"
"strings"
"sync"
)
type cloudApi struct {
*Api
svcLock sync.RWMutex
service *service.Service
}
var CloudApi = cloudApi{
Api: BaseApi,
}
func (a *cloudApi) RegisterSvc(svc *service.Service) {
a.svcLock.Lock()
defer a.svcLock.Unlock()
a.service = svc
}
func (c *cloudApi) CreateContainerHandler(ctx *gin.Context) {
pfId := ctx.Query("pfId")
var param container.CreateParam
if err := ctx.ShouldBindJSON(&param); err != nil {
if ve, ok := err.(validator.ValidationErrors); ok {
var errorMsg []string
for _, e := range ve {
errorMsg = append(errorMsg, fmt.Sprintf("字段 %s 验证失败: %s", e.Field(), e.Tag()))
}
model.Response(ctx, http.StatusBadRequest, "请求体格式错误: "+strings.Join(errorMsg, "; "), nil)
} else {
model.Response(ctx, http.StatusBadRequest, "请求体解析失败: "+err.Error(), nil)
}
return
}
fmt.Println(c.service)
createContainer, err := c.service.CreateContainer(ctx.Request.Context(), pfId, &param)
if err != nil {
model.Response(ctx, http.StatusInternalServerError, err.Error(), nil)
return
}
model.Response(ctx, http.StatusOK, "success", createContainer)
}
func (c *cloudApi) DeleteContainerHandler(ctx *gin.Context) {
pfId := ctx.Query("pfId")
var param container.DeleteParam
if err := ctx.ShouldBindJSON(&param); err != nil {
if ve, ok := err.(validator.ValidationErrors); ok {
var errorMsg []string
for _, e := range ve {
errorMsg = append(errorMsg, fmt.Sprintf("字段 %s 验证失败: %s", e.Field(), e.Tag()))
}
model.Response(ctx, http.StatusBadRequest, "请求体格式错误: "+strings.Join(errorMsg, "; "), nil)
} else {
model.Response(ctx, http.StatusBadRequest, "请求体解析失败: "+err.Error(), nil)
}
return
}
err := c.service.DeleteContainer(ctx.Request.Context(), pfId, &param)
if err != nil {
model.Response(ctx, http.StatusInternalServerError, err, nil)
return
}
model.Response(ctx, http.StatusOK, "success", nil)
}
func (c *cloudApi) GetContainerHandler(ctx *gin.Context) {
pfId := ctx.Query("pfId")
name := ctx.Query("name")
param := container.GetParam{
Name: name,
}
getContainer, err := c.service.GetContainer(ctx.Request.Context(), pfId, &param)
if err != nil {
model.Response(ctx, http.StatusInternalServerError, err, nil)
return
}
model.Response(ctx, http.StatusOK, "success", getContainer)
}