package repository import ( "database/sql" "errors" "fmt" models "vibeStonk/server/models/v1" ) const ( errMsgFailed = "failed to initialize repo with engine[%s]: %w" ) var ( ErrBadEngine = errors.New("bad config.DBEngine") ) type UserRepo interface { Create(user *models.User) (*models.User, error) Get(id string) (*models.User, error) GetByUsername(username string) (*models.User, error) Update(user *models.User) error Delete(user *models.User) error } func NewUserRepo(config *Config, db *sql.DB) (UserRepo, error) { switch config.DBEngine { case Sqlite: repo, err := newSqliteUsersRepo(db) if err != nil { return nil, fmt.Errorf(errMsgFailed, "Sqlite", err) } return repo, nil default: return nil, ErrBadEngine } }