123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package v1
- import (
- "context"
- "fmt"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
- "google.golang.org/protobuf/types/known/emptypb"
- v1pb "github.com/usememos/memos/proto/gen/api/v1"
- storepb "github.com/usememos/memos/proto/gen/store"
- "github.com/usememos/memos/store"
- )
- func (s *APIV1Service) ListMemoReactions(ctx context.Context, request *v1pb.ListMemoReactionsRequest) (*v1pb.ListMemoReactionsResponse, error) {
- reactions, err := s.Store.ListReactions(ctx, &store.FindReaction{
- ContentID: &request.Name,
- })
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to list reactions")
- }
- response := &v1pb.ListMemoReactionsResponse{
- Reactions: []*v1pb.Reaction{},
- }
- for _, reaction := range reactions {
- reactionMessage, err := s.convertReactionFromStore(ctx, reaction)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to convert reaction")
- }
- response.Reactions = append(response.Reactions, reactionMessage)
- }
- return response, nil
- }
- func (s *APIV1Service) UpsertMemoReaction(ctx context.Context, request *v1pb.UpsertMemoReactionRequest) (*v1pb.Reaction, error) {
- user, err := s.GetCurrentUser(ctx)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to get current user")
- }
- reaction, err := s.Store.UpsertReaction(ctx, &store.Reaction{
- CreatorID: user.ID,
- ContentID: request.Reaction.ContentId,
- ReactionType: storepb.ReactionType(request.Reaction.ReactionType),
- })
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to upsert reaction")
- }
- reactionMessage, err := s.convertReactionFromStore(ctx, reaction)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to convert reaction")
- }
- return reactionMessage, nil
- }
- func (s *APIV1Service) DeleteMemoReaction(ctx context.Context, request *v1pb.DeleteMemoReactionRequest) (*emptypb.Empty, error) {
- if err := s.Store.DeleteReaction(ctx, &store.DeleteReaction{
- ID: request.ReactionId,
- }); err != nil {
- return nil, status.Errorf(codes.Internal, "failed to delete reaction")
- }
- return &emptypb.Empty{}, nil
- }
- func (s *APIV1Service) convertReactionFromStore(ctx context.Context, reaction *store.Reaction) (*v1pb.Reaction, error) {
- creator, err := s.Store.GetUser(ctx, &store.FindUser{
- ID: &reaction.CreatorID,
- })
- if err != nil {
- return nil, err
- }
- return &v1pb.Reaction{
- Id: reaction.ID,
- Creator: fmt.Sprintf("%s%d", UserNamePrefix, creator.ID),
- ContentId: reaction.ContentID,
- ReactionType: v1pb.Reaction_Type(reaction.ReactionType),
- }, nil
- }
|