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.

71 lines
1.7 KiB

package addr
import (
"github.com/gin-gonic/gin"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/model/user"
"recook/tools"
)
type createAddrParam struct {
UserID uint `json:"userID" 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 CreateAddr(c *gin.Context) {
var p createAddrParam
err := tools.ParseParams(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var addr user.Addr
tx := dbc.DB.Begin()
{
var existDefaultAddr user.Addr
tx.Table((&user.Addr{}).TableName()).Select("id").First(&existDefaultAddr, "user_id = ? AND is_default = 1", p.UserID)
if p.IsDefault == 1 {
if existDefaultAddr.ID > 0 { // 之前有默认地址 取消掉
err = tx.Model(&existDefaultAddr).Updates(map[string]interface{}{"is_default": 0}).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
} else {
if existDefaultAddr.ID == 0 { // 当没有默认地址时 强制设置为默认地址
p.IsDefault = 1
}
}
addr = user.Addr{
UserID: p.UserID,
Name: p.Name,
Province: p.Province,
City: p.City,
District: p.District,
Address: p.Address,
IsDefault: p.IsDefault,
Mobile: p.Mobile,
}
err = tx.Create(&addr).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
tx.Commit()
back.Suc(c, "操作成功", &addr)
}