🐛 Fix model relation issue
This commit is contained in:
		
							
								
								
									
										30
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										30
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							@@ -5,39 +5,13 @@
 | 
			
		||||
  </component>
 | 
			
		||||
  <component name="ChangeListManager">
 | 
			
		||||
    <list default="true" id="3fefb2c4-b6f9-466b-a523-53352e8d6f95" name="更改" comment=":recycle: Refactored relation system
:arrow_up: Support new realm & relation api">
 | 
			
		||||
      <change afterPath="$PROJECT_DIR$/pkg/internal/services/relationships.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/go.mod" beforeDir="false" afterPath="$PROJECT_DIR$/go.mod" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/go.sum" beforeDir="false" afterPath="$PROJECT_DIR$/go.sum" 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/auth.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/grpc/auth.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/grpc/friendships.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/grpc/notify.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/grpc/notifier.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/grpc/realms.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/grpc/realms.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/grpc/server.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/grpc/server.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/clients.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/clients.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/models/friendships.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/relationships.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/notifications.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/notifications.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/server/admin/notify_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/admin/notify_api.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/server/api/friendships_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/relationships_api.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/notifications_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/notifications_api.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/server/api/notify_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/notify_api.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/accounts.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/accounts.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/friendships.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/notifications.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/notifications.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/perms.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/perms.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/realms.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/realms.go" afterDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/friendships.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/friendships.proto" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/friendships_grpc.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/notify.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/notify.proto" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/notify_grpc.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/realms.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/realms.proto" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/proto/realms_grpc.pb.go" beforeDir="false" />
 | 
			
		||||
      <change beforePath="$PROJECT_DIR$/pkg/internal/services/relationships.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/relationships.go" afterDir="false" />
 | 
			
		||||
    </list>
 | 
			
		||||
    <option name="SHOW_DIALOG" value="false" />
 | 
			
		||||
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ func (v *Server) NotifyUser(_ context.Context, in *proto.NotifyUserRequest) (*pr
 | 
			
		||||
		Metadata:    metadata,
 | 
			
		||||
		IsRealtime:  in.GetNotify().GetIsRealtime(),
 | 
			
		||||
		IsForcePush: in.GetNotify().GetIsForcePush(),
 | 
			
		||||
		UserID:      user.ID,
 | 
			
		||||
		AccountID:   user.ID,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if notification.IsRealtime {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,13 @@ import (
 | 
			
		||||
type Notification struct {
 | 
			
		||||
	BaseModel
 | 
			
		||||
 | 
			
		||||
	Topic    string            `json:"topic"`
 | 
			
		||||
	Title    string            `json:"title"`
 | 
			
		||||
	Subtitle *string           `json:"subtitle"`
 | 
			
		||||
	Body     string            `json:"body"`
 | 
			
		||||
	Metadata datatypes.JSONMap `json:"metadata"`
 | 
			
		||||
	UserID   uint              `json:"user_id"`
 | 
			
		||||
	SenderID *uint             `json:"sender_id"`
 | 
			
		||||
	Topic     string            `json:"topic"`
 | 
			
		||||
	Title     string            `json:"title"`
 | 
			
		||||
	Subtitle  *string           `json:"subtitle"`
 | 
			
		||||
	Body      string            `json:"body"`
 | 
			
		||||
	Metadata  datatypes.JSONMap `json:"metadata"`
 | 
			
		||||
	AccountID uint              `json:"account_id"`
 | 
			
		||||
	SenderID  *uint             `json:"sender_id"`
 | 
			
		||||
 | 
			
		||||
	IsRealtime  bool `json:"is_realtime" gorm:"-"`
 | 
			
		||||
	IsForcePush bool `json:"is_force_push" gorm:"-"`
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ func notifyAllUser(c *fiber.Ctx) error {
 | 
			
		||||
				Body:        data.Body,
 | 
			
		||||
				IsRealtime:  data.IsRealtime,
 | 
			
		||||
				IsForcePush: data.IsForcePush,
 | 
			
		||||
				UserID:      user.ID,
 | 
			
		||||
				AccountID:   user.ID,
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if data.IsRealtime {
 | 
			
		||||
@@ -103,7 +103,7 @@ func notifyOneUser(c *fiber.Ctx) error {
 | 
			
		||||
		Body:        data.Body,
 | 
			
		||||
		IsRealtime:  data.IsRealtime,
 | 
			
		||||
		IsForcePush: data.IsForcePush,
 | 
			
		||||
		UserID:      user.ID,
 | 
			
		||||
		AccountID:   user.ID,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if data.IsRealtime {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ func getNotifications(c *fiber.Ctx) error {
 | 
			
		||||
	}
 | 
			
		||||
	user := c.Locals("user").(models.Account)
 | 
			
		||||
 | 
			
		||||
	tx := database.C.Where(&models.Notification{UserID: user.ID}).Model(&models.Notification{})
 | 
			
		||||
	tx := database.C.Where(&models.Notification{AccountID: user.ID}).Model(&models.Notification{})
 | 
			
		||||
 | 
			
		||||
	var count int64
 | 
			
		||||
	var notifications []models.Notification
 | 
			
		||||
@@ -53,7 +53,7 @@ func markNotificationRead(c *fiber.Ctx) error {
 | 
			
		||||
	var notify models.Notification
 | 
			
		||||
	if err := database.C.Where(&models.Notification{
 | 
			
		||||
		BaseModel: models.BaseModel{ID: uint(id)},
 | 
			
		||||
		UserID:    user.ID,
 | 
			
		||||
		AccountID: user.ID,
 | 
			
		||||
	}).First(¬ify).Error; err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusNotFound, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ func notifyUser(c *fiber.Ctx) error {
 | 
			
		||||
		Body:        data.Body,
 | 
			
		||||
		IsRealtime:  data.IsRealtime,
 | 
			
		||||
		IsForcePush: data.IsForcePush,
 | 
			
		||||
		UserID:      user.ID,
 | 
			
		||||
		AccountID:   user.ID,
 | 
			
		||||
		SenderID:    &client.ID,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ func PushNotification(notification models.Notification) error {
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
	_, err := proto.NewStreamControllerClient(gap.H.GetDealerGrpcConn()).PushStream(ctx, &proto.PushStreamRequest{
 | 
			
		||||
		UserId: uint64(notification.UserID),
 | 
			
		||||
		UserId: uint64(notification.AccountID),
 | 
			
		||||
		Body: models.UnifiedCommand{
 | 
			
		||||
			Action:  "notifications.new",
 | 
			
		||||
			Payload: notification,
 | 
			
		||||
@@ -80,13 +80,13 @@ func PushNotification(notification models.Notification) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Skip push notification
 | 
			
		||||
	if GetStatusDisturbable(notification.UserID) != nil {
 | 
			
		||||
	if GetStatusDisturbable(notification.AccountID) != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var subscribers []models.NotificationSubscriber
 | 
			
		||||
	if err := database.C.Where(&models.NotificationSubscriber{
 | 
			
		||||
		AccountID: notification.UserID,
 | 
			
		||||
		AccountID: notification.AccountID,
 | 
			
		||||
	}).Find(&subscribers).Error; err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -94,9 +94,9 @@ func NewFriend(userA models.Account, userB models.Account, skipPending ...bool)
 | 
			
		||||
		return relA, err
 | 
			
		||||
	} else {
 | 
			
		||||
		_ = NewNotification(models.Notification{
 | 
			
		||||
			Title:  fmt.Sprintf("New friend request from %s", userA.Name),
 | 
			
		||||
			Body:   fmt.Sprintf("You got a new friend request from %s. Go to your settings and decide how to deal it.", userA.Nick),
 | 
			
		||||
			UserID: userB.ID,
 | 
			
		||||
			Title:     fmt.Sprintf("New friend request from %s", userA.Name),
 | 
			
		||||
			Body:      fmt.Sprintf("You got a new friend request from %s. Go to your settings and decide how to deal it.", userA.Nick),
 | 
			
		||||
			AccountID: userB.ID,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user