feat: 接入论坛奖励 outbox 链路

This commit is contained in:
Losita
2026-05-05 10:44:33 +08:00
parent 4fc6c0cac3
commit c42f0c5b8c
31 changed files with 1381 additions and 101 deletions

View File

@@ -14,7 +14,12 @@ import (
"github.com/gin-gonic/gin"
)
const requestTimeout = 2 * time.Second
const (
requestTimeout = 2 * time.Second
forumLikeRewardAmount = int64(1)
forumImportRewardAmount = int64(5)
rewardHintStatusActive = "rule_active"
)
type ForumClient interface {
ListPosts(ctx context.Context, actorUserID uint64, page int, pageSize int, sort string, keyword string, tag string) ([]contracts.ForumPostBrief, contracts.PageResult, error)
@@ -220,8 +225,8 @@ func (h *Handler) LikePost(c *gin.Context) {
LikeCount: counters.LikeCount,
RewardHint: &rewardHint{
Receiver: "author",
Status: "recorded",
Amount: 1,
Status: rewardHintStatusActive,
Amount: forumLikeRewardAmount,
},
}))
}
@@ -369,8 +374,8 @@ func (h *Handler) ImportPost(c *gin.Context) {
ImportCount: result.ImportCount,
RewardHint: rewardHint{
Receiver: "author",
Status: "recorded",
Amount: 2,
Status: rewardHintStatusActive,
Amount: forumImportRewardAmount,
},
NextAction: nextAction{
Type: "open_task_class",

View File

@@ -217,6 +217,25 @@ func (c *Client) ListGrants(ctx context.Context, req tokencontracts.ListTokenGra
return tokenGrantsFromPB(resp.Items), pageFromPB(resp.Page), nil
}
func (c *Client) RecordForumRewardGrant(ctx context.Context, req tokencontracts.RecordForumRewardGrantRequest) (*tokencontracts.TokenGrantView, error) {
if err := c.ensureReady(); err != nil {
return nil, err
}
resp, err := c.rpc.RecordForumRewardGrant(ctx, &pb.RecordForumRewardGrantRequest{
EventId: req.EventID,
ReceiverUserId: req.ReceiverUserID,
Source: req.Source,
SourceRefId: req.SourceRefID,
})
if err != nil {
return nil, responseFromRPCError(err)
}
if resp == nil {
return nil, errors.New("tokenstore zrpc service returned empty record forum reward grant response")
}
return tokenGrantFromPB(resp.Grant), nil
}
func (c *Client) ensureReady() error {
if c == nil || c.rpc == nil {
return errors.New("tokenstore zrpc client is not initialized")