MCPcopy
hub / github.com/apache/answer / GetObjectTimeline

Method GetObjectTimeline

internal/service/activity/activity.go:93–165  ·  view source on GitHub ↗

GetObjectTimeline get object timeline

(ctx context.Context, req *schema.GetObjectTimelineReq)

Source from the content-addressed store, hash-verified

91
92// GetObjectTimeline get object timeline
93func (as *ActivityService) GetObjectTimeline(ctx context.Context, req *schema.GetObjectTimelineReq) (
94 resp *schema.GetObjectTimelineResp, err error) {
95 if err = as.ensureTimelineObjectVisible(ctx, req.ObjectID, req.UserID, req.IsAdminModerator); err != nil {
96 return nil, err
97 }
98
99 resp = &schema.GetObjectTimelineResp{
100 ObjectInfo: &schema.ActObjectInfo{},
101 Timeline: make([]*schema.ActObjectTimeline, 0),
102 }
103
104 resp.ObjectInfo, err = as.getTimelineMainObjInfo(ctx, req.ObjectID)
105 if err != nil {
106 return nil, err
107 }
108
109 activityList, err := as.activityRepo.GetObjectAllActivity(ctx, req.ObjectID, req.ShowVote)
110 if err != nil {
111 return nil, err
112 }
113 for _, act := range activityList {
114 item := &schema.ActObjectTimeline{
115 ActivityID: act.ID,
116 RevisionID: converter.IntToString(act.RevisionID),
117 CreatedAt: act.CreatedAt.Unix(),
118 Cancelled: act.Cancelled == entity.ActivityCancelled,
119 ObjectID: act.ObjectID,
120 UserInfo: &schema.UserBasicInfo{},
121 }
122 item.ObjectType, _ = obj.GetObjectTypeStrByObjectID(act.ObjectID)
123 if item.Cancelled {
124 item.CancelledAt = act.CancelledAt.Unix()
125 }
126
127 if item.ObjectType == constant.QuestionObjectType || item.ObjectType == constant.AnswerObjectType {
128 if handler.GetEnableShortID(ctx) {
129 item.ObjectID = uid.EnShortID(act.ObjectID)
130 }
131 }
132
133 cfg, err := as.configService.GetConfigByID(ctx, act.ActivityType)
134 if err != nil {
135 log.Errorf("fail to get config by id: %d, err: %v, act id is: %s", act.ActivityType, err, act.ID)
136 } else {
137 // database save activity type is number, change to activity type string is like "question.asked".
138 // so we need to cut the front part of '.', only need string like 'asked'
139 _, item.ActivityType, _ = strings.Cut(cfg.Key, ".")
140 // format activity type string to show
141 if isHidden, formattedActivityType := formatActivity(item.ActivityType); isHidden {
142 continue
143 } else {
144 item.ActivityType = formattedActivityType
145 }
146 }
147
148 // if activity is down vote, only admin can see who does it.
149 if item.ActivityType == constant.ActDownVote && !req.IsAdmin {
150 item.UserInfo.Username = "N/A"

Callers

nothing calls this directly

Calls 11

IntToStringFunction · 0.92
GetEnableShortIDFunction · 0.92
EnShortIDFunction · 0.92
formatActivityFunction · 0.85
GetObjectAllActivityMethod · 0.65
GetConfigByIDMethod · 0.65

Tested by

no test coverage detected