Commit 3c503363 authored by shajiaiming's avatar shajiaiming

Merge branch 'feature/optimize' into develop

parents ea2fd3f1 f7c71f07
......@@ -6,24 +6,38 @@ import (
)
type CoinTicker struct {
CoinId int `json:"coin_id"`
CoinName string `json:"coin_name"`
Ticker float32 `json:"ticker"`
PlatformId uint8 `json:"platform_id"`
Model
//CoinInfo *Coin `gorm:"foreignkey:coin_id" json:"coin_info"`
CoinName string `json:"coin_name"`
Ticker string `json:"ticker"`
PlatformId int `json:"platform_id"`
}
type CoinTickerResp struct {
CoinId int `json:"coin_id"`
Ticker float32 `json:"ticker"`
Name string `json:"name"`
CoinId int `json:"coin_id"`
Ticker string `json:"ticker"`
Name string `json:"name"`
}
func (c CoinTicker) TableName() string {
return setting.DatabaseSetting.Name_Sources + ".wallet_coin_ticker"
}
func GetCoinTicker(id int) (*CoinTicker, error) {
var ticker CoinTicker
err := db.Where("id = ?", id).First(&ticker).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
err = db.Model(&ticker).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &ticker, nil
}
func GetCoinsTicker(maps interface{}) ([]*CoinTicker, error) {
var ct []*CoinTicker
err := db.Where(maps).Find(&ct).Error
......@@ -34,14 +48,14 @@ func GetCoinsTicker(maps interface{}) ([]*CoinTicker, error) {
return ct, nil
}
func ExistCoin(coin_id int, platform_id uint8) (bool, error) {
func ExistCoin(coin_name string, platform_id int) (bool, error) {
var coinTicker CoinTicker
err := db.Where("coin_id = ? and platform_id = ?", coin_id, platform_id).First(&coinTicker).Error
err := db.Where("coin_name = ? and platform_id = ?", coin_name, platform_id).First(&coinTicker).Error
if err != nil && err != gorm.ErrRecordNotFound {
return false, err
}
if coinTicker.CoinId > 0 {
if coinTicker.PlatformId > 0 {
return true, nil
}
......@@ -51,9 +65,8 @@ func ExistCoin(coin_id int, platform_id uint8) (bool, error) {
func AddCoinTicker(data map[string]interface{}) (error) {
coinTicker := CoinTicker{
CoinName: data["coin_name"].(string),
CoinId: data["coin_id"].(int),
Ticker: data["ticker"].(float32),
PlatformId: data["platform_id"].(uint8),
Ticker: data["ticker"].(string),
PlatformId: data["platform_id"].(int),
}
if err := db.Create(&coinTicker).Error; err != nil {
return err
......@@ -70,10 +83,24 @@ func EditCoinTicker(maps interface{}, data interface{}) error {
return nil
}
func DeleteCoinTicker(coin_id int, platform_id uint8) error {
if err := db.Where("coin_id = ? and platform_id = ?", coin_id, platform_id).Delete(CoinTicker{}).Error; err != nil {
func DeleteCoinTicker(id int) error {
if err := db.Where("id = ?", id).Delete(CoinTicker{}).Error; err != nil {
return err
}
return nil
}
func ExistById(id int) (bool, error) {
var coinTicker CoinTicker
err := db.Select("id").Where("id = ?", id).First(&coinTicker).Error
if err != nil && err != gorm.ErrRecordNotFound {
return false, err
}
if coinTicker.ID > 0 {
return true, nil
}
return false, nil
}
......@@ -5,6 +5,7 @@ import (
"bwallet/pkg/handler"
"bwallet/pkg/util"
"bwallet/service/coin_ticker_service"
"bwallet/service/wallet_service"
"bwallet/validate_service"
"github.com/Unknwon/com"
"github.com/astaxie/beego/validation"
......@@ -15,12 +16,37 @@ import (
func CoinsTicker(c *gin.Context) {
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
CoinTickerService := coin_ticker_service.CoinTicker{
PlatformId: uint8(user.UserInfo.PlatformId),
var platform_id int
platform_id = user.UserInfo.PlatformId
coinTickerService := coin_ticker_service.CoinTicker{}
if ("administrator" != group) {
walletService := wallet_service.Wallet{Id: user.UserInfo.PlatformId}
exists, err := walletService.ExistById()
if err != nil {
handler.SendResponse(c, errno.ErrWalletNotFound, nil)
return
}
if (!exists) {
handler.SendResponse(c, errno.ErrWalletNotFound, nil)
return
}
wallet, err := walletService.Get()
platform_id = wallet.ChainId
} else {
if arg := c.Query("platform_id"); arg != "" {
platform_id = com.StrTo(c.Query("platform_id")).MustInt()
}
}
coins_ticker, err := CoinTickerService.GetAll()
coinTickerService = coin_ticker_service.CoinTicker{
PlatformId: platform_id,
}
coins_ticker, err := coinTickerService.GetAll()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
......@@ -41,10 +67,19 @@ func AddCoinTicker(c *gin.Context) {
}
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
var platform_id int
platform_id = user.UserInfo.PlatformId
if ("administrator" == group) {
if coin_ticker.PlatformId != 0 {
platform_id = coin_ticker.PlatformId
}
}
CoinTickerValidateService := coin_ticker_service.CoinTicker{
CoinId: coin_ticker.CoinId,
PlatformId: uint8(user.UserInfo.PlatformId),
CoinName: coin_ticker.CoinName,
PlatformId: platform_id,
}
exist, _ := CoinTickerValidateService.Exist()
if exist {
......@@ -53,10 +88,9 @@ func AddCoinTicker(c *gin.Context) {
}
CoinTickerService := coin_ticker_service.CoinTicker{
CoinId: coin_ticker.CoinId,
CoinName: coin_ticker.CoinName,
CoinName: strings.ToUpper(coin_ticker.CoinName),
Ticker: coin_ticker.Ticker,
PlatformId: uint8(user.UserInfo.PlatformId),
PlatformId: platform_id,
}
if err := CoinTickerService.Add(); err != nil {
......@@ -80,10 +114,23 @@ func UpdateCoinTicker(c *gin.Context) {
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
platform_id := user.UserInfo.PlatformId
if ("administrator" != group && coin_ticker.PlatformId != platform_id) {
handler.SendResponse(c, errno.ErrUserTokenIncorrect, nil)
return
}
if ("administrator" == group) {
if coin_ticker.PlatformId != 0 {
platform_id = coin_ticker.PlatformId
}
}
CoinTickerValidateService := coin_ticker_service.CoinTicker{
CoinId: coin_ticker.CoinId,
PlatformId: uint8(user.UserInfo.PlatformId),
CoinName: strings.ToUpper(coin_ticker.CoinName),
PlatformId: platform_id,
}
exist, _ := CoinTickerValidateService.Exist()
if !exist {
......@@ -92,8 +139,8 @@ func UpdateCoinTicker(c *gin.Context) {
}
CoinTickerService := coin_ticker_service.CoinTicker{
CoinId: coin_ticker.CoinId,
PlatformId: uint8(user.UserInfo.PlatformId),
CoinName: strings.ToUpper(coin_ticker.CoinName),
PlatformId: platform_id,
Ticker: coin_ticker.Ticker,
}
......@@ -106,20 +153,15 @@ func UpdateCoinTicker(c *gin.Context) {
}
func DeleteCoinTicker(c *gin.Context) {
coin_id := com.StrTo(c.DefaultQuery("coin_id", "0")).MustInt()
id := com.StrTo(c.DefaultQuery("id", "0")).MustInt()
valid := validation.Validation{}
valid.Min(coin_id, 1, "coin_id").Message("ID必须大于0")
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)
CoinTickerService := coin_ticker_service.CoinTicker{
CoinId: coin_id,
PlatformId: uint8(user.UserInfo.PlatformId),
}
exists, err := CoinTickerService.Exist()
coinTickerService := coin_ticker_service.CoinTicker{Id: id}
exists, err := coinTickerService.ExistById()
if err != nil {
handler.SendResponse(c, errno.ErrValidation, nil)
return
......@@ -130,10 +172,22 @@ func DeleteCoinTicker(c *gin.Context) {
return
}
err = CoinTickerService.Delete()
token := c.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
group := user.UserInfo.Group
if ("administrator" != group) {
ticker, _ := coinTickerService.GetCoinTicker()
if ticker.PlatformId != user.UserInfo.PlatformId {
handler.SendResponse(c, errno.ErrUserAuthIncorrect, nil)
return
}
}
err = coinTickerService.Delete()
if err != nil {
handler.SendResponse(c, errno.ErrDeleteCoinTicker, nil)
return
}
handler.SendResponse(c, nil, nil)
}
......@@ -5,10 +5,10 @@ import (
)
type CoinTicker struct {
CoinId int
Id int
CoinName string
Ticker float32
PlatformId uint8
Ticker string
PlatformId int
}
func (ct *CoinTicker) GetAll() ([]*models.CoinTicker, error) {
......@@ -17,22 +17,11 @@ func (ct *CoinTicker) GetAll() ([]*models.CoinTicker, error) {
return nil, err
}
//var CoinsTickerResp = []*models.CoinTickerResp{}
//for _, val := range coins_ticker {
// tmp := &models.CoinTickerResp{}
// tmp.CoinId = val.CoinInfo.ID
// tmp.Name = val.CoinInfo.Name
// tmp.Ticker = val.Ticker
//
// CoinsTickerResp = append(CoinsTickerResp, tmp)
//}
return coins_ticker, nil
}
func (t *CoinTicker) Add() error {
coinTicker := map[string]interface{}{
"coin_id": t.CoinId,
"coin_name": t.CoinName,
"ticker": t.Ticker,
"platform_id": t.PlatformId,
......@@ -52,18 +41,31 @@ func (t *CoinTicker) Edit() error {
}
func (t *CoinTicker) Exist() (bool, error) {
return models.ExistCoin(t.CoinId, t.PlatformId)
return models.ExistCoin(t.CoinName, t.PlatformId)
}
func (t *CoinTicker) ExistById() (bool, error) {
return models.ExistById(t.Id)
}
func (t *CoinTicker) GetCoinTicker() (*models.CoinTicker, error) {
ticker, err := models.GetCoinTicker(t.Id)
if err != nil {
return nil, err
}
return ticker, nil
}
func (t *CoinTicker) Delete() error {
return models.DeleteCoinTicker(t.CoinId, t.PlatformId)
return models.DeleteCoinTicker(t.Id)
}
func (c *CoinTicker) getMaps() (map[string]interface{}) {
maps := make(map[string]interface{})
if c.CoinId != 0 {
maps["coin_id"] = c.CoinId
if c.CoinName != "" {
maps["coin_name"] = c.CoinName
}
if c.PlatformId != 0 {
......
package validate_service
type CoinTicker struct {
CoinId int `json:"coin_id" validate:"required"`
CoinName string `json:"coin_name" validate:"required"`
Ticker float32 `json:"ticker" validate:"required"`
CoinName string `json:"coin_name" validate:"required"`
Ticker string `json:"ticker" validate:"required"`
PlatformId int `json:"platform_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