store.go

 1package store
 2
 3import (
 4	"context"
 5
 6	"github.com/charmbracelet/soft-serve/server/access"
 7	"github.com/charmbracelet/soft-serve/server/db"
 8	"github.com/charmbracelet/soft-serve/server/db/models"
 9	"golang.org/x/crypto/ssh"
10)
11
12// SettingStore is an interface for managing settings.
13type SettingStore interface {
14	GetAnonAccess(ctx context.Context, h db.Handler) (access.AccessLevel, error)
15	SetAnonAccess(ctx context.Context, h db.Handler, level access.AccessLevel) error
16	GetAllowKeylessAccess(ctx context.Context, h db.Handler) (bool, error)
17	SetAllowKeylessAccess(ctx context.Context, h db.Handler, allow bool) error
18}
19
20// RepositoryStore is an interface for managing repositories.
21type RepositoryStore interface {
22	GetRepoByName(ctx context.Context, h db.Handler, name string) (models.Repo, error)
23	GetAllRepos(ctx context.Context, h db.Handler) ([]models.Repo, error)
24	CreateRepo(ctx context.Context, h db.Handler, name string, projectName string, description string, isPrivate bool, isHidden bool, isMirror bool) error
25	DeleteRepoByName(ctx context.Context, h db.Handler, name string) error
26	SetRepoNameByName(ctx context.Context, h db.Handler, name string, newName string) error
27
28	GetRepoProjectNameByName(ctx context.Context, h db.Handler, name string) (string, error)
29	SetRepoProjectNameByName(ctx context.Context, h db.Handler, name string, projectName string) error
30	GetRepoDescriptionByName(ctx context.Context, h db.Handler, name string) (string, error)
31	SetRepoDescriptionByName(ctx context.Context, h db.Handler, name string, description string) error
32	GetRepoIsPrivateByName(ctx context.Context, h db.Handler, name string) (bool, error)
33	SetRepoIsPrivateByName(ctx context.Context, h db.Handler, name string, isPrivate bool) error
34	GetRepoIsHiddenByName(ctx context.Context, h db.Handler, name string) (bool, error)
35	SetRepoIsHiddenByName(ctx context.Context, h db.Handler, name string, isHidden bool) error
36	GetRepoIsMirrorByName(ctx context.Context, h db.Handler, name string) (bool, error)
37}
38
39// UserStore is an interface for managing users.
40type UserStore interface {
41	GetUserByID(ctx context.Context, h db.Handler, id int64) (models.User, error)
42	FindUserByUsername(ctx context.Context, h db.Handler, username string) (models.User, error)
43	FindUserByPublicKey(ctx context.Context, h db.Handler, pk ssh.PublicKey) (models.User, error)
44	GetAllUsers(ctx context.Context, h db.Handler) ([]models.User, error)
45	CreateUser(ctx context.Context, h db.Handler, username string, isAdmin bool, pks []ssh.PublicKey) error
46	DeleteUserByUsername(ctx context.Context, h db.Handler, username string) error
47	SetUsernameByUsername(ctx context.Context, h db.Handler, username string, newUsername string) error
48	SetAdminByUsername(ctx context.Context, h db.Handler, username string, isAdmin bool) error
49	AddPublicKeyByUsername(ctx context.Context, h db.Handler, username string, pk ssh.PublicKey) error
50	RemovePublicKeyByUsername(ctx context.Context, h db.Handler, username string, pk ssh.PublicKey) error
51	ListPublicKeysByUserID(ctx context.Context, h db.Handler, id int64) ([]ssh.PublicKey, error)
52	ListPublicKeysByUsername(ctx context.Context, h db.Handler, username string) ([]ssh.PublicKey, error)
53}
54
55// CollaboratorStore is an interface for managing collaborators.
56type CollaboratorStore interface {
57	GetCollabByUsernameAndRepo(ctx context.Context, h db.Handler, username string, repo string) (models.Collab, error)
58	AddCollabByUsernameAndRepo(ctx context.Context, h db.Handler, username string, repo string) error
59	RemoveCollabByUsernameAndRepo(ctx context.Context, h db.Handler, username string, repo string) error
60	ListCollabsByRepo(ctx context.Context, h db.Handler, repo string) ([]models.Collab, error)
61	ListCollabsByRepoAsUsers(ctx context.Context, h db.Handler, repo string) ([]models.User, error)
62}
63
64// Store is an interface for managing repositories, users, and settings.
65type Store interface {
66	RepositoryStore
67	UserStore
68	CollaboratorStore
69	SettingStore
70	LFSStore
71}