mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	move notification APIFormat (#13783)
This commit is contained in:
		| @@ -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++ { | ||||
|   | ||||
							
								
								
									
										69
									
								
								modules/convert/notification.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								modules/convert/notification.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| } | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 6543
					6543