db.go

 1package db
 2
 3import (
 4	"github.com/charmbracelet/soft-serve/proto"
 5	"github.com/charmbracelet/soft-serve/server/db/types"
 6)
 7
 8// ConfigStore is a configuration database storage.
 9type ConfigStore interface {
10	// Config
11	GetConfig() (*types.Config, error)
12	SetConfigName(string) error
13	SetConfigHost(string) error
14	SetConfigPort(int) error
15	SetConfigAnonAccess(string) error
16	SetConfigAllowKeyless(bool) error
17}
18
19// UserStore is a user database storage.
20type UserStore interface {
21	// Users
22	AddUser(name, login, email, password string, isAdmin bool) error
23	DeleteUser(int) error
24	GetUser(int) (*types.User, error)
25	GetUserByLogin(string) (*types.User, error)
26	GetUserByEmail(string) (*types.User, error)
27	GetUserByPublicKey(string) (*types.User, error)
28	SetUserName(*types.User, string) error
29	SetUserLogin(*types.User, string) error
30	SetUserEmail(*types.User, string) error
31	SetUserPassword(*types.User, string) error
32	SetUserAdmin(*types.User, bool) error
33	CountUsers() (int, error)
34}
35
36// PublicKeyStore is a public key database storage.
37type PublicKeyStore interface {
38	// Public keys
39	AddUserPublicKey(*types.User, string) error
40	DeleteUserPublicKey(int) error
41	GetUserPublicKeys(*types.User) ([]*types.PublicKey, error)
42}
43
44// RepoStore is a repository database storage.
45type RepoStore interface {
46	// Repos
47	AddRepo(name, projectName, description string, isPrivate bool) error
48	DeleteRepo(string) error
49	GetRepo(string) (*types.Repo, error)
50	SetRepoProjectName(string, string) error
51	SetRepoDescription(string, string) error
52	SetRepoPrivate(string, bool) error
53}
54
55// CollabStore is a collaborator database storage.
56type CollabStore interface {
57	// Collaborators
58	AddRepoCollab(string, *types.User) error
59	DeleteRepoCollab(int, int) error
60	ListRepoCollabs(string) ([]*types.User, error)
61	ListRepoPublicKeys(string) ([]*types.PublicKey, error)
62}
63
64// Store is a database.
65type Store interface {
66	proto.Provider
67
68	ConfigStore
69	UserStore
70	PublicKeyStore
71	RepoStore
72	CollabStore
73
74	// CreateDB creates the database.
75	CreateDB() error
76
77	// Close closes the database.
78	Close() error
79}