Skip to content

Commit a9540bf

Browse files
committed
feat(user): set default user notification config
1 parent 758309d commit a9540bf

6 files changed

Lines changed: 93 additions & 22 deletions

File tree

cmd/wire_gen.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/migrations/migrations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ var migrations = []Migration{
7272
NewMigration("v1.1.0", "add gravatar base url", updateCount, true),
7373
NewMigration("v1.1.1", "update the length of revision content", updateTheLengthOfRevisionContent, false),
7474
NewMigration("v1.1.2", "add notification config", addNoticeConfig, true),
75+
NewMigration("v1.1.3", "set default user notification config", setDefaultUserNotificationConfig, false),
7576
}
7677

7778
func GetMigrations() []Migration {

internal/migrations/v16.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package migrations
2+
3+
import (
4+
"context"
5+
"github.com/answerdev/answer/internal/base/constant"
6+
"github.com/answerdev/answer/internal/entity"
7+
"github.com/segmentfault/pacman/log"
8+
"xorm.io/xorm"
9+
)
10+
11+
func setDefaultUserNotificationConfig(ctx context.Context, x *xorm.Engine) error {
12+
userIDs := make([]string, 0)
13+
err := x.Context(ctx).Table("user").Select("id").Find(&userIDs)
14+
if err != nil {
15+
return err
16+
}
17+
18+
for _, id := range userIDs {
19+
bean := entity.UserNotificationConfig{UserID: id, Source: string(constant.InboxSource)}
20+
exist, err := x.Context(ctx).Get(&bean)
21+
if err != nil {
22+
log.Error(err)
23+
}
24+
if exist {
25+
continue
26+
}
27+
_, err = x.Context(ctx).Insert(&entity.UserNotificationConfig{
28+
UserID: id,
29+
Source: string(constant.InboxSource),
30+
Channels: `[{"key":"email","enable":true}]`,
31+
Enabled: true,
32+
})
33+
if err != nil {
34+
log.Error(err)
35+
}
36+
}
37+
return nil
38+
}

internal/repo/user_notification_config/user_notification_config_repo.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,24 @@ func NewUserNotificationConfigRepo(data *data.Data) user_notification_config.Use
2222
}
2323
}
2424

25+
// Add add notification config
26+
func (ur *userNotificationConfigRepo) Add(ctx context.Context, userIDs []string, source, channels string) (err error) {
27+
var configs []*entity.UserNotificationConfig
28+
for _, userID := range userIDs {
29+
configs = append(configs, &entity.UserNotificationConfig{
30+
UserID: userID,
31+
Source: source,
32+
Channels: channels,
33+
Enabled: true,
34+
})
35+
}
36+
_, err = ur.data.DB.Context(ctx).Insert(configs)
37+
if err != nil {
38+
return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
39+
}
40+
return nil
41+
}
42+
2543
// Save save notification config, if existed, update, if not exist, insert
2644
func (ur *userNotificationConfigRepo) Save(ctx context.Context, uc *entity.UserNotificationConfig) (err error) {
2745
old := &entity.UserNotificationConfig{UserID: uc.UserID, Source: uc.Source}

internal/service/user_notification_config/user_notification_config_service.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
)
1010

1111
type UserNotificationConfigRepo interface {
12+
Add(ctx context.Context, userIDs []string, source, channels string) (err error)
1213
Save(ctx context.Context, uc *entity.UserNotificationConfig) (err error)
1314
GetByUserID(ctx context.Context, userID string) ([]*entity.UserNotificationConfig, error)
1415
GetBySource(ctx context.Context, source constant.NotificationSource) ([]*entity.UserNotificationConfig, error)
@@ -68,6 +69,13 @@ func (us *UserNotificationConfigService) UpdateUserNotificationConfig(
6869
return nil
6970
}
7071

72+
// SetDefaultUserNotificationConfig set default user notification config for user register
73+
func (us *UserNotificationConfigService) SetDefaultUserNotificationConfig(ctx context.Context, userIDs []string) (
74+
err error) {
75+
return us.userNotificationConfigRepo.Add(ctx, userIDs,
76+
string(constant.InboxSource), `[{"key":"email","enable":true}]`)
77+
}
78+
7179
func (us *UserNotificationConfigService) convertToEntity(ctx context.Context, userID string,
7280
source constant.NotificationSource, channels schema.NotificationChannels) (c *entity.UserNotificationConfig) {
7381
c = &entity.UserNotificationConfig{

internal/service/user_service.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,17 @@ import (
3232

3333
// UserService user service
3434
type UserService struct {
35-
userCommonService *usercommon.UserCommon
36-
userRepo usercommon.UserRepo
37-
userActivity activity.UserActiveActivityRepo
38-
activityRepo activity_common.ActivityRepo
39-
emailService *export.EmailService
40-
authService *auth.AuthService
41-
siteInfoService siteinfo_common.SiteInfoCommonService
42-
userRoleService *role.UserRoleRelService
43-
userExternalLoginService *user_external_login.UserExternalLoginService
44-
userNotificationConfigRepo user_notification_config.UserNotificationConfigRepo
35+
userCommonService *usercommon.UserCommon
36+
userRepo usercommon.UserRepo
37+
userActivity activity.UserActiveActivityRepo
38+
activityRepo activity_common.ActivityRepo
39+
emailService *export.EmailService
40+
authService *auth.AuthService
41+
siteInfoService siteinfo_common.SiteInfoCommonService
42+
userRoleService *role.UserRoleRelService
43+
userExternalLoginService *user_external_login.UserExternalLoginService
44+
userNotificationConfigRepo user_notification_config.UserNotificationConfigRepo
45+
userNotificationConfigService *user_notification_config.UserNotificationConfigService
4546
}
4647

4748
func NewUserService(userRepo usercommon.UserRepo,
@@ -54,18 +55,20 @@ func NewUserService(userRepo usercommon.UserRepo,
5455
userCommonService *usercommon.UserCommon,
5556
userExternalLoginService *user_external_login.UserExternalLoginService,
5657
userNotificationConfigRepo user_notification_config.UserNotificationConfigRepo,
58+
userNotificationConfigService *user_notification_config.UserNotificationConfigService,
5759
) *UserService {
5860
return &UserService{
59-
userCommonService: userCommonService,
60-
userRepo: userRepo,
61-
userActivity: userActivity,
62-
activityRepo: activityRepo,
63-
emailService: emailService,
64-
authService: authService,
65-
siteInfoService: siteInfoService,
66-
userRoleService: userRoleService,
67-
userExternalLoginService: userExternalLoginService,
68-
userNotificationConfigRepo: userNotificationConfigRepo,
61+
userCommonService: userCommonService,
62+
userRepo: userRepo,
63+
userActivity: userActivity,
64+
activityRepo: activityRepo,
65+
emailService: emailService,
66+
authService: authService,
67+
siteInfoService: siteInfoService,
68+
userRoleService: userRoleService,
69+
userExternalLoginService: userExternalLoginService,
70+
userNotificationConfigRepo: userNotificationConfigRepo,
71+
userNotificationConfigService: userNotificationConfigService,
6972
}
7073
}
7174

@@ -398,6 +401,9 @@ func (us *UserService) UserRegisterByEmail(ctx context.Context, registerUserInfo
398401
if err != nil {
399402
return nil, nil, err
400403
}
404+
if err := us.userNotificationConfigService.SetDefaultUserNotificationConfig(ctx, []string{userInfo.ID}); err != nil {
405+
log.Errorf("set default user notification config failed, err: %v", err)
406+
}
401407

402408
// send email
403409
data := &schema.EmailCodeContent{

0 commit comments

Comments
 (0)