1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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"
- "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: 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.Id,
- }); 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: reaction.ReactionType,
- }, nil
- }
|