@@ -18,6 +18,7 @@ import (
18
18
"context"
19
19
"encoding/json"
20
20
"fmt"
21
+ "time"
21
22
22
23
"github.com/ecodeclub/mq-api"
23
24
"github.com/ecodeclub/webook/internal/member/internal/domain"
@@ -26,20 +27,37 @@ import (
26
27
)
27
28
28
29
type RegistrationEventConsumer struct {
29
- svc service.Service
30
- consumer mq.Consumer
31
- startAtFunc func () int64
32
- endAtFunc func () int64
33
- logger * elog.Component
30
+ svc service.Service
31
+ consumer mq.Consumer
32
+ endAt int64
33
+ logger * elog.Component
34
34
}
35
35
36
- func NewRegistrationEventConsumer (svc service.Service , consumer mq.Consumer , startAtFunc func () int64 , endAtFunc func () int64 ) * RegistrationEventConsumer {
36
+ func NewRegistrationEventConsumer (svc service.Service ,
37
+ q mq.MQ ) (* RegistrationEventConsumer , error ) {
38
+ const groupID = "member"
39
+ consumer , err := q .Consumer (userRegistrationEvents , groupID )
40
+ if err != nil {
41
+ return nil , err
42
+ }
37
43
return & RegistrationEventConsumer {
38
- svc : svc ,
39
- consumer : consumer ,
40
- startAtFunc : startAtFunc ,
41
- endAtFunc : endAtFunc ,
42
- logger : elog .DefaultLogger }
44
+ svc : svc ,
45
+ consumer : consumer ,
46
+ endAt : time .Date (2024 , 6 , 30 , 23 , 59 , 59 , 0 , time .UTC ).UnixMilli (),
47
+ logger : elog .DefaultLogger ,
48
+ }, nil
49
+ }
50
+
51
+ // Start 后面要考虑借助 ctx 来优雅退出
52
+ func (c * RegistrationEventConsumer ) Start (ctx context.Context ) {
53
+ go func () {
54
+ for {
55
+ er := c .Consume (ctx )
56
+ if er != nil {
57
+ c .logger .Error ("消费注册事件失败" , elog .FieldErr (er ))
58
+ }
59
+ }
60
+ }()
43
61
}
44
62
45
63
func (c * RegistrationEventConsumer ) Consume (ctx context.Context ) error {
@@ -53,23 +71,12 @@ func (c *RegistrationEventConsumer) Consume(ctx context.Context) error {
53
71
if err != nil {
54
72
return fmt .Errorf ("解析消息失败: %w" , err )
55
73
}
56
-
57
- _ , err = c .svc .GetMembershipInfo (ctx , evt .Uid )
58
- if err == nil {
59
- return fmt .Errorf ("用户会员记录已存在" )
60
- }
61
-
62
- startAt := c .startAtFunc ()
63
- endAt := c .endAtFunc ()
64
- if endAt <= startAt {
65
- return fmt .Errorf ("超过注册优惠截止日期" )
66
- }
67
-
68
74
_ , err = c .svc .CreateNewMembership (ctx , domain.Member {
69
75
UID : evt .Uid ,
70
- StartAt : c . startAtFunc (),
71
- EndAt : c .endAtFunc () ,
76
+ StartAt : time . Now (). UnixMilli (),
77
+ EndAt : c .endAt ,
72
78
})
79
+
73
80
if err != nil {
74
81
c .logger .Error ("创建会员记录失败" ,
75
82
elog .FieldErr (err ),
0 commit comments