blob: a68328acea959075a3b38b4994dd71f95e1f3097 [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/entity"
"sort"
)
const (
NotificationTypeInbox = 1
NotificationTypeAchievement = 2
NotificationNotRead = 1
NotificationRead = 2
NotificationStatusNormal = 1
NotificationStatusDelete = 10
NotificationInboxTypeAll = 0
NotificationInboxTypePosts = 1
NotificationInboxTypeVotes = 2
NotificationInboxTypeInvites = 3
)
var NotificationType = map[string]int{
"inbox": NotificationTypeInbox,
"achievement": NotificationTypeAchievement,
}
var NotificationInboxType = map[string]int{
"all": NotificationInboxTypeAll,
"posts": NotificationInboxTypePosts,
"invites": NotificationInboxTypeInvites,
"votes": NotificationInboxTypeVotes,
}
type NotificationContent struct {
ID string `json:"id"`
TriggerUserID string `json:"-"` //show userid
ReceiverUserID string `json:"-"` // receiver userid
UserInfo *UserBasicInfo `json:"user_info,omitempty"`
ObjectInfo ObjectInfo `json:"object_info"`
Rank int `json:"rank"`
NotificationAction string `json:"notification_action,omitempty"`
Type int `json:"-"` // 1 inbox 2 achievement
IsRead bool `json:"is_read"`
UpdateTime int64 `json:"update_time"`
}
type GetRedDot struct {
CanReviewQuestion bool `json:"-"`
CanReviewAnswer bool `json:"-"`
CanReviewTag bool `json:"-"`
UserID string `json:"-"`
IsAdmin bool `json:"-"`
}
// NotificationMsg notification message
type NotificationMsg struct {
// trigger notification user id
TriggerUserID string
// receive notification user id
ReceiverUserID string
// type 1 inbox 2 achievement
Type int
// notification title
Title string
// notification object
ObjectID string
// notification object type
ObjectType string
// notification action
NotificationAction string
// if true no need to send notification to all followers
NoNeedPushAllFollow bool
// extra info
ExtraInfo map[string]string
}
type ObjectInfo struct {
Title string `json:"title"`
ObjectID string `json:"object_id"`
ObjectMap map[string]string `json:"object_map"`
ObjectType string `json:"object_type"`
}
type RedDot struct {
Inbox int64 `json:"inbox"`
Achievement int64 `json:"achievement"`
Revision int64 `json:"revision"`
CanRevision bool `json:"can_revision"`
BadgeAward *RedDotBadgeAward `json:"badge_award"`
}
type RedDotBadgeAward struct {
NotificationID string `json:"notification_id"`
BadgeID string `json:"badge_id"`
Name string `json:"name"`
Icon string `json:"icon"`
Level entity.BadgeLevel `json:"level"`
}
type RedDotBadgeAwardCache struct {
BadgeAwardList map[string]*RedDotBadgeAward `json:"badge_award_list"`
}
// NewRedDotBadgeAwardCache new red dot badge award cache
func NewRedDotBadgeAwardCache() *RedDotBadgeAwardCache {
return &RedDotBadgeAwardCache{
BadgeAwardList: make(map[string]*RedDotBadgeAward),
}
}
// GetBadgeAward get badge award
func (r *RedDotBadgeAwardCache) GetBadgeAward() *RedDotBadgeAward {
if len(r.BadgeAwardList) == 0 {
return nil
}
var ids []string
for _, v := range r.BadgeAwardList {
ids = append(ids, v.NotificationID)
}
sort.Strings(ids)
return r.BadgeAwardList[ids[0]]
}
// FromJSON from json
func (r *RedDotBadgeAwardCache) FromJSON(data string) {
_ = json.Unmarshal([]byte(data), r)
}
// ToJSON to json
func (r *RedDotBadgeAwardCache) ToJSON() string {
data, _ := json.Marshal(r)
return string(data)
}
// AddBadgeAward add badge award
func (r *RedDotBadgeAwardCache) AddBadgeAward(badgeAward *RedDotBadgeAward) {
if r.BadgeAwardList == nil {
r.BadgeAwardList = make(map[string]*RedDotBadgeAward)
}
r.BadgeAwardList[badgeAward.NotificationID] = badgeAward
}
// RemoveBadgeAward remove badge award
func (r *RedDotBadgeAwardCache) RemoveBadgeAward(notificationID string) {
if r.BadgeAwardList == nil {
return
}
delete(r.BadgeAwardList, notificationID)
}
type NotificationSearch struct {
Page int `json:"page" form:"page"` //Query number of pages
PageSize int `json:"page_size" form:"page_size"` //Search page size
Type int `json:"-" form:"-"`
TypeStr string `json:"type" form:"type"` // inbox achievement
InboxTypeStr string `json:"inbox_type" form:"inbox_type"` // inbox achievement
InboxType int `json:"-" form:"-"` // inbox achievement
UserID string `json:"-"`
}
type NotificationClearRequest struct {
NotificationType string `validate:"required,oneof=inbox achievement" json:"type"`
UserID string `json:"-"`
CanReviewQuestion bool `json:"-"`
CanReviewAnswer bool `json:"-"`
CanReviewTag bool `json:"-"`
}
type NotificationClearIDRequest struct {
UserID string `json:"-"`
ID string `json:"id" form:"id"`
}