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