Skip to content

Commit fc9b100

Browse files
authored
Merge pull request #492 from chaitin/feat/team-hook
feat(team): 新增 TeamHook 支持团队成员添加后回调
2 parents 05105cc + beb4bca commit fc9b100

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

backend/biz/team/usecase/user.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type TeamGroupUserUsecase struct {
2727
config *config.Config
2828
smtpClient domain.EmailSender
2929
redisClient *redis.Client
30+
teamHook domain.TeamHook
3031
}
3132

3233
// NewTeamGroupUserUsecase 创建团队分组成员业务逻辑层实例
@@ -42,6 +43,10 @@ func NewTeamGroupUserUsecase(i *do.Injector) (domain.TeamGroupUserUsecase, error
4243
redisClient: do.MustInvoke[*redis.Client](i),
4344
}
4445

46+
if hook, err := do.Invoke[domain.TeamHook](i); err == nil {
47+
t.teamHook = hook
48+
}
49+
4550
go t.initTeam()
4651

4752
return t, nil
@@ -93,6 +98,13 @@ func (u *TeamGroupUserUsecase) AddUser(ctx context.Context, teamUser *domain.Tea
9398
if err != nil {
9499
return nil, err
95100
}
101+
if u.teamHook != nil {
102+
for _, user := range users {
103+
if err := u.teamHook.OnMemberAdded(ctx, teamUser.GetTeamID(), user.ID); err != nil {
104+
u.logger.WarnContext(ctx, "teamHook.OnMemberAdded failed", "user_id", user.ID, "error", err)
105+
}
106+
}
107+
}
96108
// 发送重置密码邮件(如果没有发送成功就用户自己请求重置)
97109
for _, user := range users {
98110
if user.Email != "" {
@@ -123,6 +135,11 @@ func (u *TeamGroupUserUsecase) AddAdmin(ctx context.Context, teamUser *domain.Te
123135
if err != nil {
124136
return nil, err
125137
}
138+
if u.teamHook != nil {
139+
if err := u.teamHook.OnMemberAdded(ctx, teamUser.GetTeamID(), user.ID); err != nil {
140+
u.logger.WarnContext(ctx, "teamHook.OnMemberAdded failed", "user_id", user.ID, "error", err)
141+
}
142+
}
126143
if user.Email != "" {
127144
token, err := u.generateResetPWDToken(ctx, user.ID)
128145
if err != nil {

backend/bridge.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ func WithProjectHook(hook domain.ProjectHook) BridgeOption {
7878
}
7979
}
8080

81+
// WithTeamHook 注入团队成员变更回调
82+
func WithTeamHook(hook domain.TeamHook) BridgeOption {
83+
return func(i *do.Injector) {
84+
do.ProvideValue(i, hook)
85+
}
86+
}
87+
8188
// WithSiteResolver 注入站点解析器
8289
func WithSiteResolver(resolver domain.SiteResolver) BridgeOption {
8390
return func(i *do.Injector) {

backend/domain/domain.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ type ProjectHook interface {
5656
GetInternalRepoToken(ctx context.Context, userID uuid.UUID, projectID uuid.UUID) (string, error)
5757
}
5858

59+
// TeamHook 团队成员变更回调接口(可选,内部项目通过 WithTeamHook 注入)
60+
type TeamHook interface {
61+
// OnMemberAdded 团队成员添加后回调(如授予专业版订阅)
62+
OnMemberAdded(ctx context.Context, teamID, userID uuid.UUID) error
63+
}
64+
5965
// SiteResolver 站点解析接口(可选,内部项目通过 WithSiteResolver 注入)
6066
type SiteResolver interface {
6167
// ResolveByHost 通过域名解析站点配置

0 commit comments

Comments
 (0)