cp_relation.go 3.61 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
package cp_r

import (
	"encoding/json"
	"git.hilo.cn/hilo-common/_const/enum/diamond_e"
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/mycontext"
	"git.hilo.cn/hilo-common/myerr/comerr"
	"git.hilo.cn/hilo-common/rpc"
	"git.hilo.cn/hilo-common/sdk/tencentyun"
	"git.hilo.cn/hilo-common/txop/msg"
	"github.com/gin-gonic/gin"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/cv/cp_cv"
	"hilo-user/domain/model/cp_m"
	"hilo-user/domain/model/diamond_m"
	"hilo-user/domain/model/user_m"
	"hilo-user/req"
	"hilo-user/resp"
)

// @Tags cp关系
// @Summary 检查用户是否绑定了cp
// @Param code query int true "用户code"
// @Success 200 {object} cp_cv.CheckCpRelationRes
// @Router /v2/cp/relation/check [get]
func CheckUserCpRelation(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
	userCode := c.Query("code")

	_, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUserByCode(model, userCode)
	if err != nil {
		return myCtx, err
	}

	cp, err := cp_m.GetCp(model, user.ID)
	if err != nil {
		return myCtx, err
	}
	if cp.Id > 0 {
		return myCtx, msg.GetErrByLanguage(model, 0, lang, comerr.InvalidParameter)
	}

	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{})
	return myCtx, nil
}

// @Tags cp关系
// @Summary 发送cp邀请
// @Param code formData int true "用户code"
// @Success 200
// @Router /v2/cp/relation/invite [post]
func InviteCpRelation(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
	userCode := c.Query("code")

	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUser(model, myUserId)
	if err != nil {
		return myCtx, err
	}
	userInvite, err := user_m.GetUserByCode(model, userCode)
	if err != nil {
		return myCtx, err
	}

	// 自己是否有cp了
	myCp, err := cp_m.GetCp(model, myUserId)
	if err != nil {
		return myCtx, err
	}
	if myCp.Id > 0 {
		return myCtx, msg.GetErrByLanguage(model, 0, lang, comerr.InvalidParameter)
	}
	// 对方是否已经有cp了
	inviCp, err := cp_m.GetCp(model, userInvite.ID)
	if err != nil {
		return myCtx, err
	}
	if inviCp.Id > 0 {
		return myCtx, msg.GetErrByLanguage(model, 0, lang, comerr.InvalidParameter)
	}
	err = model.Transaction(func(model *domain.Model) error {
		// 扣费
		err = diamond_m.ChangeDiamondAccountDetail(model, diamond_e.CpInvite, userInvite.ID, myUserId, cp_e.CpRelationInviteDiamond)
		if err != nil {
			model.Log.Errorf("InviteCpRelation myUserId:%d, err:%v", myUserId, err)
			return err
		}
chenweijian's avatar
chenweijian committed
101 102 103 104 105
		err = cp_m.CreateCpInvite(model, myUserId, userInvite.ID, cp_e.CpRelationInviteDiamond)
		if err != nil {
			model.Log.Errorf("InviteCpRelation myUserId:%d, err:%v", myUserId, err)
			return err
		}
chenweijian's avatar
chenweijian committed
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
		// 发送私信
		type CpInviteMessage struct {
			Identifier string `json:"identifier"`
			Msg        string `json:"msg"`
		}
		data, _ := json.Marshal(CpInviteMessage{
			Identifier: "CpInviteMessage",
			Msg:        "Do you want to be CP with me?",
		})
		if err := tencentyun.BatchSendCustomMsg(model, 1, user.ExternalId, []string{userInvite.ExternalId}, string(data), "cp邀请"); err != nil {
			model.Log.Errorf("BatchSendCustomMsg fail:%v", err)
			return err
		}
		return nil
	})
	if err != nil {
		model.Log.Errorf("InviteCpRelation myUserId:%d, err:%v", myUserId, err)
		return myCtx, err
	}
	// socket 推送弹窗
	go rpc.SendCpInviteNotice(userInvite.ID, user.Code, user.Nick, user.Avatar, "Do you want to be CP with me?")

	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{})
	return myCtx, nil
}