rts-sim-testing-service/api/drafting.go
2023-10-26 17:16:07 +08:00

243 lines
7.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package api
import (
"net/http"
"strconv"
jwt "github.com/appleboy/gin-jwt/v2"
"github.com/gin-gonic/gin"
"google.golang.org/protobuf/proto"
"joylink.club/bj-rtsts-server/db/model"
"joylink.club/bj-rtsts-server/dto"
"joylink.club/bj-rtsts-server/middleware"
"joylink.club/bj-rtsts-server/service"
"joylink.club/bj-rtsts-server/sys_error"
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
"joylink.club/bj-rtsts-server/ts/simulation/wayside/memory"
)
func InitDraftingRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
authed := api.Group("/v1/drafting").Use(authMiddleware.MiddlewareFunc(), middleware.PermissMiddleware)
authed.GET("/paging", pageQueryDrafting)
authed.GET("/list", listQueryDrafting)
authed.POST("", createDrafting)
authed.POST("/:id/saveAs", saveAsDrafting)
authed.GET("/:id", queryDraftingInfo)
authed.PUT("/:id", updateDraftingInfo)
authed.DELETE("/:id", deleteDrafting)
authed.POST("/calculatelink", generateCalculateLinkData)
}
// 分页查询草稿
//
// @Summary 分页查询草稿
//
// @Security JwtAuth
//
// @Description 可以通过草稿名称过滤,分页查询草稿
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param PageDraftingReqDto query dto.PageDraftingReqDto true "草稿查询条件带分页信息"
// @Success 200 {object} dto.PageDto
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/paging [get]
func pageQueryDrafting(c *gin.Context) {
req := dto.PageDraftingReqDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("查询失败,参数格式错误", err))
}
c.JSON(http.StatusOK, service.PageDraftingQuery(&req))
}
// 列表查询草稿
//
// @Summary 列表查询草稿
//
// @Security JwtAuth
//
// @Description 可以通过草稿类型过滤,列表查询草稿
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param ListDraftingReqDto query dto.ListDraftingReqDto true "草稿查询条件带分页信息"
// @Success 200 {object} dto.PageDto
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/list [get]
func listQueryDrafting(c *gin.Context) {
req := dto.ListDraftingReqDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("查询失败,参数格式错误", err))
}
c.JSON(http.StatusOK, service.ListDraftingQuery(&req))
}
// 创建草稿
//
// @Summary 创建草稿
//
// @Security JwtAuth
//
// @Description 创建草稿数据
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param draftingDto query dto.DraftingDto true "创建的草稿信息"
// @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting [post]
func createDrafting(c *gin.Context) {
user, _ := c.Get(middleware.IdentityKey)
createId := user.(*model.User).ID
req := dto.DraftingDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("创建失败,参数格式错误", err))
}
c.JSON(http.StatusOK, service.CreateDrafting(createId, &req))
}
// 草稿另存为
//
// @Summary 草稿另存为
//
// @Security JwtAuth
//
// @Description 草稿另存为
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param id path int true "源草稿id"
// @Param draftingDto query dto.DraftingDto true "另存为草稿信息"
// @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/{id}/saveAs [post]
func saveAsDrafting(c *gin.Context) {
id, exist := c.Params.Get("id")
if !exist {
panic(sys_error.New("另存为失败,缺少主键"))
}
user, _ := c.Get(middleware.IdentityKey)
createrId := user.(*model.User).ID
req := dto.DraftingDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("另存为失败,参数格式错误", err))
}
int64Id, _ := strconv.ParseInt(id, 10, 64)
c.JSON(http.StatusOK, service.SaveAsDrafting(createrId, int32(int64Id), &req))
}
// 查询草稿详情
//
// @Summary 查询草稿详情
//
// @Security JwtAuth
//
// @Description 查询草稿详情
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param id path int true "草稿ID"
// @Success 200 {object} model.Drafting
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/{id} [get]
func queryDraftingInfo(c *gin.Context) {
id, exist := c.Params.Get("id")
if !exist {
panic(sys_error.New("查询失败,缺少主键"))
}
int64Id, _ := strconv.ParseInt(id, 10, 64)
c.JSON(http.StatusOK, service.QueryDrafting(int32(int64Id)))
}
// 修改草稿信息
//
// @Summary 修改草稿信息
//
// @Security JwtAuth
//
// @Description 修改草稿信息
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param id path int true "草稿ID"
// @Param draftingDto query dto.DraftingDto true "修改的草稿信息"
// @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/{id} [put]
func updateDraftingInfo(c *gin.Context) {
id, exist := c.Params.Get("id")
if !exist {
panic(sys_error.New("更新失败,缺少主键"))
}
req := dto.DraftingDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("更新失败,参数格式错误", err))
}
int64Id, _ := strconv.ParseInt(id, 10, 64)
c.JSON(http.StatusOK, service.UpdateDrafting(int32(int64Id), &req))
}
// 删除草稿数据
//
// @Summary 删除草稿数据
//
// @Security JwtAuth
//
// @Description 删除草稿数据
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param id path int true "草稿ID"
// @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/{id} [delete]
func deleteDrafting(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.Atoi(idStr)
if err != nil {
panic(sys_error.New("删除失败,主键格式错误", err))
}
service.DeleteDraftingById(id)
c.JSON(http.StatusOK, true)
}
// 根据地图数据新生成计算的link信息
//
// @Summary 根据地图数据新生成计算的link信息
//
// @Security JwtAuth
//
// @Description 根据地图数据新生成计算的link信息
// @Tags 草稿Api
// @Accept json
// @Produce json
// @Param DraftingMapDataDto query dto.DraftingMapDataDto true "地图信息"
// @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto
// @Failure 404 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto
// @Router /api/v1/drafting/calculatelink [post]
func generateCalculateLinkData(c *gin.Context) {
req := dto.DraftingMapDataDto{}
if err := c.ShouldBind(&req); err != nil {
panic(sys_error.New("link生成失败参数格式错误", err))
}
gd := &graphicData.RtssGraphicStorage{}
proto.Unmarshal(req.Proto, gd)
c.JSON(http.StatusOK, memory.BuildCalculateLinkData(gd))
}