| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- package app
- import (
- "time"
- "github.com/demdxx/gocast"
- "github.com/gin-gonic/gin"
- "go_server/model/biz_modules/app"
- "go_server/model/common/response"
- "go_server/service/base"
- )
- type TgUserBindService struct {
- base.BizCommonService
- }
- // Find 查询用户绑定列表
- func (s *TgUserBindService) Find(c *gin.Context) {
- s.SetDbAlias("app")
- type request[T any] struct {
- base.ListRequest[T]
- UserId *int64 `form:"user_id" json:"user_id"`
- TelegramId *int64 `form:"telegram_id" json:"telegram_id"`
- TelegramUsername string `form:"telegram_username" json:"telegram_username"`
- BindStatus *int `form:"bind_status" json:"bind_status"`
- }
- req := new(request[app.TgUserBind])
- if err := c.BindQuery(req); err != nil {
- response.Resp(c, err.Error())
- return
- }
- db := s.DB()
- // 条件筛选
- if req.UserId != nil && *req.UserId != 0 {
- db = db.Where("user_id = ?", *req.UserId)
- }
- if req.TelegramId != nil && *req.TelegramId != 0 {
- db = db.Where("telegram_id = ?", *req.TelegramId)
- }
- if req.TelegramUsername != "" {
- db = db.Where("telegram_username LIKE ?", "%"+req.TelegramUsername+"%")
- }
- if req.BindStatus != nil {
- db = db.Where("bind_status = ?", *req.BindStatus)
- }
- // 按创建时间倒序
- db = db.Order("created_at DESC")
- resp, err := base.NewQueryBaseHandler(app.NewTgUserBind()).List(db, req)
- if err != nil {
- response.Resp(c, err.Error())
- return
- }
- response.Resp(c, resp)
- }
- // Get 获取用户绑定详情
- func (s *TgUserBindService) Get(c *gin.Context) {
- s.SetDbAlias("app")
- base.NewBaseHandler(app.NewTgUserBind()).Get(c, s.DB())
- }
- // Create 创建用户绑定
- func (s *TgUserBindService) Create(c *gin.Context) {
- s.SetDbAlias("app")
- type request struct {
- UserId interface{} `json:"userId"`
- TelegramId interface{} `json:"telegramId"`
- TelegramUsername string `json:"telegramUsername"`
- TelegramFirstName string `json:"telegramFirstName"`
- }
- req := new(request)
- if err := c.BindJSON(req); err != nil {
- response.Resp(c, err.Error())
- return
- }
- userId := gocast.ToInt64(req.UserId)
- telegramId := gocast.ToInt64(req.TelegramId)
- // 验证必填字段
- if userId == 0 {
- response.Resp(c, "平台用户ID不能为空")
- return
- }
- if req.TelegramUsername == "" {
- response.Resp(c, "Telegram用户名不能为空")
- return
- }
- // 检查是否已绑定
- var count int64
- s.DB().Model(&app.TgUserBind{}).Where("telegram_username = ? AND bind_status = 1", req.TelegramUsername).Count(&count)
- if count > 0 {
- response.Resp(c, "该Telegram用户名已被绑定")
- return
- }
- // 检查 UserId 是否已绑定
- s.DB().Model(&app.TgUserBind{}).Where("user_id = ? AND bind_status = 1", userId).Count(&count)
- if count > 0 {
- response.Resp(c, "该平台用户已绑定其他Telegram账号")
- return
- }
- now := time.Now()
- bind := &app.TgUserBind{
- UserId: userId,
- TelegramId: telegramId,
- TelegramUsername: req.TelegramUsername,
- TelegramFirstName: req.TelegramFirstName,
- BindStatus: 1,
- BindTime: now,
- CreatedAt: now.Unix(),
- UpdatedAt: now.Unix(),
- }
- if err := s.DB().Create(bind).Error; err != nil {
- response.Resp(c, err.Error())
- return
- }
- response.Resp(c, bind)
- }
- // Update 更新用户绑定
- func (s *TgUserBindService) Update(c *gin.Context) {
- s.SetDbAlias("app")
- type request struct {
- Id int64 `json:"id" binding:"required"`
- UserId interface{} `json:"userId"`
- TelegramId interface{} `json:"telegramId"`
- TelegramUsername string `json:"telegramUsername"`
- TelegramFirstName string `json:"telegramFirstName"`
- BindStatus *int `json:"bindStatus"`
- }
- req := new(request)
- if err := c.BindJSON(req); err != nil {
- response.Resp(c, err.Error())
- return
- }
- bind, ok := base.GetOne[app.TgUserBind](s.DB(), "id", req.Id)
- if !ok {
- response.Resp(c, "绑定记录不存在")
- return
- }
- userId := gocast.ToInt64(req.UserId)
- telegramId := gocast.ToInt64(req.TelegramId)
- // 更新字段
- updates := make(map[string]interface{})
- if userId != 0 {
- updates["user_id"] = userId
- }
- if telegramId != 0 {
- updates["telegram_id"] = telegramId
- }
- if req.TelegramUsername != "" {
- updates["telegram_username"] = req.TelegramUsername
- }
- if req.TelegramFirstName != "" {
- updates["telegram_first_name"] = req.TelegramFirstName
- }
- if req.BindStatus != nil {
- updates["bind_status"] = *req.BindStatus
- }
- updates["updated_at"] = time.Now().Unix()
- if err := s.DB().Model(&bind).Updates(updates).Error; err != nil {
- response.Resp(c, err.Error())
- return
- }
- response.Resp(c)
- }
- // Delete 删除用户绑定(软删除:修改状态为已解绑)
- func (s *TgUserBindService) Delete(c *gin.Context) {
- s.SetDbAlias("app")
- id, ok := c.GetQuery("id")
- if !ok {
- response.Resp(c, "未填写ID")
- return
- }
- bindId := gocast.ToInt64(id)
- if bindId == 0 {
- response.Resp(c, "ID无效")
- return
- }
- bind, ok := base.GetOne[app.TgUserBind](s.DB(), "id", bindId)
- if !ok {
- response.Resp(c, "绑定记录不存在")
- return
- }
- // 软删除:状态改为0(已解绑)
- updates := map[string]interface{}{
- "bind_status": 0,
- "updated_at": time.Now().Unix(),
- }
- if err := s.DB().Model(&bind).Updates(updates).Error; err != nil {
- response.Resp(c, err.Error())
- return
- }
- response.Resp(c)
- }
|