127 lines
3.6 KiB
Go
127 lines
3.6 KiB
Go
package area
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
|
coreService "github.com/go-admin-team/go-admin-core/sdk/service"
|
|
)
|
|
|
|
type API struct{ api.Api }
|
|
|
|
func (e *API) service(c *gin.Context) (*Service, error) {
|
|
base := coreService.Service{}
|
|
if err := e.MakeContext(c).MakeOrm().MakeService(&base).Errors; err != nil {
|
|
return nil, err
|
|
}
|
|
return NewService(base.Orm), nil
|
|
}
|
|
|
|
func (e *API) List(c *gin.Context) {
|
|
service, err := e.service(c)
|
|
if err != nil {
|
|
e.Error(http.StatusInternalServerError, err, "区域配置服务初始化失败")
|
|
return
|
|
}
|
|
pageIndex, _ := strconv.Atoi(c.DefaultQuery("pageIndex", "1"))
|
|
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
|
items, total, err := service.List(c.Request.Context(), PageRequest{Keyword: c.Query("keyword"), Kind: c.Query("kind"), RecalibrationState: c.Query("recalibrationState"), PageIndex: pageIndex, PageSize: pageSize})
|
|
if err != nil {
|
|
e.writeError(err)
|
|
return
|
|
}
|
|
e.PageOK(items, int(total), pageIndex, pageSize, "查询成功")
|
|
}
|
|
|
|
func (e *API) Create(c *gin.Context) {
|
|
service, err := e.service(c)
|
|
if err != nil {
|
|
e.Error(http.StatusInternalServerError, err, "区域配置服务初始化失败")
|
|
return
|
|
}
|
|
var request UpsertRequest
|
|
if err = decodeJSON(c, &request); err != nil {
|
|
e.Error(http.StatusBadRequest, err, "请求内容格式不正确")
|
|
return
|
|
}
|
|
request.UpdateBy = user.GetUserId(c)
|
|
item, err := service.Create(c.Request.Context(), request)
|
|
if err != nil {
|
|
e.writeError(err)
|
|
return
|
|
}
|
|
e.OK(item, "区域配置已创建")
|
|
}
|
|
|
|
func (e *API) Update(c *gin.Context) {
|
|
service, err := e.service(c)
|
|
if err != nil {
|
|
e.Error(http.StatusInternalServerError, err, "区域配置服务初始化失败")
|
|
return
|
|
}
|
|
var request UpsertRequest
|
|
if err = decodeJSON(c, &request); err != nil {
|
|
e.Error(http.StatusBadRequest, err, "请求内容格式不正确")
|
|
return
|
|
}
|
|
request.UpdateBy = user.GetUserId(c)
|
|
item, err := service.Update(c.Request.Context(), c.Param("id"), request)
|
|
if err != nil {
|
|
e.writeError(err)
|
|
return
|
|
}
|
|
e.OK(item, "已保存新版本")
|
|
}
|
|
|
|
func (e *API) Versions(c *gin.Context) {
|
|
service, err := e.service(c)
|
|
if err != nil {
|
|
e.Error(http.StatusInternalServerError, err, "区域配置服务初始化失败")
|
|
return
|
|
}
|
|
items, err := service.Versions(c.Request.Context(), c.Param("id"))
|
|
if err != nil {
|
|
e.writeError(err)
|
|
return
|
|
}
|
|
e.OK(items, "查询成功")
|
|
}
|
|
|
|
func (e *API) writeError(err error) {
|
|
switch {
|
|
case errors.Is(err, ErrInvalidRequest), errors.Is(err, ErrInvalidGeometry):
|
|
e.Error(http.StatusBadRequest, err, err.Error())
|
|
case errors.Is(err, ErrNotFound), errors.Is(err, ErrProfileMissing):
|
|
e.Error(http.StatusNotFound, err, err.Error())
|
|
case errors.Is(err, ErrConflict):
|
|
e.Error(http.StatusConflict, err, err.Error())
|
|
default:
|
|
e.Error(http.StatusInternalServerError, err, "区域配置操作失败")
|
|
}
|
|
}
|
|
|
|
func decodeJSON(c *gin.Context, target any) error {
|
|
if !strings.HasPrefix(strings.ToLower(strings.TrimSpace(c.GetHeader("Content-Type"))), "application/json") {
|
|
return errors.New("content type must be application/json")
|
|
}
|
|
decoder := json.NewDecoder(http.MaxBytesReader(c.Writer, c.Request.Body, 64<<10))
|
|
decoder.DisallowUnknownFields()
|
|
if err := decoder.Decode(target); err != nil {
|
|
return err
|
|
}
|
|
if err := decoder.Decode(&struct{}{}); !errors.Is(err, io.EOF) {
|
|
if err == nil {
|
|
return errors.New("request body must contain one JSON object")
|
|
}
|
|
return err
|
|
}
|
|
return nil
|
|
}
|