summaryrefslogtreecommitdiff
path: root/internal/gtsmodel
diff options
context:
space:
mode:
authorLibravatar tobi <tobi.smethurst@protonmail.com>2025-05-11 13:38:13 +0000
committerLibravatar kim <gruf@noreply.codeberg.org>2025-05-11 13:38:13 +0000
commit8480a758081e84384a366a29ecee3c3103687512 (patch)
treed35f56a4b88905fb5f9c3a9f788ac2cf628c92fe /internal/gtsmodel
parent[bugfix] Fix a11y property warning from authorization page (#4166) (diff)
downloadgotosocial-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.go7
-rw-r--r--internal/gtsmodel/notification.go4
-rw-r--r--internal/gtsmodel/status.go7
-rw-r--r--internal/gtsmodel/statusfave.go7
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
+}