package logic import ( "context" "time" "muyu-apiserver/rpc/production/internal/svc" "muyu-apiserver/rpc/production/pb" "github.com/zeromicro/go-zero/core/logx" ) type RejectShareLinkLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewRejectShareLinkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RejectShareLinkLogic { return &RejectShareLinkLogic{ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx)} } func (l *RejectShareLinkLogic) RejectShareLink(in *pb.RejectShareLinkReq) (*pb.Empty, error) { link, err := l.svcCtx.ShareLinkModel.FindByShortCode(l.ctx, in.ShortCode) if err != nil { return nil, ErrLinkNotFound } // Check not expired if time.Now().After(link.ExpiresAt) { return nil, ErrLinkExpired } // Check status is 0 (created) or 1 (clicked) if link.Status != 0 && link.Status != 1 { return nil, ErrLinkAlreadyUsed } // Update status to 3 (rejected) with reason if err := l.svcCtx.ShareLinkModel.UpdateStatus(l.ctx, in.ShortCode, 3, in.RejectReason); err != nil { return nil, err } return &pb.Empty{}, nil }