chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package user_notification_config
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/apache/answer/internal/base/constant"
|
||||
"github.com/apache/answer/internal/entity"
|
||||
"github.com/apache/answer/internal/schema"
|
||||
usercommon "github.com/apache/answer/internal/service/user_common"
|
||||
)
|
||||
|
||||
type UserNotificationConfigRepo interface {
|
||||
Add(ctx context.Context, userIDs []string, source, channels string) (err error)
|
||||
Save(ctx context.Context, uc *entity.UserNotificationConfig) (err error)
|
||||
GetByUserID(ctx context.Context, userID string) ([]*entity.UserNotificationConfig, error)
|
||||
GetBySource(ctx context.Context, source constant.NotificationSource) ([]*entity.UserNotificationConfig, error)
|
||||
GetByUserIDAndSource(ctx context.Context, userID string, source constant.NotificationSource) (
|
||||
conf *entity.UserNotificationConfig, exist bool, err error)
|
||||
GetByUsersAndSource(ctx context.Context, userIDs []string, source constant.NotificationSource) (
|
||||
[]*entity.UserNotificationConfig, error)
|
||||
}
|
||||
|
||||
type UserNotificationConfigService struct {
|
||||
userRepo usercommon.UserRepo
|
||||
userNotificationConfigRepo UserNotificationConfigRepo
|
||||
}
|
||||
|
||||
func NewUserNotificationConfigService(
|
||||
userRepo usercommon.UserRepo,
|
||||
userNotificationConfigRepo UserNotificationConfigRepo,
|
||||
) *UserNotificationConfigService {
|
||||
return &UserNotificationConfigService{
|
||||
userRepo: userRepo,
|
||||
userNotificationConfigRepo: userNotificationConfigRepo,
|
||||
}
|
||||
}
|
||||
|
||||
func (us *UserNotificationConfigService) GetUserNotificationConfig(ctx context.Context, userID string) (
|
||||
resp *schema.GetUserNotificationConfigResp, err error) {
|
||||
notificationConfigs, err := us.userNotificationConfigRepo.GetByUserID(ctx, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp = &schema.GetUserNotificationConfigResp{}
|
||||
resp.NotificationConfig = schema.NewNotificationConfig(notificationConfigs)
|
||||
resp.Format()
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (us *UserNotificationConfigService) UpdateUserNotificationConfig(
|
||||
ctx context.Context, req *schema.UpdateUserNotificationConfigReq) (err error) {
|
||||
req.Format()
|
||||
|
||||
err = us.userNotificationConfigRepo.Save(ctx,
|
||||
us.convertToEntity(ctx, req.UserID, constant.InboxSource, req.Inbox))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = us.userNotificationConfigRepo.Save(ctx,
|
||||
us.convertToEntity(ctx, req.UserID, constant.AllNewQuestionSource, req.AllNewQuestion))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = us.userNotificationConfigRepo.Save(ctx,
|
||||
us.convertToEntity(ctx, req.UserID, constant.AllNewQuestionForFollowingTagsSource,
|
||||
req.AllNewQuestionForFollowingTags))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetDefaultUserNotificationConfig set default user notification config for user register
|
||||
func (us *UserNotificationConfigService) SetDefaultUserNotificationConfig(ctx context.Context, userIDs []string) (
|
||||
err error) {
|
||||
return us.userNotificationConfigRepo.Add(ctx, userIDs,
|
||||
string(constant.InboxSource), `[{"key":"email","enable":true}]`)
|
||||
}
|
||||
|
||||
func (us *UserNotificationConfigService) convertToEntity(_ context.Context, userID string,
|
||||
source constant.NotificationSource, channel schema.NotificationChannelConfig) (c *entity.UserNotificationConfig) {
|
||||
var channels schema.NotificationChannels
|
||||
channels = append(channels, &channel)
|
||||
c = &entity.UserNotificationConfig{
|
||||
UserID: userID,
|
||||
Source: string(source),
|
||||
Channels: channels.ToJsonString(),
|
||||
}
|
||||
for _, ch := range channels {
|
||||
if ch.Enable {
|
||||
c.Enabled = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return c
|
||||
}
|
||||
Reference in New Issue
Block a user