summaryrefslogtreecommitdiff
path: root/internal/db
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-03-14 17:11:04 +0100
committerLibravatar GitHub <noreply@github.com>2023-03-14 16:11:04 +0000
commit196cd88b1c7c44a337ca12f6a804f1bb7fa83c4a (patch)
tree9607d95b3f4f55a1ebfeded2f7aa9a3c8866bd0a /internal/db
parent[chore] fix + update swagger docs (#1622) (diff)
downloadgotosocial-196cd88b1c7c44a337ca12f6a804f1bb7fa83c4a.tar.xz
[feature] Allow admins to send test emails (#1620)
* [feature] Allow admins to send test emails * implement unwrap on new error type * add + use gtserror types * GoToSocial Email Test -> GoToSocial Test Email * add + use getInstance db call * removed unused "unknown" error type
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/bundb/instance.go14
-rw-r--r--internal/db/bundb/instance_test.go13
-rw-r--r--internal/db/instance.go3
3 files changed, 30 insertions, 0 deletions
diff --git a/internal/db/bundb/instance.go b/internal/db/bundb/instance.go
index c40551212..b4bdeb1d9 100644
--- a/internal/db/bundb/instance.go
+++ b/internal/db/bundb/instance.go
@@ -97,6 +97,20 @@ func (i *instanceDB) CountInstanceDomains(ctx context.Context, domain string) (i
return count, nil
}
+func (i *instanceDB) GetInstance(ctx context.Context, domain string) (*gtsmodel.Instance, db.Error) {
+ instance := &gtsmodel.Instance{}
+
+ if err := i.conn.
+ NewSelect().
+ Model(instance).
+ Where("? = ?", bun.Ident("instance.domain"), domain).
+ Scan(ctx); err != nil {
+ return nil, i.conn.ProcessError(err)
+ }
+
+ return instance, nil
+}
+
func (i *instanceDB) GetInstancePeers(ctx context.Context, includeSuspended bool) ([]*gtsmodel.Instance, db.Error) {
instances := []*gtsmodel.Instance{}
diff --git a/internal/db/bundb/instance_test.go b/internal/db/bundb/instance_test.go
index 3edb68370..4269df5ca 100644
--- a/internal/db/bundb/instance_test.go
+++ b/internal/db/bundb/instance_test.go
@@ -23,6 +23,7 @@ import (
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/superseriousbusiness/gotosocial/internal/db"
)
type InstanceTestSuite struct {
@@ -59,6 +60,18 @@ func (suite *InstanceTestSuite) TestCountInstanceDomains() {
suite.Equal(2, count)
}
+func (suite *InstanceTestSuite) TestGetInstanceOK() {
+ instance, err := suite.db.GetInstance(context.Background(), "localhost:8080")
+ suite.NoError(err)
+ suite.NotNil(instance)
+}
+
+func (suite *InstanceTestSuite) TestGetInstanceNonexistent() {
+ instance, err := suite.db.GetInstance(context.Background(), "doesnt.exist.com")
+ suite.ErrorIs(err, db.ErrNoEntries)
+ suite.Nil(instance)
+}
+
func (suite *InstanceTestSuite) TestGetInstancePeers() {
peers, err := suite.db.GetInstancePeers(context.Background(), false)
suite.NoError(err)
diff --git a/internal/db/instance.go b/internal/db/instance.go
index 85d094d96..dff471193 100644
--- a/internal/db/instance.go
+++ b/internal/db/instance.go
@@ -34,6 +34,9 @@ type Instance interface {
// CountInstanceDomains returns the number of known instances known that the given domain federates with.
CountInstanceDomains(ctx context.Context, domain string) (int, Error)
+ // GetInstance returns the instance entry for the given domain, if it exists.
+ GetInstance(ctx context.Context, domain string) (*gtsmodel.Instance, Error)
+
// GetInstanceAccounts returns a slice of accounts from the given instance, arranged by ID.
GetInstanceAccounts(ctx context.Context, domain string, maxID string, limit int) ([]*gtsmodel.Account, Error)