github.com/grafviktor/keep-my-secret@v0.9.10-0.20230908165355-19f35cce90e5/internal/storage/storage.go (about) 1 // Package storage defines main repository interfaces for data manipulation, no concrete implementations here 2 package storage 3 4 import ( 5 "context" 6 "errors" 7 8 "github.com/grafviktor/keep-my-secret/internal/model" 9 "github.com/grafviktor/keep-my-secret/internal/storage/sql" 10 ) 11 12 type Storage interface { 13 AddUser(ctx context.Context, user *model.User) (*model.User, error) 14 GetUser(ctx context.Context, login string) (*model.User, error) 15 SaveSecret(ctx context.Context, secret *model.Secret, login string) (*model.Secret, error) 16 GetSecretsByUser(ctx context.Context, login string) (map[int]*model.Secret, error) 17 DeleteSecret(ctx context.Context, secretID, login string) error 18 GetSecret(ctx context.Context, secretID, login string) (*model.Secret, error) 19 Close() error 20 } 21 22 func GetStorage(ctx context.Context, storageType Type, dsn string) (Storage, error) { 23 if storageType != TypeSQL { 24 return nil, errors.New("unsupported storage type") 25 } 26 27 return sql.NewSQLStorage(ctx, dsn), nil 28 }