package logic import ( "context" "slowwild/internal/errorx" "slowwild/internal/model" "slowwild/internal/svc" "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver" "slowwild/internal/constants" "github.com/spf13/cast" "github.com/zeromicro/go-zero/core/logx" "gorm.io/gorm" ) type PostDeleteLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewPostDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PostDeleteLogic { return &PostDeleteLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 删除帖子 func (l *PostDeleteLogic) PostDelete(in *slowwildserver.PostDeleteReq) (*slowwildserver.PostDeleteRsp, error) { // 从context中获取userId userId, err := cast.ToInt64E(l.ctx.Value(constants.UserIDKey)) if err != nil { return nil, errorx.ErrInvalidParam } if in.PostId <= 0 { return nil, errorx.ErrInvalidParam } // 开启事务 err = l.svcCtx.UserModel.Transaction(l.ctx, func(tx *gorm.DB) error { postModel := model.NewPostModel(tx, l.svcCtx.Redis) userModel := model.NewUserModel(tx) // 获取帖子信息 post, err := postModel.GetPostDetail(l.ctx, in.PostId) if err != nil { return err } // 检查是否是自己的帖子 if post.UserId != userId { return errorx.NewCodeError(20008, "无权删除该帖子") } // 删除帖子 if err := postModel.Delete(l.ctx, in.PostId); err != nil { return err } // 减少用户的帖子数 if err := userModel.DecrementTweetCount(l.ctx, userId); err != nil { return err } // 删除相关缓存 postModel.ClearCache(l.ctx, in.PostId) return nil }) if err != nil { l.Logger.Errorf("删除帖子失败: %v", err) return nil, errorx.NewCodeError(20009, "删除帖子失败") } return &slowwildserver.PostDeleteRsp{}, nil }