]> source.dussan.org Git - gitea.git/commitdiff
move notification APIFormat (#13783)
author6543 <6543@obermui.de>
Wed, 2 Dec 2020 09:24:35 +0000 (10:24 +0100)
committerGitHub <noreply@github.com>
Wed, 2 Dec 2020 09:24:35 +0000 (09:24 +0000)
models/notification.go
modules/convert/notification.go [new file with mode: 0644]
routers/api/v1/notify/repo.go
routers/api/v1/notify/threads.go
routers/api/v1/notify/user.go

index 1f51c99c4c250b1ead875d8ae4eb8416f7fa1cbe..362b4909940715a8e037a74200c7c9b06ccc7a99 100644 (file)
@@ -10,7 +10,6 @@ import (
 
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
-       api "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/timeutil"
 
        "xorm.io/builder"
@@ -332,56 +331,6 @@ func countUnread(e Engine, userID int64) int64 {
        return exist
 }
 
-// APIFormat converts a Notification to api.NotificationThread
-func (n *Notification) APIFormat() *api.NotificationThread {
-       result := &api.NotificationThread{
-               ID:        n.ID,
-               Unread:    !(n.Status == NotificationStatusRead || n.Status == NotificationStatusPinned),
-               Pinned:    n.Status == 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(AccessModeRead)
-       }
-
-       //handle Subject
-       switch n.Source {
-       case 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 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 NotificationSourceCommit:
-               result.Subject = &api.NotificationSubject{
-                       Type:  "Commit",
-                       Title: n.CommitID,
-               }
-               //unused until now
-       }
-
-       return result
-}
-
 // LoadAttributes load Repo Issue User and Comment if not loaded
 func (n *Notification) LoadAttributes() (err error) {
        return n.loadAttributes(x)
@@ -470,15 +419,6 @@ func (n *Notification) APIURL() string {
 // NotificationList contains a list of notifications
 type NotificationList []*Notification
 
-// APIFormat converts a NotificationList to api.NotificationThread list
-func (nl NotificationList) APIFormat() []*api.NotificationThread {
-       var result = make([]*api.NotificationThread, 0, len(nl))
-       for _, n := range nl {
-               result = append(result, n.APIFormat())
-       }
-       return result
-}
-
 // LoadAttributes load Repo Issue User and Comment if not loaded
 func (nl NotificationList) LoadAttributes() (err error) {
        for i := 0; i < len(nl); i++ {
diff --git a/modules/convert/notification.go b/modules/convert/notification.go
new file mode 100644 (file)
index 0000000..6934871
--- /dev/null
@@ -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
+}
index cc66e0f743c273154e697c07b95564a463194e75..0a75fcd30a1df75a32a07a69977deadd6c59934a 100644 (file)
@@ -11,6 +11,7 @@ import (
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/context"
+       "code.gitea.io/gitea/modules/convert"
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/routers/api/v1/utils"
 )
@@ -127,7 +128,7 @@ func ListRepoNotifications(ctx *context.APIContext) {
                return
        }
 
-       ctx.JSON(http.StatusOK, nl.APIFormat())
+       ctx.JSON(http.StatusOK, convert.ToNotifications(nl))
 }
 
 // ReadRepoNotifications mark notification threads as read on a specific repo
index 86ae2dca318213a35448f824c6168b314d8c92cb..efe5bcb59c35acba905665f767760888425d928d 100644 (file)
@@ -10,6 +10,7 @@ import (
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/context"
+       "code.gitea.io/gitea/modules/convert"
 )
 
 // GetThread get notification by ID
@@ -44,7 +45,7 @@ func GetThread(ctx *context.APIContext) {
                return
        }
 
-       ctx.JSON(http.StatusOK, n.APIFormat())
+       ctx.JSON(http.StatusOK, convert.ToNotificationThread(n))
 }
 
 // ReadThread mark notification as read by ID
index 373c88d372db88127d4ac3af53edfd940cc003ca..e739c6a38dd8437ca499b5f19af31cd578d9a45d 100644 (file)
@@ -11,6 +11,7 @@ import (
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/context"
+       "code.gitea.io/gitea/modules/convert"
        "code.gitea.io/gitea/routers/api/v1/utils"
 )
 
@@ -87,7 +88,7 @@ func ListNotifications(ctx *context.APIContext) {
                return
        }
 
-       ctx.JSON(http.StatusOK, nl.APIFormat())
+       ctx.JSON(http.StatusOK, convert.ToNotifications(nl))
 }
 
 // ReadNotifications mark notification threads as read, unread, or pinned