🐛 Trying to prevent send same notification to the same user in batch
This commit is contained in:
parent
39c3799d82
commit
821e0c3e60
14
.idea/workspace.xml
generated
14
.idea/workspace.xml
generated
@ -4,15 +4,9 @@
|
|||||||
<option name="autoReloadType" value="ALL" />
|
<option name="autoReloadType" value="ALL" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="3fefb2c4-b6f9-466b-a523-53352e8d6f95" name="更改" comment=":sparkles: Auth config to limit auth steps">
|
<list default="true" id="3fefb2c4-b6f9-466b-a523-53352e8d6f95" name="更改" comment=":recycle: Single table to store auth preferences">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/database/migrator.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/database/migrator.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/pkg/internal/grpc/notifier.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/grpc/notifier.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/models/accounts.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/accounts.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/models/preferences.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/preferences.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/server/api/index.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/index.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/server/api/preferences_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/preferences_api.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/services/preferences.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/preferences.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/services/ticket.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/ticket.go" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@ -159,7 +153,6 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value=":sparkles: Bots aka. automated accounts" />
|
|
||||||
<MESSAGE value=":sparkles: Return affiliated to and automated by in userinfo grpc call" />
|
<MESSAGE value=":sparkles: Return affiliated to and automated by in userinfo grpc call" />
|
||||||
<MESSAGE value=":sparkles: Pagination bots api" />
|
<MESSAGE value=":sparkles: Pagination bots api" />
|
||||||
<MESSAGE value=":bug: Fix query issue" />
|
<MESSAGE value=":bug: Fix query issue" />
|
||||||
@ -184,7 +177,8 @@
|
|||||||
<MESSAGE value=":sparkles: Realm avatar, banner and access policy" />
|
<MESSAGE value=":sparkles: Realm avatar, banner and access policy" />
|
||||||
<MESSAGE value=":sparkles: Account deletion" />
|
<MESSAGE value=":sparkles: Account deletion" />
|
||||||
<MESSAGE value=":sparkles: Auth config to limit auth steps" />
|
<MESSAGE value=":sparkles: Auth config to limit auth steps" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value=":sparkles: Auth config to limit auth steps" />
|
<MESSAGE value=":recycle: Single table to store auth preferences" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value=":recycle: Single table to store auth preferences" />
|
||||||
</component>
|
</component>
|
||||||
<component name="VgoProject">
|
<component name="VgoProject">
|
||||||
<settings-migrated>true</settings-migrated>
|
<settings-migrated>true</settings-migrated>
|
||||||
|
@ -3,6 +3,7 @@ package grpc
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/database"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/database"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
@ -37,6 +38,8 @@ func (v *Server) NotifyUser(_ context.Context, in *proto.NotifyUserRequest) (*pr
|
|||||||
AccountID: user.ID,
|
AccountID: user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug().Str("topic", notification.Topic).Uint("uid", notification.AccountID).Msg("Notifying user...")
|
||||||
|
|
||||||
if notification.IsRealtime {
|
if notification.IsRealtime {
|
||||||
if err := services.PushNotification(notification); err != nil {
|
if err := services.PushNotification(notification); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -64,8 +67,13 @@ func (v *Server) NotifyUserBatch(_ context.Context, in *proto.NotifyUserBatchReq
|
|||||||
var metadata map[string]any
|
var metadata map[string]any
|
||||||
_ = jsoniter.Unmarshal(in.GetNotify().GetMetadata(), &metadata)
|
_ = jsoniter.Unmarshal(in.GetNotify().GetMetadata(), &metadata)
|
||||||
|
|
||||||
|
var checklist = make(map[uint]bool, len(users))
|
||||||
var notifications []models.Notification
|
var notifications []models.Notification
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
|
if checklist[user.ID] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
notification := models.Notification{
|
notification := models.Notification{
|
||||||
Topic: in.GetNotify().GetTopic(),
|
Topic: in.GetNotify().GetTopic(),
|
||||||
Title: in.GetNotify().GetTitle(),
|
Title: in.GetNotify().GetTitle(),
|
||||||
@ -79,10 +87,13 @@ func (v *Server) NotifyUserBatch(_ context.Context, in *proto.NotifyUserBatchReq
|
|||||||
Account: user,
|
Account: user,
|
||||||
AccountID: user.ID,
|
AccountID: user.ID,
|
||||||
}
|
}
|
||||||
|
checklist[user.ID] = true
|
||||||
|
|
||||||
notifications = append(notifications, notification)
|
notifications = append(notifications, notification)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug().Str("topic", notifications[0].Topic).Any("uid", lo.Keys(checklist)).Msg("Notifying users...")
|
||||||
|
|
||||||
if in.GetNotify().GetIsRealtime() {
|
if in.GetNotify().GetIsRealtime() {
|
||||||
services.PushNotificationBatch(notifications)
|
services.PushNotificationBatch(notifications)
|
||||||
} else {
|
} else {
|
||||||
@ -105,8 +116,13 @@ func (v *Server) NotifyAllUser(_ context.Context, in *proto.NotifyRequest) (*pro
|
|||||||
var metadata map[string]any
|
var metadata map[string]any
|
||||||
_ = jsoniter.Unmarshal(in.GetMetadata(), &metadata)
|
_ = jsoniter.Unmarshal(in.GetMetadata(), &metadata)
|
||||||
|
|
||||||
|
var checklist = make(map[uint]bool, len(users))
|
||||||
var notifications []models.Notification
|
var notifications []models.Notification
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
|
if checklist[user.ID] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
notification := models.Notification{
|
notification := models.Notification{
|
||||||
Topic: in.GetTopic(),
|
Topic: in.GetTopic(),
|
||||||
Title: in.GetTitle(),
|
Title: in.GetTitle(),
|
||||||
@ -120,10 +136,13 @@ func (v *Server) NotifyAllUser(_ context.Context, in *proto.NotifyRequest) (*pro
|
|||||||
Account: user,
|
Account: user,
|
||||||
AccountID: user.ID,
|
AccountID: user.ID,
|
||||||
}
|
}
|
||||||
|
checklist[user.ID] = true
|
||||||
|
|
||||||
notifications = append(notifications, notification)
|
notifications = append(notifications, notification)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug().Str("topic", notifications[0].Topic).Any("uid", lo.Keys(checklist)).Msg("Notifying users...")
|
||||||
|
|
||||||
if in.GetIsRealtime() {
|
if in.GetIsRealtime() {
|
||||||
services.PushNotificationBatch(notifications)
|
services.PushNotificationBatch(notifications)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user