db.go

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