12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package v1
- import (
- "context"
- "fmt"
- "time"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
- "google.golang.org/protobuf/types/known/timestamppb"
- 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) GetActivity(ctx context.Context, request *v1pb.GetActivityRequest) (*v1pb.Activity, error) {
- activityID, err := ExtractActivityIDFromName(request.Name)
- if err != nil {
- return nil, status.Errorf(codes.InvalidArgument, "invalid activity name: %v", err)
- }
- activity, err := s.Store.GetActivity(ctx, &store.FindActivity{
- ID: &activityID,
- })
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to get activity: %v", err)
- }
- activityMessage, err := s.convertActivityFromStore(ctx, activity)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to convert activity from store: %v", err)
- }
- return activityMessage, nil
- }
- func (s *APIV1Service) convertActivityFromStore(ctx context.Context, activity *store.Activity) (*v1pb.Activity, error) {
- payload, err := s.convertActivityPayloadFromStore(ctx, activity.Payload)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to convert activity payload from store: %v", err)
- }
- return &v1pb.Activity{
- Name: fmt.Sprintf("%s%d", ActivityNamePrefix, activity.ID),
- Creator: fmt.Sprintf("%s%d", UserNamePrefix, activity.CreatorID),
- Type: activity.Type.String(),
- Level: activity.Level.String(),
- CreateTime: timestamppb.New(time.Unix(activity.CreatedTs, 0)),
- Payload: payload,
- }, nil
- }
- func (s *APIV1Service) convertActivityPayloadFromStore(ctx context.Context, payload *storepb.ActivityPayload) (*v1pb.ActivityPayload, error) {
- v2Payload := &v1pb.ActivityPayload{}
- if payload.MemoComment != nil {
- memo, err := s.Store.GetMemo(ctx, &store.FindMemo{
- ID: &payload.MemoComment.MemoId,
- ExcludeContent: true,
- })
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to get memo: %v", err)
- }
- relatedMemo, err := s.Store.GetMemo(ctx, &store.FindMemo{
- ID: &payload.MemoComment.RelatedMemoId,
- ExcludeContent: true,
- })
- if err != nil {
- return nil, status.Errorf(codes.Internal, "failed to get related memo: %v", err)
- }
- v2Payload.MemoComment = &v1pb.ActivityMemoCommentPayload{
- Memo: fmt.Sprintf("%s%s", MemoNamePrefix, memo.UID),
- RelatedMemo: fmt.Sprintf("%s%s", MemoNamePrefix, relatedMemo.UID),
- }
- }
- if payload.VersionUpdate != nil {
- v2Payload.VersionUpdate = &v1pb.ActivityVersionUpdatePayload{
- Version: payload.VersionUpdate.Version,
- }
- }
- return v2Payload, nil
- }
|