mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:12:25 -05:00 
			
		
		
		
	[performance] don't use relations to select notification structs, use caches instead (#1072)
This commit is contained in:
		
					parent
					
						
							
								91c3489d5f
							
						
					
				
			
			
				commit
				
					
						d98a48b446
					
				
			
		
					 3 changed files with 5 additions and 11 deletions
				
			
		|  | @ -55,9 +55,6 @@ func (n *notificationDB) GetNotification(ctx context.Context, id string) (*gtsmo | |||
| 
 | ||||
| 		q := n.conn.NewSelect(). | ||||
| 			Model(¬if). | ||||
| 			Relation("OriginAccount"). | ||||
| 			Relation("TargetAccount"). | ||||
| 			Relation("Status"). | ||||
| 			Where("? = ?", bun.Ident("notification.id"), id) | ||||
| 		if err := q.Scan(ctx); err != nil { | ||||
| 			return nil, n.conn.ProcessError(err) | ||||
|  |  | |||
|  | @ -113,9 +113,6 @@ func (suite *NotificationTestSuite) TestGetNotificationsWithoutSpam() { | |||
| 	suite.NotNil(notifications) | ||||
| 	for _, n := range notifications { | ||||
| 		suite.Equal(testAccount.ID, n.TargetAccountID) | ||||
| 		suite.NotNil(n.OriginAccount) | ||||
| 		suite.NotNil(n.TargetAccount) | ||||
| 		suite.NotNil(n.Status) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -24,14 +24,14 @@ import "time" | |||
| type Notification struct { | ||||
| 	ID               string           `validate:"required,ulid" bun:"type:CHAR(26),pk,nullzero,notnull,unique"`                                                                                                                                    // id of this item in the database | ||||
| 	CreatedAt        time.Time        `validate:"-" bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"`                                                                                                                             // when was item created | ||||
| 	UpdatedAt        time.Time        `validate:"-" bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"`                                                                                                                             // when was item last updated                                                                                                                            // when was item created | ||||
| 	UpdatedAt        time.Time        `validate:"-" bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"`                                                                                                                             // when was item last updated | ||||
| 	NotificationType NotificationType `validate:"oneof=follow follow_request mention reblog favourite poll status" bun:",nullzero,notnull"`                                                                                                        // Type of this notification | ||||
| 	TargetAccountID  string           `validate:"ulid" bun:"type:CHAR(26),nullzero,notnull"`                                                                                                                                                       // Which account does this notification target (ie., who will receive the notification?) | ||||
| 	TargetAccount    *Account         `validate:"-" bun:"rel:belongs-to"`                                                                                                                                                                          // Which account performed the action that created this notification? | ||||
| 	TargetAccountID  string           `validate:"ulid" bun:"type:CHAR(26),nullzero,notnull"`                                                                                                                                                       // ID of the account targeted by the notification (ie., who will receive the notification?) | ||||
| 	TargetAccount    *Account         `validate:"-" bun:"-"`                                                                                                                                                                                       // Account corresponding to TargetAccountID. Can be nil, always check first + select using ID if necessary. | ||||
| 	OriginAccountID  string           `validate:"ulid" bun:"type:CHAR(26),nullzero,notnull"`                                                                                                                                                       // ID of the account that performed the action that created the notification. | ||||
| 	OriginAccount    *Account         `validate:"-" bun:"rel:belongs-to"`                                                                                                                                                                          // Account corresponding to originAccountID | ||||
| 	OriginAccount    *Account         `validate:"-" bun:"-"`                                                                                                                                                                                       // Account corresponding to OriginAccountID. Can be nil, always check first + select using ID if necessary. | ||||
| 	StatusID         string           `validate:"required_if=NotificationType mention,required_if=NotificationType reblog,required_if=NotificationType favourite,required_if=NotificationType status,omitempty,ulid" bun:"type:CHAR(26),nullzero"` // If the notification pertains to a status, what is the database ID of that status? | ||||
| 	Status           *Status          `validate:"-" bun:"rel:belongs-to"`                                                                                                                                                                          // Status corresponding to statusID | ||||
| 	Status           *Status          `validate:"-" bun:"-"`                                                                                                                                                                                       // Status corresponding to StatusID. Can be nil, always check first + select using ID if necessary. | ||||
| 	Read             *bool            `validate:"-" bun:",nullzero,notnull,default:false"`                                                                                                                                                         // Notification has been seen/read | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue