diff options
| author | 2025-05-12 16:22:45 +0000 | |
|---|---|---|
| committer | 2025-05-12 16:22:45 +0000 | |
| commit | 3fedff3a5aa7602069290c216ced5f63acd21357 (patch) | |
| tree | 36ed10b78b4077bc3caec58d9642fb817868b1dd /internal/db/bundb/migrations/20240809134448_interaction_requests_client_api | |
| parent | [chore] Use Codeberg API for get_latest_snapshot (#4151) (diff) | |
| download | gotosocial-3fedff3a5aa7602069290c216ced5f63acd21357.tar.xz | |
[chore] Tidy up previous interaction policy migrations (#4171)
This pull request tidies up some previous migrations by making sure there's a proper snapshot in the migrations folder of what interaction policies looked like at the time the migration was written, rather than using the moving target `internal/gtsmodel`.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4171
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/db/bundb/migrations/20240809134448_interaction_requests_client_api')
4 files changed, 214 insertions, 0 deletions
diff --git a/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionpolicy.go b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionpolicy.go new file mode 100644 index 000000000..17444c4ed --- /dev/null +++ b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionpolicy.go @@ -0,0 +1,33 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package gtsmodel + +type PolicyValue string + +type PolicyValues []PolicyValue + +type InteractionPolicy struct { + CanLike PolicyRules + CanReply PolicyRules + CanAnnounce PolicyRules +} + +type PolicyRules struct { + Always PolicyValues + WithApproval PolicyValues +} diff --git a/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionreq.go b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionreq.go new file mode 100644 index 000000000..99dbaaaf7 --- /dev/null +++ b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/interactionreq.go @@ -0,0 +1,41 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package gtsmodel + +import "time" + +type InteractionRequest struct { + ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` + CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` + StatusID string `bun:"type:CHAR(26),nullzero,notnull"` + TargetAccountID string `bun:"type:CHAR(26),nullzero,notnull"` + InteractingAccountID string `bun:"type:CHAR(26),nullzero,notnull"` + InteractionURI string `bun:",nullzero,notnull,unique"` + InteractionType InteractionType `bun:",notnull"` + AcceptedAt time.Time `bun:"type:timestamptz,nullzero"` + RejectedAt time.Time `bun:"type:timestamptz,nullzero"` + URI string `bun:",nullzero,unique"` +} + +type InteractionType int + +const ( + InteractionLike InteractionType = iota + InteractionReply + InteractionAnnounce +) diff --git a/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/status.go b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/status.go new file mode 100644 index 000000000..ba4a00d6d --- /dev/null +++ b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/status.go @@ -0,0 +1,92 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package gtsmodel + +import ( + "time" + + "code.superseriousbusiness.org/gotosocial/internal/id" +) + +type Status struct { + ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` + CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` + UpdatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` + FetchedAt time.Time `bun:"type:timestamptz,nullzero"` + PinnedAt time.Time `bun:"type:timestamptz,nullzero"` + URI string `bun:",unique,nullzero,notnull"` + URL string `bun:",nullzero"` + Content string `bun:""` + AttachmentIDs []string `bun:"attachments,array"` + TagIDs []string `bun:"tags,array"` + MentionIDs []string `bun:"mentions,array"` + EmojiIDs []string `bun:"emojis,array"` + Local *bool `bun:",nullzero,notnull,default:false"` + AccountID string `bun:"type:CHAR(26),nullzero,notnull"` + AccountURI string `bun:",nullzero,notnull"` + InReplyToID string `bun:"type:CHAR(26),nullzero"` + InReplyToURI string `bun:",nullzero"` + InReplyToAccountID string `bun:"type:CHAR(26),nullzero"` + BoostOfID string `bun:"type:CHAR(26),nullzero"` + BoostOfAccountID string `bun:"type:CHAR(26),nullzero"` + ThreadID string `bun:"type:CHAR(26),nullzero"` + PollID string `bun:"type:CHAR(26),nullzero"` + ContentWarning string `bun:",nullzero"` + Visibility string `bun:",nullzero,notnull"` + Sensitive *bool `bun:",nullzero,notnull,default:false"` + Language string `bun:",nullzero"` + CreatedWithApplicationID string `bun:"type:CHAR(26),nullzero"` + ActivityStreamsType string `bun:",nullzero,notnull"` + Text string `bun:""` + Federated *bool `bun:",notnull"` + InteractionPolicy *InteractionPolicy `bun:""` + PendingApproval *bool `bun:",nullzero,notnull,default:false"` + ApprovedByURI string `bun:",nullzero"` +} + +func StatusToInteractionReq(status *Status) *InteractionRequest { + reqID := id.NewULIDFromTime(status.CreatedAt) + + var ( + targetID string + targetAccountID string + interactionType InteractionType + ) + + if status.InReplyToID != "" { + // It's a reply. + targetID = status.InReplyToID + targetAccountID = status.InReplyToAccountID + interactionType = InteractionReply + } else { + // It's a boost. + targetID = status.BoostOfID + targetAccountID = status.BoostOfAccountID + interactionType = InteractionAnnounce + } + + return &InteractionRequest{ + ID: reqID, + CreatedAt: status.CreatedAt, + StatusID: targetID, + TargetAccountID: targetAccountID, + InteractingAccountID: status.AccountID, + InteractionURI: status.URI, + InteractionType: interactionType, + } +} diff --git a/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/statusfave.go b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/statusfave.go new file mode 100644 index 000000000..e25e47a87 --- /dev/null +++ b/internal/db/bundb/migrations/20240809134448_interaction_requests_client_api/statusfave.go @@ -0,0 +1,48 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package gtsmodel + +import ( + "time" + + "code.superseriousbusiness.org/gotosocial/internal/id" +) + +type StatusFave struct { + ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` + CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` + UpdatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` + AccountID string `bun:"type:CHAR(26),unique:statusfaveaccountstatus,nullzero,notnull"` + TargetAccountID string `bun:"type:CHAR(26),nullzero,notnull"` + StatusID string `bun:"type:CHAR(26),unique:statusfaveaccountstatus,nullzero,notnull"` + URI string `bun:",nullzero,notnull,unique"` + PendingApproval *bool `bun:",nullzero,notnull,default:false"` + ApprovedByURI string `bun:",nullzero"` +} + +func StatusFaveToInteractionRequest(fave *StatusFave) *InteractionRequest { + return &InteractionRequest{ + ID: id.NewULIDFromTime(fave.CreatedAt), + CreatedAt: fave.CreatedAt, + StatusID: fave.StatusID, + TargetAccountID: fave.TargetAccountID, + InteractingAccountID: fave.AccountID, + InteractionURI: fave.URI, + InteractionType: InteractionLike, + } +} |
