/* * 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 }