package handler import ( "fmt" "net/http" "strconv" "time" "kra/internal/server/httpx" "kra/internal/service" "kra/internal/service/dto" "github.com/gin-gonic/gin" ) type Version struct{ service *service.VersionService } func NewVersion(service *service.VersionService) *Version { return &Version{service: service} } func (h *Version) Delete(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) if err := h.service.DeleteVersions(c.Request.Context(), []uint{uint(id)}); err != nil { httpx.Fail(c, "删除失败") return } httpx.Write(c, httpx.CodeSuccess, gin.H{}, "删除成功") } func (h *Version) DeleteMany(c *gin.Context) { raw := c.QueryArray("IDs[]") ids := make([]uint, 0, len(raw)) for _, value := range raw { id, _ := strconv.ParseUint(value, 10, 64) ids = append(ids, uint(id)) } if err := h.service.DeleteVersions(c.Request.Context(), ids); err != nil { httpx.Fail(c, "删除失败") return } httpx.Write(c, httpx.CodeSuccess, gin.H{}, "批量删除成功") } func (h *Version) Find(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) item, err := h.service.Version(c.Request.Context(), uint(id)) if err != nil { httpx.Fail(c, "查询失败") return } httpx.OKWithData(c, item) } func (h *Version) List(c *gin.Context) { p, size := page(c) createdAtRange := make([]*time.Time, 0, 2) for _, raw := range c.QueryArray("createdAtRange[]") { value, parseErr := parseTime(raw) if parseErr != nil { httpx.Fail(c, parseErr.Error()) return } createdAtRange = append(createdAtRange, value) } items, total, err := h.service.Versions(c.Request.Context(), p, size, c.Query("versionName"), c.Query("versionCode"), createdAtRange) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, httpx.PageResult{List: items, Total: total, Page: p, PageSize: size}, "获取成功") } func (h *Version) Export(c *gin.Context) { var req dto.ExportVersionRequest if c.ShouldBindJSON(&req) != nil || req.VersionName == "" || req.VersionCode == "" { httpx.Fail(c, "参数错误") return } if err := h.service.Export(c.Request.Context(), req.VersionName, req.VersionCode, req.Description, req.MenuIDs, req.APIIDs, req.DictIDs); err != nil { httpx.Fail(c, "创建发版失败:"+err.Error()) return } httpx.Write(c, httpx.CodeSuccess, gin.H{}, "创建发版成功") } func (h *Version) Download(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) raw, code, err := h.service.VersionData(c.Request.Context(), uint(id)) if err != nil { httpx.Fail(c, "下载失败") return } name := fmt.Sprintf("version_%s_%s.json", code, time.Now().Format("20060102150405")) c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", name)) c.Data(http.StatusOK, "application/json; charset=utf-8", []byte(raw)) } func (h *Version) Import(c *gin.Context) { var req dto.ImportVersionRequest if c.ShouldBindJSON(&req) != nil { httpx.Fail(c, "参数错误") return } if err := h.service.ImportRequest(c.Request.Context(), &req); err != nil { httpx.Fail(c, "导入失败:"+err.Error()) return } httpx.Write(c, httpx.CodeSuccess, gin.H{}, "导入成功") }