diff options
author | 6543 <6543@obermui.de> | 2020-12-02 10:24:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-02 09:24:35 +0000 |
commit | 4f5ff1ef080f73c1374126effb2b4fc249c0bd6c (patch) | |
tree | fbd3fa6f9b709224f844aac81604d9d1b88a9284 /modules | |
parent | 4569339a4b8ead2b9bb110f4b7fc393ef6b3b4ba (diff) | |
download | gitea-4f5ff1ef080f73c1374126effb2b4fc249c0bd6c.tar.gz gitea-4f5ff1ef080f73c1374126effb2b4fc249c0bd6c.zip |
move notification APIFormat (#13783)
Diffstat (limited to 'modules')
-rw-r--r-- | modules/convert/notification.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/modules/convert/notification.go b/modules/convert/notification.go new file mode 100644 index 0000000000..6934871844 --- /dev/null +++ b/modules/convert/notification.go @@ -0,0 +1,69 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package convert + +import ( + "code.gitea.io/gitea/models" + api "code.gitea.io/gitea/modules/structs" +) + +// ToNotificationThread convert a Notification to api.NotificationThread +func ToNotificationThread(n *models.Notification) *api.NotificationThread { + result := &api.NotificationThread{ + ID: n.ID, + Unread: !(n.Status == models.NotificationStatusRead || n.Status == models.NotificationStatusPinned), + Pinned: n.Status == models.NotificationStatusPinned, + UpdatedAt: n.UpdatedUnix.AsTime(), + URL: n.APIURL(), + } + + //since user only get notifications when he has access to use minimal access mode + if n.Repository != nil { + result.Repository = n.Repository.APIFormat(models.AccessModeRead) + } + + //handle Subject + switch n.Source { + case models.NotificationSourceIssue: + result.Subject = &api.NotificationSubject{Type: "Issue"} + if n.Issue != nil { + result.Subject.Title = n.Issue.Title + result.Subject.URL = n.Issue.APIURL() + result.Subject.State = n.Issue.State() + comment, err := n.Issue.GetLastComment() + if err == nil && comment != nil { + result.Subject.LatestCommentURL = comment.APIURL() + } + } + case models.NotificationSourcePullRequest: + result.Subject = &api.NotificationSubject{Type: "Pull"} + if n.Issue != nil { + result.Subject.Title = n.Issue.Title + result.Subject.URL = n.Issue.APIURL() + result.Subject.State = n.Issue.State() + comment, err := n.Issue.GetLastComment() + if err == nil && comment != nil { + result.Subject.LatestCommentURL = comment.APIURL() + } + } + case models.NotificationSourceCommit: + result.Subject = &api.NotificationSubject{ + Type: "Commit", + Title: n.CommitID, + } + //unused until now + } + + return result +} + +// ToNotifications convert list of Notification to api.NotificationThread list +func ToNotifications(nl models.NotificationList) []*api.NotificationThread { + var result = make([]*api.NotificationThread, 0, len(nl)) + for _, n := range nl { + result = append(result, ToNotificationThread(n)) + } + return result +} |