gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

db.go (2103B)


      1 // GoToSocial
      2 // Copyright (C) GoToSocial Authors admin@gotosocial.org
      3 // SPDX-License-Identifier: AGPL-3.0-or-later
      4 //
      5 // This program is free software: you can redistribute it and/or modify
      6 // it under the terms of the GNU Affero General Public License as published by
      7 // the Free Software Foundation, either version 3 of the License, or
      8 // (at your option) any later version.
      9 //
     10 // This program is distributed in the hope that it will be useful,
     11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 // GNU Affero General Public License for more details.
     14 //
     15 // You should have received a copy of the GNU Affero General Public License
     16 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18 package federatingdb
     19 
     20 import (
     21 	"context"
     22 
     23 	"codeberg.org/gruf/go-mutexes"
     24 	"github.com/superseriousbusiness/activity/pub"
     25 	"github.com/superseriousbusiness/activity/streams/vocab"
     26 	"github.com/superseriousbusiness/gotosocial/internal/state"
     27 	"github.com/superseriousbusiness/gotosocial/internal/typeutils"
     28 )
     29 
     30 // DB wraps the pub.Database interface with a couple of custom functions for GoToSocial.
     31 type DB interface {
     32 	pub.Database
     33 	Undo(ctx context.Context, undo vocab.ActivityStreamsUndo) error
     34 	Accept(ctx context.Context, accept vocab.ActivityStreamsAccept) error
     35 	Reject(ctx context.Context, reject vocab.ActivityStreamsReject) error
     36 	Announce(ctx context.Context, announce vocab.ActivityStreamsAnnounce) error
     37 }
     38 
     39 // FederatingDB uses the underlying DB interface to implement the go-fed pub.Database interface.
     40 // It doesn't care what the underlying implementation of the DB interface is, as long as it works.
     41 type federatingDB struct {
     42 	locks         mutexes.MutexMap
     43 	state         *state.State
     44 	typeConverter typeutils.TypeConverter
     45 }
     46 
     47 // New returns a DB interface using the given database and config
     48 func New(state *state.State, tc typeutils.TypeConverter) DB {
     49 	fdb := federatingDB{
     50 		locks:         mutexes.NewMap(-1, -1), // use defaults
     51 		state:         state,
     52 		typeConverter: tc,
     53 	}
     54 	return &fdb
     55 }