package controller
import (
"fmt"
"net/http"
"strconv"
"strings"
"github.com/go-chi/chi"
"github.com/goodrain/rainbond/api/handler"
api_model "github.com/goodrain/rainbond/api/model"
httputil "github.com/goodrain/rainbond/util/http"
"github.com/jinzhu/gorm"
)
func VolumeOptions(w http.ResponseWriter, r *http.Request) {
volumetypeOptions, err := handler.GetVolumeTypeHandler().GetAllVolumeTypes()
if err != nil {
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, volumetypeOptions)
}
func ListVolumeType(w http.ResponseWriter, r *http.Request) {
pageStr := strings.TrimSpace(chi.URLParam(r, "page"))
pageSizeCul := strings.TrimSpace(chi.URLParam(r, "pageSize"))
page, err := strconv.Atoi(pageStr)
if err != nil {
httputil.ReturnError(r, w, 400, fmt.Sprintf("bad request, %v", err))
return
}
pageSize, err := strconv.Atoi(pageSizeCul)
if err != nil {
httputil.ReturnError(r, w, 400, fmt.Sprintf("bad request, %v", err))
return
}
volumetypeOptions, er := handler.GetVolumeTypeHandler().GetAllVolumeTypes()
volumetypePageOptions, err := handler.GetVolumeTypeHandler().GetAllVolumeTypesByPage(page, pageSize)
if err != nil || er != nil {
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, map[string]interface{}{
"data": volumetypePageOptions,
"page": page,
"page_size": pageSize,
"count": len(volumetypeOptions),
})
}
func VolumeSetVar(w http.ResponseWriter, r *http.Request) {
volumeType := api_model.VolumeTypeStruct{}
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &volumeType, nil); !ok {
return
}
err := handler.GetVolumeTypeHandler().SetVolumeType(&volumeType)
if err != nil {
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, nil)
}
func DeleteVolumeType(w http.ResponseWriter, r *http.Request) {
volumeType := chi.URLParam(r, "volume_type")
err := handler.GetVolumeTypeHandler().DeleteVolumeType(volumeType)
if err != nil {
if err == gorm.ErrRecordNotFound {
httputil.ReturnError(r, w, 404, "not found")
return
}
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, nil)
}
func UpdateVolumeType(w http.ResponseWriter, r *http.Request) {
volumeTypeID := chi.URLParam(r, "volume_type")
volumeType := api_model.VolumeTypeStruct{}
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &volumeType, nil); !ok {
return
}
volume, err := handler.GetVolumeTypeHandler().GetVolumeTypeByType(volumeTypeID)
if err == nil {
if volume == nil {
httputil.ReturnError(r, w, 404, "not found")
return
}
if updateErr := handler.GetVolumeTypeHandler().UpdateVolumeType(volume, &volumeType); updateErr != nil {
httputil.ReturnError(r, w, 500, err.Error())
}
httputil.ReturnSuccess(r, w, nil)
}
httputil.ReturnError(r, w, 500, err.Error())
}