diff options
Diffstat (limited to 'internal/db')
4 files changed, 152 insertions, 0 deletions
diff --git a/internal/db/bundb/domain.go b/internal/db/bundb/domain.go index 3d9ab41d0..4e3058de1 100644 --- a/internal/db/bundb/domain.go +++ b/internal/db/bundb/domain.go @@ -97,6 +97,20 @@ func (d *domainDB) GetDomainAllows(ctx context.Context) ([]*gtsmodel.DomainAllow return allows, nil } +func (d *domainDB) GetDomainAllowsBySubscriptionID(ctx context.Context, subscriptionID string) ([]*gtsmodel.DomainAllow, error) { + allows := []*gtsmodel.DomainAllow{} + + if err := d.db. + NewSelect(). + Model(&allows). + Where("? = ?", bun.Ident("subscription_id"), subscriptionID). + Scan(ctx); err != nil { + return nil, err + } + + return allows, nil +} + func (d *domainDB) GetDomainAllowByID(ctx context.Context, id string) (*gtsmodel.DomainAllow, error) { var allow gtsmodel.DomainAllow @@ -225,6 +239,20 @@ func (d *domainDB) GetDomainBlocks(ctx context.Context) ([]*gtsmodel.DomainBlock return blocks, nil } +func (d *domainDB) GetDomainBlocksBySubscriptionID(ctx context.Context, subscriptionID string) ([]*gtsmodel.DomainBlock, error) { + blocks := []*gtsmodel.DomainBlock{} + + if err := d.db. + NewSelect(). + Model(&blocks). + Where("? = ?", bun.Ident("subscription_id"), subscriptionID). + Scan(ctx); err != nil { + return nil, err + } + + return blocks, nil +} + func (d *domainDB) GetDomainBlockByID(ctx context.Context, id string) (*gtsmodel.DomainBlock, error) { var block gtsmodel.DomainBlock diff --git a/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions.go b/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions.go new file mode 100644 index 000000000..83237a614 --- /dev/null +++ b/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions.go @@ -0,0 +1,76 @@ +// 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 migrations + +import ( + "context" + "fmt" + "reflect" + + "code.superseriousbusiness.org/gotosocial/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions" + "code.superseriousbusiness.org/gotosocial/internal/log" + "github.com/uptrace/bun" +) + +func init() { + up := func(ctx context.Context, db *bun.DB) error { + return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + // Bail if "remove_retracted" + // column already created. + if exists, err := doesColumnExist( + ctx, + tx, + "domain_permission_subscriptions", + "remove_retracted", + ); err != nil { + return err + } else if exists { + return nil + } + + // Derive column definition. + var permSub *gtsmodel.DomainPermissionSubscription + permSubType := reflect.TypeOf(permSub) + colDef, err := getBunColumnDef(tx, permSubType, "RemoveRetracted") + if err != nil { + return fmt.Errorf("error making column def: %w", err) + } + + log.Info(ctx, "adding domain_permission_subscriptions.remove_retracted column...") + if _, err := tx. + NewAddColumn(). + Model(permSub). + ColumnExpr(colDef). + Exec(ctx); err != nil { + return fmt.Errorf("error adding column: %w", err) + } + + return nil + }) + } + + down := func(ctx context.Context, db *bun.DB) error { + return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + return nil + }) + } + + if err := Migrations.Register(up, down); err != nil { + panic(err) + } +} diff --git a/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions/domainpermissionsubscription.go b/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions/domainpermissionsubscription.go new file mode 100644 index 000000000..a8d00cb06 --- /dev/null +++ b/internal/db/bundb/migrations/20250603125942_domain_perm_sub_retractions/domainpermissionsubscription.go @@ -0,0 +1,42 @@ +// 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 DomainPermissionSubscription struct { + ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` + Priority uint8 `bun:""` + Title string `bun:",nullzero,unique"` + PermissionType uint8 `bun:",nullzero,notnull"` + AsDraft *bool `bun:",nullzero,notnull,default:true"` + AdoptOrphans *bool `bun:",nullzero,notnull,default:false"` + CreatedByAccountID string `bun:"type:CHAR(26),nullzero,notnull"` + URI string `bun:",nullzero,notnull,unique"` + ContentType int16 `bun:",nullzero,notnull"` + FetchUsername string `bun:",nullzero"` + FetchPassword string `bun:",nullzero"` + FetchedAt time.Time `bun:"type:timestamptz,nullzero"` + SuccessfullyFetchedAt time.Time `bun:"type:timestamptz,nullzero"` + LastModified time.Time `bun:"type:timestamptz,nullzero"` + ETag string `bun:"etag,nullzero"` + Error string `bun:",nullzero"` + + // This is the field added by this migration. + RemoveRetracted *bool `bun:",nullzero,notnull,default:true"` +} diff --git a/internal/db/domain.go b/internal/db/domain.go index 0c1fb97b3..466fb0a4f 100644 --- a/internal/db/domain.go +++ b/internal/db/domain.go @@ -43,6 +43,9 @@ type Domain interface { // GetDomainAllows returns all instance-level domain allows currently enforced by this instance. GetDomainAllows(ctx context.Context) ([]*gtsmodel.DomainAllow, error) + // GetDomainAllowsBySubscriptionID gets all domain allows that have the given subscription ID. + GetDomainAllowsBySubscriptionID(ctx context.Context, subscriptionID string) ([]*gtsmodel.DomainAllow, error) + // UpdateDomainAllow updates the given domain allow, setting the provided columns (empty for all). UpdateDomainAllow(ctx context.Context, allow *gtsmodel.DomainAllow, columns ...string) error @@ -58,6 +61,9 @@ type Domain interface { // GetDomainBlockByID returns one instance-level domain block with the given id, if it exists. GetDomainBlockByID(ctx context.Context, id string) (*gtsmodel.DomainBlock, error) + // GetDomainBlocksBySubscriptionID gets all domain blocks that have the given subscription ID. + GetDomainBlocksBySubscriptionID(ctx context.Context, subscriptionID string) ([]*gtsmodel.DomainBlock, error) + // GetDomainBlocks returns all instance-level domain blocks currently enforced by this instance. GetDomainBlocks(ctx context.Context) ([]*gtsmodel.DomainBlock, error) |
