postdeletelogic.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package logic
  2. import (
  3. "context"
  4. "slowwild/internal/errorx"
  5. "slowwild/internal/model"
  6. "slowwild/internal/svc"
  7. "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "gorm.io/gorm"
  10. )
  11. type PostDeleteLogic struct {
  12. ctx context.Context
  13. svcCtx *svc.ServiceContext
  14. logx.Logger
  15. }
  16. func NewPostDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PostDeleteLogic {
  17. return &PostDeleteLogic{
  18. ctx: ctx,
  19. svcCtx: svcCtx,
  20. Logger: logx.WithContext(ctx),
  21. }
  22. }
  23. // 删除帖子
  24. func (l *PostDeleteLogic) PostDelete(in *slowwildserver.PostDeleteReq) (*slowwildserver.PostDeleteRsp, error) {
  25. if in.UserId <= 0 || in.PostId <= 0 {
  26. return nil, errorx.ErrInvalidParam
  27. }
  28. // 开启事务
  29. err := l.svcCtx.UserModel.Transaction(l.ctx, func(tx *gorm.DB) error {
  30. postModel := model.NewPostModel(tx, l.svcCtx.Redis)
  31. userModel := model.NewUserModel(tx)
  32. // 获取帖子信息
  33. post, err := postModel.GetPostDetail(l.ctx, in.PostId)
  34. if err != nil {
  35. return err
  36. }
  37. // 检查是否是自己的帖子
  38. if post.UserId != in.UserId {
  39. return errorx.NewCodeError(20008, "无权删除该帖子")
  40. }
  41. // 删除帖子
  42. if err := postModel.Delete(l.ctx, in.PostId); err != nil {
  43. return err
  44. }
  45. // 减少用户的帖子数
  46. if err := userModel.DecrementTweetCount(l.ctx, in.UserId); err != nil {
  47. return err
  48. }
  49. // 删除相关缓存
  50. postModel.ClearCache(l.ctx, in.PostId)
  51. return nil
  52. })
  53. if err != nil {
  54. l.Logger.Errorf("删除帖子失败: %v", err)
  55. return nil, errorx.NewCodeError(20009, "删除帖子失败")
  56. }
  57. return &slowwildserver.PostDeleteRsp{}, nil
  58. }