activity_service.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package v1
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. "google.golang.org/grpc/codes"
  7. "google.golang.org/grpc/status"
  8. "google.golang.org/protobuf/types/known/timestamppb"
  9. v1pb "github.com/usememos/memos/proto/gen/api/v1"
  10. storepb "github.com/usememos/memos/proto/gen/store"
  11. "github.com/usememos/memos/store"
  12. )
  13. func (s *APIV1Service) GetActivity(ctx context.Context, request *v1pb.GetActivityRequest) (*v1pb.Activity, error) {
  14. activityID, err := ExtractActivityIDFromName(request.Name)
  15. if err != nil {
  16. return nil, status.Errorf(codes.InvalidArgument, "invalid activity name: %v", err)
  17. }
  18. activity, err := s.Store.GetActivity(ctx, &store.FindActivity{
  19. ID: &activityID,
  20. })
  21. if err != nil {
  22. return nil, status.Errorf(codes.Internal, "failed to get activity: %v", err)
  23. }
  24. activityMessage, err := s.convertActivityFromStore(ctx, activity)
  25. if err != nil {
  26. return nil, status.Errorf(codes.Internal, "failed to convert activity from store: %v", err)
  27. }
  28. return activityMessage, nil
  29. }
  30. func (*APIV1Service) convertActivityFromStore(_ context.Context, activity *store.Activity) (*v1pb.Activity, error) {
  31. return &v1pb.Activity{
  32. Name: fmt.Sprintf("%s%d", ActivityNamePrefix, activity.ID),
  33. Creator: fmt.Sprintf("%s%d", UserNamePrefix, activity.CreatorID),
  34. Type: activity.Type.String(),
  35. Level: activity.Level.String(),
  36. CreateTime: timestamppb.New(time.Unix(activity.CreatedTs, 0)),
  37. Payload: convertActivityPayloadFromStore(activity.Payload),
  38. }, nil
  39. }
  40. func convertActivityPayloadFromStore(payload *storepb.ActivityPayload) *v1pb.ActivityPayload {
  41. v2Payload := &v1pb.ActivityPayload{}
  42. if payload.MemoComment != nil {
  43. v2Payload.MemoComment = &v1pb.ActivityMemoCommentPayload{
  44. Memo: fmt.Sprintf("%s%d", MemoNamePrefix, payload.MemoComment.MemoId),
  45. RelatedMemo: fmt.Sprintf("%s%d", MemoNamePrefix, payload.MemoComment.RelatedMemoId),
  46. }
  47. }
  48. if payload.VersionUpdate != nil {
  49. v2Payload.VersionUpdate = &v1pb.ActivityVersionUpdatePayload{
  50. Version: payload.VersionUpdate.Version,
  51. }
  52. }
  53. return v2Payload
  54. }