Files
sc-lktx-mp/sc-lktx-backend/internal/modules/banner/handler.go
huangjin fe3ad20fe2 'init'
2026-06-29 17:34:59 +08:00

108 lines
2.9 KiB
Go

// 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(&notices)
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)
}