summaryrefslogtreecommitdiffstats
path: root/routers/api/v1/notify/user.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2020-07-11 22:46:01 +0100
committerGitHub <noreply@github.com>2020-07-12 00:46:01 +0300
commit63591016b3ecd79ab1172cd98e2e830a09d6f515 (patch)
tree3e64ac14712959cd352c21c523e0bc69d153cf71 /routers/api/v1/notify/user.go
parentd08996c7b962f686ce9528e14a65144dc3e5ec21 (diff)
downloadgitea-63591016b3ecd79ab1172cd98e2e830a09d6f515.tar.gz
gitea-63591016b3ecd79ab1172cd98e2e830a09d6f515.zip
Extend Notifications API and return pinned notifications by default (#12164)
* Extend notifications API and return pinned notifications in notifications list Signed-off-by: Andrew Thornton <art27@cantab.net> * fix swagger Signed-off-by: Andrew Thornton <art27@cantab.net> * Fix swagger again Signed-off-by: Andrew Thornton <art27@cantab.net> * fix test Signed-off-by: Andrew Thornton <art27@cantab.net> * remove spurious debugs * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> * Update models/notification.go * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'routers/api/v1/notify/user.go')
-rw-r--r--routers/api/v1/notify/user.go48
1 files changed, 41 insertions, 7 deletions
diff --git a/routers/api/v1/notify/user.go b/routers/api/v1/notify/user.go
index 649eaa8a37..9c3f9b1472 100644
--- a/routers/api/v1/notify/user.go
+++ b/routers/api/v1/notify/user.go
@@ -29,6 +29,14 @@ func ListNotifications(ctx *context.APIContext) {
// description: If true, show notifications marked as read. Default value is false
// type: string
// required: false
+ // - name: status-types
+ // in: query
+ // description: "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned."
+ // type: array
+ // collectionFormat: multi
+ // items:
+ // type: string
+ // required: false
// - name: since
// in: query
// description: Only show notifications updated after the given time. This is a timestamp in RFC 3339 format
@@ -64,9 +72,9 @@ func ListNotifications(ctx *context.APIContext) {
UpdatedBeforeUnix: before,
UpdatedAfterUnix: since,
}
- qAll := strings.Trim(ctx.Query("all"), " ")
- if qAll != "true" {
- opts.Status = models.NotificationStatusUnread
+ if !ctx.QueryBool("all") {
+ statuses := ctx.QueryStrings("status-types")
+ opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread", "pinned"})
}
nl, err := models.GetNotifications(opts)
if err != nil {
@@ -82,11 +90,11 @@ func ListNotifications(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, nl.APIFormat())
}
-// ReadNotifications mark notification threads as read
+// ReadNotifications mark notification threads as read, unread, or pinned
func ReadNotifications(ctx *context.APIContext) {
// swagger:operation PUT /notifications notification notifyReadList
// ---
- // summary: Mark notification threads as read
+ // summary: Mark notification threads as read, pinned or unread
// consumes:
// - application/json
// produces:
@@ -98,6 +106,24 @@ func ReadNotifications(ctx *context.APIContext) {
// type: string
// format: date-time
// required: false
+ // - name: all
+ // in: query
+ // description: If true, mark all notifications on this repo. Default value is false
+ // type: string
+ // required: false
+ // - name: status-types
+ // in: query
+ // description: "Mark notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread."
+ // type: array
+ // collectionFormat: multi
+ // items:
+ // type: string
+ // required: false
+ // - name: to-status
+ // in: query
+ // description: Status to mark notifications as, Defaults to read.
+ // type: string
+ // required: false
// responses:
// "205":
// "$ref": "#/responses/empty"
@@ -117,7 +143,10 @@ func ReadNotifications(ctx *context.APIContext) {
opts := models.FindNotificationOptions{
UserID: ctx.User.ID,
UpdatedBeforeUnix: lastRead,
- Status: models.NotificationStatusUnread,
+ }
+ if !ctx.QueryBool("all") {
+ statuses := ctx.QueryStrings("status-types")
+ opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread"})
}
nl, err := models.GetNotifications(opts)
if err != nil {
@@ -125,8 +154,13 @@ func ReadNotifications(ctx *context.APIContext) {
return
}
+ targetStatus := statusStringToNotificationStatus(ctx.Query("to-status"))
+ if targetStatus == 0 {
+ targetStatus = models.NotificationStatusRead
+ }
+
for _, n := range nl {
- err := models.SetNotificationStatus(n.ID, ctx.User, models.NotificationStatusRead)
+ err := models.SetNotificationStatus(n.ID, ctx.User, targetStatus)
if err != nil {
ctx.InternalServerError(err)
return