summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-12-02 10:24:35 +0100
committerGitHub <noreply@github.com>2020-12-02 09:24:35 +0000
commit4f5ff1ef080f73c1374126effb2b4fc249c0bd6c (patch)
treefbd3fa6f9b709224f844aac81604d9d1b88a9284 /modules
parent4569339a4b8ead2b9bb110f4b7fc393ef6b3b4ba (diff)
downloadgitea-4f5ff1ef080f73c1374126effb2b4fc249c0bd6c.tar.gz
gitea-4f5ff1ef080f73c1374126effb2b4fc249c0bd6c.zip
move notification APIFormat (#13783)
Diffstat (limited to 'modules')
-rw-r--r--modules/convert/notification.go69
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
+}