aboutsummaryrefslogtreecommitdiff
path: root/syncapi/storage/storage.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-01-03 14:07:05 +0000
committerGitHub <noreply@github.com>2020-01-03 14:07:05 +0000
commitc28577ea25d4f9c82110450f7f371905c2750f71 (patch)
tree7eda596a39f4c6ef2fbb2fc3f6a7caeb4ccc77d1 /syncapi/storage/storage.go
parent6cab62246816baf1fdd026744727cba9a7b21c28 (diff)
Implement storage interfaces (#841)
* Implement interfaces for federationsender storage * Implement interfaces for mediaapi storage * Implement interfaces for publicroomsapi storage * Implement interfaces for roomserver storage * Implement interfaces for syncapi storage * Implement interfaces for keydb storage * common.PartitionStorer in publicroomsapi interface * Update copyright notices
Diffstat (limited to 'syncapi/storage/storage.go')
-rw-r--r--syncapi/storage/storage.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/syncapi/storage/storage.go b/syncapi/storage/storage.go
new file mode 100644
index 00000000..eedb42f0
--- /dev/null
+++ b/syncapi/storage/storage.go
@@ -0,0 +1,63 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package storage
+
+import (
+ "context"
+ "errors"
+ "net/url"
+ "time"
+
+ "github.com/matrix-org/dendrite/clientapi/auth/authtypes"
+ "github.com/matrix-org/dendrite/common"
+ "github.com/matrix-org/dendrite/roomserver/api"
+ "github.com/matrix-org/dendrite/syncapi/storage/postgres"
+ "github.com/matrix-org/dendrite/syncapi/types"
+ "github.com/matrix-org/dendrite/typingserver/cache"
+ "github.com/matrix-org/gomatrixserverlib"
+)
+
+type Database interface {
+ common.PartitionStorer
+ AllJoinedUsersInRooms(ctx context.Context) (map[string][]string, error)
+ Events(ctx context.Context, eventIDs []string) ([]gomatrixserverlib.Event, error)
+ WriteEvent(ctx context.Context, ev *gomatrixserverlib.Event, addStateEvents []gomatrixserverlib.Event, addStateEventIDs, removeStateEventIDs []string, transactionID *api.TransactionID) (pduPosition int64, returnErr error)
+ GetStateEvent(ctx context.Context, roomID, evType, stateKey string) (*gomatrixserverlib.Event, error)
+ GetStateEventsForRoom(ctx context.Context, roomID string, stateFilterPart *gomatrixserverlib.FilterPart) (stateEvents []gomatrixserverlib.Event, err error)
+ SyncPosition(ctx context.Context) (types.SyncPosition, error)
+ IncrementalSync(ctx context.Context, device authtypes.Device, fromPos, toPos types.SyncPosition, numRecentEventsPerRoom int, wantFullState bool) (*types.Response, error)
+ CompleteSync(ctx context.Context, userID string, numRecentEventsPerRoom int) (*types.Response, error)
+ GetAccountDataInRange(ctx context.Context, userID string, oldPos, newPos int64, accountDataFilterPart *gomatrixserverlib.FilterPart) (map[string][]string, error)
+ UpsertAccountData(ctx context.Context, userID, roomID, dataType string) (int64, error)
+ AddInviteEvent(ctx context.Context, inviteEvent gomatrixserverlib.Event) (int64, error)
+ RetireInviteEvent(ctx context.Context, inviteEventID string) error
+ SetTypingTimeoutCallback(fn cache.TimeoutCallbackFn)
+ AddTypingUser(userID, roomID string, expireTime *time.Time) int64
+ RemoveTypingUser(userID, roomID string) int64
+}
+
+// NewPublicRoomsServerDatabase opens a database connection.
+func NewSyncServerDatasource(dataSourceName string) (Database, error) {
+ uri, err := url.Parse(dataSourceName)
+ if err != nil {
+ return nil, err
+ }
+ switch uri.Scheme {
+ case "postgres":
+ return postgres.NewSyncServerDatasource(dataSourceName)
+ default:
+ return nil, errors.New("unknown schema")
+ }
+}