versia-go/internal/repository/repository.go

60 lines
2.3 KiB
Go
Raw Normal View History

2024-08-11 03:51:22 +02:00
package repository
import (
"context"
"crypto/ed25519"
2024-08-22 23:03:38 +02:00
"github.com/lysand-org/versia-go/pkg/versia"
versiautils "github.com/lysand-org/versia-go/pkg/versia/utils"
2024-08-11 03:51:22 +02:00
"github.com/google/uuid"
"github.com/lysand-org/versia-go/internal/entity"
)
type UserRepository interface {
NewUser(ctx context.Context, username, password string, privateKey ed25519.PrivateKey, publicKey ed25519.PublicKey) (*entity.User, error)
2024-08-22 23:03:38 +02:00
ImportLysandUserByURI(ctx context.Context, uri *versiautils.URL) (*entity.User, error)
2024-08-11 03:51:22 +02:00
GetByID(ctx context.Context, id uuid.UUID) (*entity.User, error)
GetLocalByID(ctx context.Context, id uuid.UUID) (*entity.User, error)
2024-08-20 22:43:26 +02:00
GetLocalByUsername(ctx context.Context, username string) (*entity.User, error)
Discover(ctx context.Context, host, username string) (*entity.User, error)
2024-08-11 03:51:22 +02:00
2024-08-22 23:03:38 +02:00
Resolve(ctx context.Context, uri *versiautils.URL) (*entity.User, error)
ResolveMultiple(ctx context.Context, uris []versiautils.URL) ([]*entity.User, error)
2024-08-11 03:51:22 +02:00
2024-08-22 23:03:38 +02:00
LookupByURI(ctx context.Context, uri *versiautils.URL) (*entity.User, error)
LookupByURIs(ctx context.Context, uris []versiautils.URL) ([]*entity.User, error)
2024-08-27 01:26:40 +02:00
LookupLocalByIDOrUsername(ctx context.Context, idOrUsername string) (*entity.User, error)
2024-08-11 03:51:22 +02:00
}
type FollowRepository interface {
GetByID(ctx context.Context, id uuid.UUID) (*entity.Follow, error)
Follow(ctx context.Context, follower, followee *entity.User) (*entity.Follow, error)
Unfollow(ctx context.Context, follower, followee *entity.User) error
AcceptFollow(ctx context.Context, follower, followee *entity.User) error
RejectFollow(ctx context.Context, follower, followee *entity.User) error
}
type NoteRepository interface {
NewNote(ctx context.Context, author *entity.User, content string, mentions []*entity.User) (*entity.Note, error)
2024-08-22 23:03:38 +02:00
ImportLysandNote(ctx context.Context, lNote *versia.Note) (*entity.Note, error)
2024-08-11 03:51:22 +02:00
GetByID(ctx context.Context, idOrUsername uuid.UUID) (*entity.Note, error)
}
2024-08-20 22:43:26 +02:00
type InstanceMetadataRepository interface {
GetByHost(ctx context.Context, host string) (*entity.InstanceMetadata, error)
2024-08-22 23:03:38 +02:00
ImportFromLysandByURI(ctx context.Context, uri *versiautils.URL) (*entity.InstanceMetadata, error)
2024-08-20 22:43:26 +02:00
}
2024-08-11 03:51:22 +02:00
type Manager interface {
Atomic(ctx context.Context, fn func(ctx context.Context, tx Manager) error) error
Users() UserRepository
Notes() NoteRepository
Follows() FollowRepository
2024-08-20 22:43:26 +02:00
InstanceMetadata() InstanceMetadataRepository
2024-08-11 03:51:22 +02:00
}