blob: eca97e81ca5eae0f9090267426a7c82fca7fd7f9 [file] [log] [blame]
/*
* 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 schema
import (
"encoding/json"
"github.com/apache/answer/internal/base/constant"
"github.com/apache/answer/internal/entity"
)
type NotificationChannelConfig struct {
Key constant.NotificationChannelKey `json:"key"`
Enable bool `json:"enable"`
}
type NotificationChannels []*NotificationChannelConfig
func NewNotificationChannelsFormJson(jsonStr string) NotificationChannels {
var list NotificationChannels
_ = json.Unmarshal([]byte(jsonStr), &list)
return list
}
func NewNotificationChannelConfigFormJson(jsonStr string) NotificationChannelConfig {
var list NotificationChannels
_ = json.Unmarshal([]byte(jsonStr), &list)
if len(list) > 0 {
return *list[0]
}
return NotificationChannelConfig{}
}
func (n *NotificationChannels) ToJsonString() string {
data, _ := json.Marshal(n)
return string(data)
}
type NotificationConfig struct {
Inbox NotificationChannelConfig `json:"inbox"`
AllNewQuestion NotificationChannelConfig `json:"all_new_question"`
AllNewQuestionForFollowingTags NotificationChannelConfig `json:"all_new_question_for_following_tags"`
}
func NewNotificationConfig(configs []*entity.UserNotificationConfig) NotificationConfig {
nc := NotificationConfig{}
for _, item := range configs {
switch item.Source {
case string(constant.InboxSource):
nc.Inbox = NewNotificationChannelConfigFormJson(item.Channels)
case string(constant.AllNewQuestionSource):
nc.AllNewQuestion = NewNotificationChannelConfigFormJson(item.Channels)
case string(constant.AllNewQuestionForFollowingTagsSource):
nc.AllNewQuestionForFollowingTags = NewNotificationChannelConfigFormJson(item.Channels)
}
}
return nc
}
func (n *NotificationConfig) Format() {
if n.Inbox.Key == "" {
n.Inbox.Key = constant.EmailChannel
n.Inbox.Enable = false
}
if n.AllNewQuestion.Key == "" {
n.AllNewQuestion.Key = constant.EmailChannel
n.AllNewQuestion.Enable = false
}
if n.AllNewQuestionForFollowingTags.Key == "" {
n.AllNewQuestionForFollowingTags.Key = constant.EmailChannel
n.AllNewQuestionForFollowingTags.Enable = false
}
}
// UpdateUserNotificationConfigReq update user notification config request
type UpdateUserNotificationConfigReq struct {
NotificationConfig
UserID string `json:"-"`
}
// GetUserNotificationConfigResp get user notification config response
type GetUserNotificationConfigResp struct {
NotificationConfig
}