Ctrl K
ComunidadGuías…

api/controller/vm_export.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package controller

import (
	"encoding/json"
	"net/http"

	"github.com/go-chi/chi"
	"github.com/goodrain/rainbond/api/handler"
	ctxutil "github.com/goodrain/rainbond/api/util/ctx"
	httputil "github.com/goodrain/rainbond/util/http"
)

type VMExportController struct {
	createExport func(serviceID string, req *handler.VMExportRequest) (*handler.VMExportStatus, error)
	getExport    func(serviceID, exportName string) (*handler.VMExportStatus, error)
}

var defaultVMExportController = &VMExportController{}

func GetVMExportController() *VMExportController {
	return defaultVMExportController
}

func (c *VMExportController) CreateVMExport(w http.ResponseWriter, r *http.Request) {
	serviceID := r.Context().Value(ctxutil.ContextKey("service_id")).(string)
	var reqBody handler.VMExportRequest
	if err := json.NewDecoder(r.Body).Decode(&reqBody); err != nil {
		httputil.ReturnError(r, w, http.StatusBadRequest, "invalid request body")
		return
	}
	if reqBody.Name == "" {
		httputil.ReturnError(r, w, http.StatusBadRequest, "export name is required")
		return
	}
	createExport := c.createExport
	if createExport == nil {
		createExport = handler.GetServiceManager().CreateVMExport
	}
	status, err := createExport(serviceID, &reqBody)
	if err != nil {
		httputil.ReturnError(r, w, http.StatusInternalServerError, err.Error())
		return
	}
	httputil.ReturnSuccess(r, w, status)
}

func (c *VMExportController) GetVMExport(w http.ResponseWriter, r *http.Request) {
	serviceID := r.Context().Value(ctxutil.ContextKey("service_id")).(string)
	exportName := chi.URLParam(r, "name")
	if exportName == "" {
		httputil.ReturnError(r, w, http.StatusBadRequest, "export name is required")
		return
	}
	getExport := c.getExport
	if getExport == nil {
		getExport = handler.GetServiceManager().GetVMExport
	}
	status, err := getExport(serviceID, exportName)
	if err != nil {
		httputil.ReturnError(r, w, http.StatusInternalServerError, err.Error())
		return
	}
	httputil.ReturnSuccess(r, w, status)
}

func (t *TenantStruct) CreateVMExport(w http.ResponseWriter, r *http.Request) {
	GetVMExportController().CreateVMExport(w, r)
}

func (t *TenantStruct) GetVMExport(w http.ResponseWriter, r *http.Request) {
	GetVMExportController().GetVMExport(w, r)
}