Commit 0a4c7d5d authored by shajiaiming's avatar shajiaiming

直播banner api

parent c82c4410
package models
import (
"bwallet/pkg/setting"
"github.com/jinzhu/gorm"
)
type LiveBanner struct {
Model
TargetLink string `json:"target_link"`
ImageUrl string `json:"image_url"`
Title string `json:"title"`
PlatformId int `json:"platform_id"`
Sort int32 `json:"sort"`
Status uint8 `json:"status"`
}
func (b LiveBanner) TableName() string {
return setting.DatabaseSetting.Name_Sources + ".wallet_live_banner"
}
func ExistLiveBannerById(id int) (bool, error) {
var banner LiveBanner
err := db.Select("id").Where("id = ?", id).First(&banner).Error
if err != nil && err != gorm.ErrRecordNotFound {
return false, err
}
if banner.ID > 0 {
return true, nil
}
return false, nil
}
func GetLiveBanner(id int) (*LiveBanner, error) {
var banner LiveBanner
err := db.Where("id = ?", id).First(&banner).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
err = db.Model(&banner).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &banner, nil
}
func GetLiveBannerTotal(maps interface{}) (int, error) {
var count int
if err := db.Model(&LiveBanner{}).Where(maps).Count(&count).Error; err != nil {
return 0, err
}
return count, nil
}
func GetLiveBanners(pageNum, pageSize int, maps interface{}) ([]*LiveBanner, error) {
var banners []*LiveBanner
err := db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&banners).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return banners, nil
}
func AddLiveBanner(data map[string]interface{}) (error) {
banner := LiveBanner{
TargetLink: data["target_link"].(string),
ImageUrl: data["image_url"].(string),
Title: data["title"].(string),
PlatformId: data["platform_id"].(int),
Sort: data["sort"].(int32),
Status: data["status"].(uint8),
}
if err := db.Create(&banner).Error; err != nil {
return err
}
return nil
}
func EditLiveBanner(id int, data interface{}) error {
if err := db.Debug().Model(&LiveBanner{}).Where("id = ?", id).Updates(data).Error; err != nil {
return err
}
return nil
}
func DeleteLiveBanner(id int) error {
if err := db.Where("id = ?", id).Delete(LiveBanner{}).Error; err != nil {
return err
}
return nil
}
package models
import (
"time"
)
type BaseModel struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt *time.Time `json:"deletedAt"`
}
...@@ -171,4 +171,11 @@ var ( ...@@ -171,4 +171,11 @@ var (
ErrUpdateLiveTitleRecord = &Errno{Code: 20102, Message: "The live title record update error."} ErrUpdateLiveTitleRecord = &Errno{Code: 20102, Message: "The live title record update error."}
ErrDeleteLiveTitleRecord = &Errno{Code: 20102, Message: "The live title record delete error."} ErrDeleteLiveTitleRecord = &Errno{Code: 20102, Message: "The live title record delete error."}
ErrExistLiveTitleRecord = &Errno{Code: 20103, Message: "The live title record already exists."} ErrExistLiveTitleRecord = &Errno{Code: 20103, Message: "The live title record already exists."}
// live banner errors
ErrLiveBannerNotFound = &Errno{Code: 20101, Message: "The live banner was not found."}
ErrCountLiveBanner = &Errno{Code: 20102, Message: "The live banners statistic error."}
ErrAddLiveBanner = &Errno{Code: 20101, Message: "The live banner add error."}
ErrUpdateLiveBanner = &Errno{Code: 20102, Message: "The live banner update error."}
ErrDeleteLiveBanner = &Errno{Code: 20102, Message: "The live banner delete error."}
) )
package backend
import (
"bwallet/pkg/errno"
"bwallet/pkg/handler"
"bwallet/pkg/util"
"bwallet/service/live_banner_service"
"bwallet/validate_service"
"github.com/Unknwon/com"
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
func GetLiveBanners(c *gin.Context) {
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
var platform_id int
platform_id = user.UserInfo.PlatformId
group := user.UserInfo.Group
if ("administrator" == group) {
if arg := c.Query("platform_id"); arg != "" {
platform_id = com.StrTo(c.DefaultQuery("platform_id", strconv.Itoa(platform_id))).MustInt()
}
}
status := com.StrTo(c.DefaultQuery("status", "1")).MustUint8()
bannerService := live_banner_service.LiveBanner{
Status: status,
PlatformId: platform_id,
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
total, err := bannerService.Count()
if err != nil {
handler.SendResponse(c, errno.ErrCountWallet, nil)
return
}
banners, err := bannerService.GetAll()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
}
data := make(map[string]interface{})
data["items"] = banners
data["total"] = total
handler.SendResponse(c, nil, data)
}
func GetLiveBanner(c *gin.Context) {
id := com.StrTo(c.DefaultQuery("id", "0")).MustInt()
valid := validation.Validation{}
valid.Min(id, 1, "id").Message("ID必须大于0")
if valid.HasErrors() {
handler.SendResponse(c, errno.ErrValidation, nil)
return
}
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
var platform_id int
platform_id = id
if ("administrator" != group && id != user.UserInfo.PlatformId) {
handler.SendResponse(c, errno.ErrUserTokenIncorrect, nil)
return
}
bannerService := live_banner_service.LiveBanner{Id: platform_id}
exists, err := bannerService.ExistById()
if err != nil {
handler.SendResponse(c, errno.ErrLiveBannerNotFound, nil)
return
}
if (!exists) {
handler.SendResponse(c, errno.ErrLiveBannerNotFound, nil)
return
}
banner, err := bannerService.Get()
if err != nil {
handler.SendResponse(c, errno.ErrLiveBannerNotFound, nil)
return
}
handler.SendResponse(c, nil, banner)
}
func AddLiveBanner(c *gin.Context) {
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
if ("administrator" != group) {
handler.SendResponse(c, errno.ErrUserAuthIncorrect, nil)
return
}
banner := validate_service.LiveBanner{}
c.ShouldBindJSON(&banner)
if ok, errors := validate_service.ValidateInputs(banner); !ok {
for _, err := range errors {
handler.SendResponse(c, errno.ErrBind, strings.Join(err, " "))
return
}
}
bannerService := live_banner_service.LiveBanner{
ImageUrl: banner.ImageUrl,
TargetLink: banner.TargetLink,
Title: banner.Title,
PlatformId: banner.PlatformId,
Status: banner.Status,
Sort: banner.Sort,
}
if err := bannerService.Add(); err != nil {
handler.SendResponse(c, errno.ErrAddLiveBanner, nil)
return
}
handler.SendResponse(c, nil, nil)
}
func EditLiveBanner(c *gin.Context) {
banner := validate_service.EditLiveBanner{}
c.ShouldBindJSON(&banner)
//方法一
if ok, errors := validate_service.ValidateInputs(banner); !ok {
for _, err := range errors {
handler.SendResponse(c, errno.ErrBind, strings.Join(err, " "))
return
}
}
bannerService := live_banner_service.LiveBanner{
Id: banner.Id,
ImageUrl: banner.ImageUrl,
TargetLink: banner.TargetLink,
Title: banner.Title,
PlatformId: banner.PlatformId,
Status: banner.Status,
Sort: banner.Sort,
}
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
if ("administrator" != group && user.UserInfo.PlatformId != banner.PlatformId) {
handler.SendResponse(c, errno.ErrUserAuthIncorrect, nil)
return
}
exists, err := bannerService.ExistById()
if err != nil || !exists {
handler.SendResponse(c, errno.ErrLiveBannerNotFound, nil)
return
}
if err := bannerService.Edit(); err != nil {
handler.SendResponse(c, errno.ErrUpdateLiveBanner, nil)
return
}
handler.SendResponse(c, nil, nil)
}
func DeleteLiveBanner(c *gin.Context) {
id := com.StrTo(c.DefaultQuery("id", "0")).MustInt()
valid := validation.Validation{}
valid.Min(id, 1, "id").Message("Id必须大于0")
if valid.HasErrors() {
handler.SendResponse(c, valid.Errors[0], nil)
return
}
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
bannerService := live_banner_service.LiveBanner{Id: id}
exists, err := bannerService.ExistById()
if err != nil || !exists {
handler.SendResponse(c, errno.ErrLiveBannerNotFound, nil)
return
}
banner, err := bannerService.Get()
if err != nil {
handler.SendResponse(c, errno.ErrValidation, nil)
return
}
if ("administrator" != group && user.UserInfo.PlatformId != banner.PlatformId) {
handler.SendResponse(c, errno.ErrUserAuthIncorrect, nil)
return
}
err = bannerService.Delete()
if err != nil {
handler.SendResponse(c, errno.ErrDeleteLiveBanner, nil)
return
}
handler.SendResponse(c, nil, nil)
}
...@@ -120,6 +120,12 @@ func InitRouter() *gin.Engine { ...@@ -120,6 +120,12 @@ func InitRouter() *gin.Engine {
api.PUT("/live-info", backend.VerifyLiveInfo) api.PUT("/live-info", backend.VerifyLiveInfo)
api.GET("/live-title-record", backend.GetLiveTitleRecord) api.GET("/live-title-record", backend.GetLiveTitleRecord)
api.PUT("/live-title-record", backend.VerifyLiveTitleRecord) api.PUT("/live-title-record", backend.VerifyLiveTitleRecord)
api.GET("/live-banners", backend.GetLiveBanners)
api.GET("/live-banner", backend.GetLiveBanner)
api.POST("/live-banner", backend.AddLiveBanner)
api.PUT("/live-banner", backend.EditLiveBanner)
api.DELETE("/live-banner", backend.DeleteLiveBanner)
} }
return r return r
......
package live_banner_service
import (
"bwallet/models"
)
type LiveBanner struct {
Id int
TargetLink string
ImageUrl string
Title string
PlatformId int
Sort int32
Status uint8
PageNum int
PageSize int
}
func (b *LiveBanner) Get() (*models.LiveBanner, error) {
banner, err := models.GetLiveBanner(b.Id)
if err != nil {
return nil, err
}
return banner, nil
}
func (b *LiveBanner) GetAll() ([]*models.LiveBanner, error) {
var banners []*models.LiveBanner
banners, err := models.GetLiveBanners(b.PageNum, b.PageSize, b.getMaps())
if err != nil {
return nil, err
}
return banners, nil
}
func (b *LiveBanner) Add() error {
banner := map[string]interface{}{
"target_link": b.TargetLink,
"image_url": b.ImageUrl,
"title": b.Title,
"sort": b.Sort,
"status": b.Status,
"platform_id": b.PlatformId,
}
if err := models.AddLiveBanner(banner); err != nil {
return err
}
return nil
}
func (b *LiveBanner) Edit() error {
return models.EditLiveBanner(b.Id, map[string]interface{}{
"target_link": b.TargetLink,
"image_url": b.ImageUrl,
"title": b.Title,
"sort": b.Sort,
"status": b.Status,
"platform_id": b.PlatformId,
})
}
func (b *LiveBanner) ExistById() (bool, error) {
return models.ExistLiveBannerById(b.Id)
}
func (b *LiveBanner) Count() (int, error) {
return models.GetLiveBannerTotal(b.getMaps())
}
func (b *LiveBanner) Delete() error {
return models.DeleteLiveBanner(b.Id)
}
func (b *LiveBanner) getMaps() (map[string]interface{}) {
maps := make(map[string]interface{})
if b.Id != 0 {
maps["id"] = b.Id
}
if b.Status != 0 {
maps["status"] = b.Status
}
if b.PlatformId != 0 {
maps["platform_id"] = b.PlatformId
}
return maps
}
package validate_service
type LiveBanner struct {
ImageUrl string `json:"image_url" validate:"required"`
TargetLink string `json:"target_link"`
Title string `json:"title"`
PlatformId int `json:"platform_id" validate:"required"`
Sort int32 `json:"sort" validate:"required"`
Status uint8 `json:"status" validate:"required,min=1,max=2"`
}
type EditLiveBanner struct {
LiveBanner
Id int `json:"id" validate:"required"`
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment