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}