You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.7 KiB
121 lines
2.7 KiB
package addr
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"recook/internal/back"
|
|
"recook/internal/dbc"
|
|
"recook/internal/model/user"
|
|
"recook/tools"
|
|
)
|
|
|
|
type updateDefaultParam struct {
|
|
UserID uint `json:"userID" validate:"required"`
|
|
AddrID uint `json:"addrID" validate:"required"`
|
|
}
|
|
|
|
type updateAddrParam struct {
|
|
UserID uint `json:"userId" validate:"required"`
|
|
AddrID uint `json:"addrId" validate:"required"`
|
|
Name string `json:"name" validate:"required"`
|
|
Province string `json:"province" validate:"required"`
|
|
City string `json:"city" validate:"required"`
|
|
District string `json:"district" validate:"required"`
|
|
Address string `json:"address" validate:"required"`
|
|
Mobile string `json:"mobile" validate:"required"`
|
|
IsDefault uint `json:"isDefault" `
|
|
}
|
|
|
|
func UpdateAddr(c *gin.Context) {
|
|
var p updateAddrParam
|
|
err := tools.ParseParams(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var addr user.Addr
|
|
var existDefaultAddr user.Addr
|
|
err = dbc.DB.Table((&user.Addr{}).TableName()).Select("id").First(&existDefaultAddr, "user_id = ? AND is_default = 1", p.UserID).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
|
|
err = dbc.DB.First(&addr, "id = ?", p.AddrID).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
|
|
tx := dbc.DB.Begin()
|
|
{
|
|
err = tx.Model(&addr).Updates(user.Addr{
|
|
Name: p.Name,
|
|
Mobile: p.Mobile,
|
|
Province: p.Province,
|
|
City: p.City,
|
|
District: p.District,
|
|
Address: p.Address,
|
|
}).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
|
|
if p.IsDefault == 1 && existDefaultAddr.ID != addr.ID {
|
|
err = tx.Model(&existDefaultAddr).Updates(map[string]interface{}{"is_default": 0}).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
err = tx.Model(&addr).Updates(map[string]interface{}{"is_default": 1}).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
}
|
|
}
|
|
tx.Commit()
|
|
back.Suc(c, "", &addr)
|
|
}
|
|
|
|
func UpdateDefaultAddr(c *gin.Context) {
|
|
var p updateDefaultParam
|
|
err := tools.ParseParams(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
tx := dbc.DB.Begin()
|
|
{
|
|
var addr user.Addr
|
|
tx.First(&addr, "user_id = ? AND is_default = 1", p.UserID)
|
|
if addr.ID > 0 {
|
|
if addr.ID == p.AddrID {
|
|
back.Fail(c, "已经是默认地址")
|
|
return
|
|
}
|
|
|
|
err = tx.Model(&addr).Update(map[string]interface{}{"is_default": 0}).Error
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
}
|
|
|
|
err = tx.Model(&user.Addr{}).Where("user_id = ? AND id = ?", p.UserID, p.AddrID).Update(user.Addr{IsDefault: 1}).Error
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
}
|
|
tx.Commit()
|
|
back.Suc(c, "操作成功", nil)
|
|
}
|