blob: 286e2e7d61eb1d903a9891323475fd12e7bc28f6 [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
type UpdateReactionReq struct {
ObjectID string `validate:"required" json:"object_id"`
Emoji string `validate:"required,oneof=heart smile frown" json:"emoji"`
Reaction string `validate:"required,oneof=activate deactivate" json:"reaction"`
UserID string `json:"-"`
}
type GetReactionReq struct {
ObjectID string `validate:"required" form:"object_id"`
UserID string `json:"-"`
}
// ReactionsSummaryMeta reactions summary meta
type ReactionsSummaryMeta struct {
Reactions []*ReactionSummaryMeta `json:"reactions"`
}
// ReactionSummaryMeta reaction summary meta
type ReactionSummaryMeta struct {
Emoji string `json:"emoji"`
UserIDs []string `json:"user_ids"`
}
// AddReactionSummary add user operation to reaction summary
func (r *ReactionsSummaryMeta) AddReactionSummary(emoji, userID string) {
for _, reaction := range r.Reactions {
if reaction.Emoji != emoji {
continue
}
exist := false
for _, id := range reaction.UserIDs {
if id == userID {
exist = true
break
}
}
if !exist {
reaction.UserIDs = append(reaction.UserIDs, userID)
}
return
}
r.Reactions = append(r.Reactions, &ReactionSummaryMeta{
Emoji: emoji,
UserIDs: []string{userID},
})
}
// RemoveReactionSummary remove user operation from reaction summary
func (r *ReactionsSummaryMeta) RemoveReactionSummary(emoji, userID string) {
updatedReactions := make([]*ReactionSummaryMeta, 0)
for _, reaction := range r.Reactions {
if reaction.Emoji != emoji && len(reaction.UserIDs) > 0 {
updatedReactions = append(updatedReactions, reaction)
continue
}
updatedUserIDs := make([]string, 0, len(r.Reactions))
for _, id := range reaction.UserIDs {
if id != userID {
updatedUserIDs = append(updatedUserIDs, id)
}
}
if len(updatedUserIDs) > 0 {
reaction.UserIDs = updatedUserIDs
updatedReactions = append(updatedReactions, reaction)
}
}
r.Reactions = updatedReactions
}
// CheckUserInReactionSummary check user's operation if in reaction summary
func (r *ReactionsSummaryMeta) CheckUserInReactionSummary(emoji, userID string) bool {
for _, reaction := range r.Reactions {
if reaction.Emoji != emoji {
continue
}
for _, id := range reaction.UserIDs {
if id == userID {
return true
}
}
}
return false
}
// GetReactionByObjectIdResp get reaction by object id response
type GetReactionByObjectIdResp struct {
ReactionSummary []*ReactionRespItem `json:"reaction_summary"`
}
// ReactionRespItem reaction response item
type ReactionRespItem struct {
// Emoji is the reaction emoji
Emoji string `json:"emoji"`
// Count is the number of users who reacted
Count int `json:"count"`
// Tooltip is the user's name who reacted
Tooltip string `json:"tooltip"`
// IsActive is if current user has reacted
IsActive bool `json:"is_active"`
}