gtsocial-umbx

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

get.go (1946B)


      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 	"fmt"
     23 	"net/url"
     24 
     25 	"codeberg.org/gruf/go-kv"
     26 	"github.com/superseriousbusiness/activity/streams/vocab"
     27 	"github.com/superseriousbusiness/gotosocial/internal/log"
     28 	"github.com/superseriousbusiness/gotosocial/internal/uris"
     29 )
     30 
     31 // Get returns the database entry for the specified id.
     32 //
     33 // The library makes this call only after acquiring a lock first.
     34 func (f *federatingDB) Get(ctx context.Context, id *url.URL) (value vocab.Type, err error) {
     35 	l := log.WithContext(ctx).
     36 		WithFields(kv.Fields{{"id", id}}...)
     37 	l.Debug("entering Get")
     38 
     39 	switch {
     40 	case uris.IsUserPath(id):
     41 		acct, err := f.state.DB.GetAccountByURI(ctx, id.String())
     42 		if err != nil {
     43 			return nil, err
     44 		}
     45 		return f.typeConverter.AccountToAS(ctx, acct)
     46 	case uris.IsStatusesPath(id):
     47 		status, err := f.state.DB.GetStatusByURI(ctx, id.String())
     48 		if err != nil {
     49 			return nil, err
     50 		}
     51 		return f.typeConverter.StatusToAS(ctx, status)
     52 	case uris.IsFollowersPath(id):
     53 		return f.Followers(ctx, id)
     54 	case uris.IsFollowingPath(id):
     55 		return f.Following(ctx, id)
     56 	default:
     57 		return nil, fmt.Errorf("federatingDB: could not Get %s", id.String())
     58 	}
     59 }