From 980c81af1107f5d7deff6c465858836134f2a2c4 Mon Sep 17 00:00:00 2001 From: coward Date: Thu, 24 Oct 2024 16:55:31 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=E5=88=86=E7=B1=BB=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/api/admin/navigation_type.go | 73 +++++++++++++++++++++++++++++++ http/param/navigation.go | 9 ++++ http/router/admin.go | 8 +++- http/vo/navigation.go | 23 ++++------ service/navigation_type.go | 53 ++++++++++++++++++++++ 5 files changed, 151 insertions(+), 15 deletions(-) create mode 100644 http/api/admin/navigation_type.go create mode 100644 http/param/navigation.go create mode 100644 service/navigation_type.go diff --git a/http/api/admin/navigation_type.go b/http/api/admin/navigation_type.go new file mode 100644 index 0000000..d089fa1 --- /dev/null +++ b/http/api/admin/navigation_type.go @@ -0,0 +1,73 @@ +package admin + +import ( + "errors" + "github.com/gin-gonic/gin" + "website-nav/http/param" + "website-nav/http/response" + "website-nav/service" +) + +type NavigationType struct{} + +func NavigationTypeAPI() NavigationType { + return NavigationType{} +} + +// List +// @description: 分页列表 +// @receiver NavigationType +// @param c +func (NavigationType) List(c *gin.Context) { + var p param.Page + if err := c.ShouldBind(&p); err != nil { + response.R(c).Validator(err) + return + } + + data, total, err := service.NavigationType().List(p) + if err != nil { + response.R(c).FailedWithError(err) + return + } + + response.R(c).Paginate(data, total, p.Current, p.Size) +} + +// Save +// @description: 新增/保存分类 +// @receiver NavigationType +// @param c +func (NavigationType) Save(c *gin.Context) { + var p param.SaveNavigationType + if err := c.ShouldBind(&p); err != nil { + response.R(c).Validator(err) + return + } + + if err := service.NavigationType().CreateType(p); err != nil { + response.R(c).FailedWithError(err) + return + } + + response.R(c).OK() +} + +// Delete +// @description: 删除分类 +// @receiver NavigationType +// @param c +func (NavigationType) Delete(c *gin.Context) { + var id = c.Param("id") + if id == "" || id == "undefined" { + response.R(c).Validator(errors.New("id不能为空")) + return + } + + if err := service.NavigationType().Delete(id); err != nil { + response.R(c).FailedWithError(err) + return + } + + response.R(c).OK() +} diff --git a/http/param/navigation.go b/http/param/navigation.go new file mode 100644 index 0000000..71a1df6 --- /dev/null +++ b/http/param/navigation.go @@ -0,0 +1,9 @@ +package param + +// SaveNavigationType +// @description: 新增/编辑导航分类 +type SaveNavigationType struct { + Id string `json:"id" form:"id" binding:"omitempty"` + Name string `json:"name" form:"name" binding:"required"` + Icon string `json:"icon" form:"icon" binding:"required"` +} diff --git a/http/router/admin.go b/http/router/admin.go index 8da4b9e..5d0e220 100644 --- a/http/router/admin.go +++ b/http/router/admin.go @@ -47,5 +47,11 @@ func userAPI(r *gin.RouterGroup) { // @description: 导航分类API // @param r func navTypeAPI(r *gin.RouterGroup) { - + navType := r.Group("/nav-type") + navType.Use(middleware.Authorization()) + { + navType.GET("/list", admin.NavigationTypeAPI().List) // 分类列表 + navType.POST("/save", admin.NavigationTypeAPI().Save) // 新增/编辑分类 + navType.DELETE("/:id", admin.NavigationTypeAPI().Delete) // 删除分类 + } } diff --git a/http/vo/navigation.go b/http/vo/navigation.go index ef4231e..4ca3ca2 100644 --- a/http/vo/navigation.go +++ b/http/vo/navigation.go @@ -1,18 +1,13 @@ package vo -// TypeItem -// @description: 导航分类 -type TypeItem struct { - ID string `json:"id"` - Name string `json:"name"` - Icon string `json:"icon"` -} +import "website-nav/model" -type NavigationItem struct { - ID string `json:"id"` - Title string `json:"title"` - Url string `json:"url"` - Icon string `json:"icon"` - Desc string `json:"desc"` - Enabled bool `json:"enabled"` +// NavigationTypeItem +// @description: 导航分类 +type NavigationTypeItem struct { + ID string `json:"id"` + Name string `json:"name"` + Icon string `json:"icon"` + CreatedAt model.JsonTime `json:"createdAt"` + UpdatedAt model.JsonTime `json:"updatedAt"` } diff --git a/service/navigation_type.go b/service/navigation_type.go new file mode 100644 index 0000000..07071ca --- /dev/null +++ b/service/navigation_type.go @@ -0,0 +1,53 @@ +package service + +import ( + "gorm.io/gorm" + "website-nav/global/client" + "website-nav/http/param" + "website-nav/http/vo" + "website-nav/model" +) + +type navigationType struct { + *gorm.DB +} + +func NavigationType() navigationType { return navigationType{DB: client.DB} } + +// List +// @description: 分页列表 +// @receiver s +// @return list +// @return err +func (s navigationType) List(p param.Page) (list []vo.NavigationTypeItem, total int64, err error) { + err = s.Model(&model.NavigationType{}).Scopes(Paginate(p.Current, p.Size)).Find(&list).Offset(-1).Limit(-1).Count(&total).Error + return +} + +// CreateType +// @description: 新增/编辑分类 +// @receiver s +// @param p +// @return error +func (s navigationType) CreateType(p param.SaveNavigationType) error { + if p.Id != "" { + return s.Model(&model.NavigationType{}).Where("id = ?", p.Id).Updates(map[string]any{ + "name": p.Name, + "icon": p.Icon, + }).Error + } + + return s.Create(&model.NavigationType{ + Name: p.Name, + Icon: p.Icon, + }).Error +} + +// Delete +// @description: 删除分类 +// @receiver s +// @param id +// @return error +func (s navigationType) Delete(id string) error { + return s.Model(&model.NavigationType{}).Where("id = ?", id).Delete(&model.NavigationType{}).Error +}