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  }