Commit 957d95c8 authored by shajiaiming's avatar shajiaiming

快讯 commit

parent d2abfade
package models
import (
"bwallet/pkg/setting"
"github.com/jinzhu/gorm"
)
type News struct {
Model
Title string `gorm:"size:255;not null;" json:"name"`
Content string `gorm:"not null;" json:"download_url"`
Top uint8 `gorm:"not null;default:0" json:"top"`
Red uint8 `gorm:"not null;default:0" json:"red"`
Status uint8 `gorm:"not null;default:0" json:"status"`
PlatformId int `gorm:"not null;default:1" json:"platform_id"`
}
func (w News) TableName() string {
return setting.DatabaseSetting.Name_Coin + ".article"
}
func ExistNewsById(id int) (bool, error) {
var news News
err := db.Select("id").Where("id = ?", id).First(&news).Error
if err != nil && err != gorm.ErrRecordNotFound {
return false, err
}
if news.ID > 0 {
return true, nil
}
return false, nil
}
func GetNewsTotal(maps interface{}) (int, error) {
var count int
if err := db.Model(&News{}).Where(maps).Count(&count).Error; err != nil {
return 0, err
}
return count, nil
}
func GetNews(pageNum, pageSize int, maps interface{}) ([]*News, error) {
var news []*News
err := db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&news).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return news, nil
}
func GetOneNews(maps interface{}) (*News, error) {
var news News
err := db.Where(maps).First(&news).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
err = db.Model(&news).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &news, nil
}
func AddNews(data map[string]interface{}) (error) {
news := News{
Title: data["title"].(string),
Content: data["content"].(string),
Top: data["top"].(uint8),
Red: data["red"].(uint8),
Status: data["status"].(uint8),
PlatformId: data["platform_id"].(int),
}
if err := db.Create(&news).Error; err != nil {
return err
}
return nil
}
func EditNews(id int, data interface{}) error {
if err := db.Model(&News{}).Where("id = ?", id).Updates(data).Error; err != nil {
return err
}
return nil
}
func DeleteNews(id int) error {
if err := db.Where("id = ?", id).Delete(News{}).Error; err != nil {
return err
}
return nil
}
......@@ -131,4 +131,12 @@ var (
// operation log errors
ErrCountOperationLog = &Errno{Code: 20102, Message: "The operation log statistic error."}
ErrAddOperationLog = &Errno{Code: 20101, Message: "The operation log add error."}
// news errors
ErrNewsNotFound = &Errno{Code: 20101, Message: "The news was not found."}
ErrCountNews = &Errno{Code: 20102, Message: "The news statistic error."}
ErrAddNews = &Errno{Code: 20101, Message: "The news add error."}
ErrUpdateNews = &Errno{Code: 20102, Message: "The news update error."}
ErrDeleteNews = &Errno{Code: 20102, Message: "The news delete error."}
ErrExistNews = &Errno{Code: 20103, Message: "The news already exists."}
)
package gredis
import (
"github.com/gomodule/redigo/redis"
"bwallet/pkg/setting"
"time"
"encoding/json"
"github.com/gomodule/redigo/redis"
"time"
)
var RedisConn *redis.Pool
......@@ -36,7 +36,7 @@ func Setup() error {
return nil
}
func Set(key string, data interface{}, time int) error {
func Set(key string, data interface{}, time int, db int) error {
conn := RedisConn.Get()
defer conn.Close()
......@@ -45,6 +45,11 @@ func Set(key string, data interface{}, time int) error {
return err
}
if _, err := conn.Do("SELECT", db); err != nil {
conn.Close()
return err
}
_, err = conn.Do("SET", key, value)
if err != nil {
return err
......@@ -58,10 +63,15 @@ func Set(key string, data interface{}, time int) error {
return nil
}
func Exists(key string) bool {
func Exists(key string, db int) bool {
conn := RedisConn.Get()
defer conn.Close()
if _, err := conn.Do("SELECT", db); err != nil {
conn.Close()
return false
}
exists, err := redis.Bool(conn.Do("EXISTS", key))
if err != nil {
return false
......@@ -70,10 +80,15 @@ func Exists(key string) bool {
return exists
}
func Get(key string) ([]byte, error) {
func Get(key string, db int) ([]byte, error) {
conn := RedisConn.Get()
defer conn.Close()
if _, err := conn.Do("SELECT", db); err != nil {
conn.Close()
return nil, err
}
reply, err := redis.Bytes(conn.Do("GET", key))
if err != nil {
return nil, err
......@@ -82,28 +97,14 @@ func Get(key string) ([]byte, error) {
return reply, nil
}
func Delete(key string) (bool, error) {
func Delete(key string, db int) (bool, error) {
conn := RedisConn.Get()
defer conn.Close()
return redis.Bool(conn.Do("DEL", key))
}
func LikeDeletes(key string) error {
conn := RedisConn.Get()
defer conn.Close()
keys, err := redis.Strings(conn.Do("KEYS", "*"+key+"*"))
if err != nil {
return err
}
for _, key := range keys {
_, err = Delete(key)
if err != nil {
return err
}
if _, err := conn.Do("SELECT", db); err != nil {
conn.Close()
return false, err
}
return nil
return redis.Bool(conn.Do("DEL", key))
}
\ No newline at end of file
......@@ -102,6 +102,9 @@ func GetUserChainsBak(c *gin.Context) {
}
func GetCoins(c *gin.Context) {
//gredis.Set("2020716", "二零二零零七一六", 20, 1)
valid := validation.Validation{}
name := ""
......
package v1
import (
"bwallet/pkg/errno"
"bwallet/pkg/handler"
"bwallet/pkg/util"
"bwallet/service/auth_service"
"bwallet/service/news_service"
"bwallet/validate_service"
"github.com/Unknwon/com"
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin"
"strings"
)
func GetOneNews(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")
authService := auth_service.Auth{Token: token}
auth, _ := authService.GetUserInfo()
group := auth.Group
var platform_id int
platform_id = auth.PlatformId
newsService := news_service.News{}
if ("administrator" == group) {
newsService = news_service.News{
Id: id,
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
} else {
newsService = news_service.News{
Id: id,
PlatformId: platform_id,
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
}
news, err := newsService.GetAll()
if err != nil {
handler.SendResponse(c, errno.ErrNewsNotFound, nil)
return
}
handler.SendResponse(c, nil, news)
return
}
func GetNews(c *gin.Context) {
token := c.Request.Header.Get("Token")
authService := auth_service.Auth{Token: token}
auth, _ := authService.GetUserInfo()
group := auth.Group
var platform_id int
platform_id = auth.PlatformId
if ("administrator" == group) {
if arg := c.Query("platform_id"); arg != "" {
platform_id = com.StrTo(c.Query("platform_id")).MustInt()
}
}
newsService := news_service.News{
PlatformId: platform_id,
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
total, err := newsService.Count()
if err != nil {
handler.SendResponse(c, errno.ErrCountNews, nil)
return
}
news, err := newsService.GetAll()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
}
data := make(map[string]interface{})
data["items"] = news
data["total"] = total
handler.SendResponse(c, nil, data)
}
func AddNews(c *gin.Context) {
news := validate_service.News{}
c.ShouldBindJSON(&news)
//方法一
if ok, errors := validate_service.ValidateInputs(news); !ok {
for _, err := range errors {
handler.SendResponse(c, errno.ErrBind, strings.Join(err, " "))
return
}
}
token := c.Request.Header.Get("Token")
authService := auth_service.Auth{Token: token}
auth, _ := authService.GetUserInfo()
group := auth.Group
var platform_id int
platform_id = auth.PlatformId
if ("administrator" == group) {
if news.PlatformId != 0 {
platform_id = news.PlatformId
}
}
newsService := news_service.News{
Title: news.Title,
Content: news.Content,
Top: news.Top,
Red: news.Red,
Status: news.Status,
PlatformId: platform_id,
}
newsService.Add()
handler.SendResponse(c, nil, nil)
}
func EditNews(c *gin.Context) {
news := validate_service.EditNews{}
c.ShouldBindJSON(&news)
//方法一
if ok, errors := validate_service.ValidateInputs(news); !ok {
for _, err := range errors {
handler.SendResponse(c, errno.ErrBind, strings.Join(err, " "))
return
}
}
token := c.Request.Header.Get("Token")
authService := auth_service.Auth{Token: token}
auth, _ := authService.GetUserInfo()
group := auth.Group
platform_id := auth.PlatformId
if ("administrator" == group) {
if news.PlatformId != 0 {
platform_id = news.PlatformId
}
}
newsService := news_service.News{
Id: news.Id,
Title: news.Title,
Content: news.Content,
Top: news.Top,
Red: news.Red,
Status: news.Status,
PlatformId: platform_id,
}
if err := newsService.Edit(); err != nil {
handler.SendResponse(c, errno.ErrUpdateNews, nil)
return
}
handler.SendResponse(c, nil, nil)
}
func DeleteNews(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
}
newsService := news_service.News{Id: id}
exists, err := newsService.ExistById()
if err != nil {
handler.SendResponse(c, errno.ErrNewsNotFound, nil)
return
}
if !exists {
handler.SendResponse(c, errno.ErrNewsNotFound, nil)
return
}
token := c.Request.Header.Get("Token")
authService := auth_service.Auth{Token: token}
auth, _ := authService.GetUserInfo()
group := auth.Group
if ("administrator" != group) {
news, _ := newsService.Get()
if news.PlatformId != auth.PlatformId {
handler.SendResponse(c, errno.ErrUserAuthIncorrect, nil)
return
}
}
err = newsService.Delete()
if err != nil {
handler.SendResponse(c, errno.ErrDeleteNews, nil)
return
}
handler.SendResponse(c, nil, nil)
}
......@@ -54,6 +54,12 @@ func InitRouter() *gin.Engine {
api.PUT("/wallet", v1.EditWallet)
api.DELETE("/wallet", v1.DeleteWallet)
api.GET("/news", v1.GetNews)
api.POST("/news", v1.AddNews)
api.GET("/one-news", v1.GetOneNews)
api.PUT("/news", v1.EditNews)
api.DELETE("/news", v1.DeleteNews)
api.GET("/chains", v1.GetChains)
api.POST("/chain", v1.AddChain)
api.GET("/chain", v1.GetChain)
......
package news_service
import (
"bwallet/models"
)
type News struct {
Id int
Title string
Content string
Top uint8
Red uint8
Status uint8
PlatformId int
PageNum int
PageSize int
}
func (n *News) Get() (*models.News, error) {
news, err := models.GetOneNews(n.getMaps())
if err != nil {
return nil, err
}
return news, nil
}
func (n *News) GetAll() ([]*models.News, error) {
var news []*models.News
news, err := models.GetNews(n.PageNum, n.PageSize, n.getMaps())
if err != nil {
return nil, err
}
return news, nil
}
func (n *News) Add() error {
news := map[string]interface{}{
"title": n.Title,
"content": n.Content,
"top": n.Top,
"red": n.Red,
"status": n.Status,
"platform_id": n.PlatformId,
}
if err := models.AddNews(news); err != nil {
return err
}
return nil
}
func (n *News) Edit() error {
return models.EditNews(n.Id, map[string]interface{}{
"title": n.Title,
"content": n.Content,
"top": n.Top,
"red": n.Red,
"status": n.Status,
"platform_id": n.PlatformId,
})
}
func (n *News) ExistById() (bool, error) {
return models.ExistNewsById(n.Id)
}
func (n *News) Count() (int, error) {
return models.GetNewsTotal(n.getMaps())
}
func (n *News) Delete() error {
return models.DeleteNews(n.Id)
}
func (n *News) getMaps() (map[string]interface{}) {
maps := make(map[string]interface{})
if n.Id != 0 {
maps["id"] = n.Id
}
if n.Title != "" {
maps["name"] = n.Title
}
if n.PlatformId != 0 {
maps["platform_id"] = n.PlatformId
}
return maps
}
package validate_service
type News struct {
Title string `json:"title" validate:"required"`
Content string `json:"content" validate:"required"`
Top uint8 `json:"top"`
Red uint8 `json:"red"`
Status uint8 `json:"status"`
PlatformId int `json:"platform_id" validate:"required"`
}
type EditNews struct {
News
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