diff options
| author | 2025-05-11 13:38:13 +0000 | |
|---|---|---|
| committer | 2025-05-11 13:38:13 +0000 | |
| commit | 8480a758081e84384a366a29ecee3c3103687512 (patch) | |
| tree | d35f56a4b88905fb5f9c3a9f788ac2cf628c92fe /internal/gtsmodel | |
| parent | [bugfix] Fix a11y property warning from authorization page (#4166) (diff) | |
| download | gotosocial-8480a758081e84384a366a29ecee3c3103687512.tar.xz | |
[feature] Notify accounts when a status they've interacted with has been edited (#4157)
This pull request adds sending notifications to local accounts that have interacted with a status, if we receive or create a new edit for that status.
closes https://codeberg.org/superseriousbusiness/gotosocial/issues/3991
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4157
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/gtsmodel')
| -rw-r--r-- | internal/gtsmodel/interaction.go | 7 | ||||
| -rw-r--r-- | internal/gtsmodel/notification.go | 4 | ||||
| -rw-r--r-- | internal/gtsmodel/status.go | 7 | ||||
| -rw-r--r-- | internal/gtsmodel/statusfave.go | 7 |
4 files changed, 23 insertions, 2 deletions
diff --git a/internal/gtsmodel/interaction.go b/internal/gtsmodel/interaction.go index 92dd1a4e0..0b9ee693e 100644 --- a/internal/gtsmodel/interaction.go +++ b/internal/gtsmodel/interaction.go @@ -95,3 +95,10 @@ func (ir *InteractionRequest) IsAccepted() bool { func (ir *InteractionRequest) IsRejected() bool { return !ir.RejectedAt.IsZero() } + +// Interaction abstractly represents +// one interaction with a status, via +// liking, replying to, or boosting it. +type Interaction interface { + GetAccount() *Account +} diff --git a/internal/gtsmodel/notification.go b/internal/gtsmodel/notification.go index d160e0883..cc892bdd5 100644 --- a/internal/gtsmodel/notification.go +++ b/internal/gtsmodel/notification.go @@ -32,8 +32,8 @@ type Notification struct { TargetAccount *Account `bun:"-"` // Account corresponding to TargetAccountID. Can be nil, always check first + select using ID if necessary. OriginAccountID string `bun:"type:CHAR(26),nullzero,notnull"` // ID of the account that performed the action that created the notification. OriginAccount *Account `bun:"-"` // Account corresponding to OriginAccountID. Can be nil, always check first + select using ID if necessary. - StatusID string `bun:"type:CHAR(26),nullzero"` // If the notification pertains to a status, what is the database ID of that status? - Status *Status `bun:"-"` // Status corresponding to StatusID. Can be nil, always check first + select using ID if necessary. + StatusOrEditID string `bun:"status_id,type:CHAR(26),nullzero"` // If the notification pertains to a status or a status edit event, what is the database ID of the status or status edit? + Status *Status `bun:"-"` // Status corresponding to StatusOrEditID. Can be nil, always check first + select using ID if necessary. Read *bool `bun:",nullzero,notnull,default:false"` // Notification has been seen/read } diff --git a/internal/gtsmodel/status.go b/internal/gtsmodel/status.go index eca50416e..884caac0c 100644 --- a/internal/gtsmodel/status.go +++ b/internal/gtsmodel/status.go @@ -89,6 +89,13 @@ func (s *Status) GetAccountID() string { return s.AccountID } +// GetAccount returns the account that owns +// this status. May be nil if status not populated. +// Fulfils Interaction interface. +func (s *Status) GetAccount() *Account { + return s.Account +} + // GetBoostOfID implements timeline.Timelineable{}. func (s *Status) GetBoostOfID() string { return s.BoostOfID diff --git a/internal/gtsmodel/statusfave.go b/internal/gtsmodel/statusfave.go index 9d6c6335b..6fe4ed821 100644 --- a/internal/gtsmodel/statusfave.go +++ b/internal/gtsmodel/statusfave.go @@ -35,3 +35,10 @@ type StatusFave struct { PreApproved bool `bun:"-"` // If true, then fave targets a status on our instance, has permission to do the interaction, and an Accept should be sent out for it immediately. Field not stored in the DB. ApprovedByURI string `bun:",nullzero"` // URI of an Accept Activity that approves this Like. } + +// GetAccount returns the account that owns +// this fave. May be nil if fave not populated. +// Fulfils Interaction interface. +func (f *StatusFave) GetAccount() *Account { + return f.Account +} |
