'init'
This commit is contained in:
107
sc-lktx-backend/internal/modules/banner/handler.go
Normal file
107
sc-lktx-backend/internal/modules/banner/handler.go
Normal file
@@ -0,0 +1,107 @@
|
||||
// Banner 模块:首页轮播图接口
|
||||
package banner
|
||||
|
||||
import (
|
||||
"com.sclktx/m/v2/internal/common/model"
|
||||
"com.sclktx/m/v2/internal/common/response"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// BannerHandler Banner 处理器
|
||||
type BannerHandler struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewBannerHandler 创建 Banner 处理器
|
||||
func NewBannerHandler(db *gorm.DB) *BannerHandler {
|
||||
return &BannerHandler{db: db}
|
||||
}
|
||||
|
||||
// BannerVO Banner 视图对象(只返回前端需要的字段)
|
||||
type BannerVO struct {
|
||||
ImageURL string `json:"image_url"` // 图片地址
|
||||
JumpPath string `json:"jump_path"` // 跳转链接(空字符串表示不可跳转)
|
||||
IsJump bool `json:"is_jump"` // 是否可跳转
|
||||
}
|
||||
|
||||
// @Summary 获取首页轮播图列表
|
||||
// @Description 获取首页轮播图列表(公开接口)
|
||||
// @Tags 公共
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} response.Response{data=[]banner.BannerVO} "success"
|
||||
// @Router /api/v1/banners [get]
|
||||
// GetBanners 获取首页轮播图列表(公开接口)
|
||||
func (h *BannerHandler) GetBanners(c *gin.Context) {
|
||||
var banners []model.Banner
|
||||
if err := h.db.Where("is_valid = ?", true).
|
||||
Order("sort ASC, id DESC").
|
||||
Find(&banners).Error; err != nil {
|
||||
response.InternalError(c, "查询失败")
|
||||
return
|
||||
}
|
||||
|
||||
result := make([]BannerVO, 0, len(banners))
|
||||
for _, b := range banners {
|
||||
result = append(result, BannerVO{
|
||||
ImageURL: b.ImageURL,
|
||||
JumpPath: b.JumpPath,
|
||||
IsJump: b.IsJump,
|
||||
})
|
||||
}
|
||||
|
||||
// 如果没有数据,返回空数组而非 null
|
||||
if result == nil {
|
||||
result = []BannerVO{
|
||||
{
|
||||
ImageURL: "//mmbiz.qpic.cn/mmbiz_jpg/XekA4rfc3lcLOadSAicKvm3ZXFgn9TtZUOh5tSgaJeQrqs6JhWKfszMHBQhXaicPpgVM09U3dnHBfoEriaM9fKPXYCDvsB2fiaib4TAjXMGV2Ql0/0?from=appmsg",
|
||||
JumpPath: "",
|
||||
IsJump: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
response.Success(c, result)
|
||||
}
|
||||
|
||||
// NoticeVO 通知视图对象
|
||||
type NoticeVO struct {
|
||||
ID uint `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
// @Summary 获取有效通知列表
|
||||
// @Description 获取有效通知列表(公开接口)
|
||||
// @Tags 公共
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} response.Response{data=[]banner.NoticeVO} "success"
|
||||
// @Router /api/v1/notices [get]
|
||||
// GetNotices 获取有效通知列表(公开接口)
|
||||
func (h *BannerHandler) GetNotices(c *gin.Context) {
|
||||
var notices []model.Notice
|
||||
h.db.Where("is_valid = ?", true).Order("sort ASC, id DESC").Find(¬ices)
|
||||
|
||||
result := make([]NoticeVO, 0, len(notices))
|
||||
for _, n := range notices {
|
||||
result = append(result, NoticeVO{
|
||||
ID: n.ID,
|
||||
Title: n.Title,
|
||||
Content: n.Content,
|
||||
})
|
||||
}
|
||||
if result == nil {
|
||||
result = []NoticeVO{}
|
||||
}
|
||||
|
||||
response.Success(c, result)
|
||||
}
|
||||
|
||||
// RegisterRoutes 注册 Banner 路由(公开接口,无需认证)
|
||||
func (h *BannerHandler) RegisterRoutes(r *gin.RouterGroup) {
|
||||
r.GET("/banners", h.GetBanners)
|
||||
r.GET("/notices", h.GetNotices)
|
||||
}
|
||||
Reference in New Issue
Block a user