github.com/paulwerner/bookkeeper@v0.1.0/store/userStore.go (about)

     1  package store
     2  
     3  import (
     4  	"database/sql"
     5  
     6  	d "github.com/paulwerner/bookkeeper/pkg/domain"
     7  	"github.com/paulwerner/bookkeeper/pkg/uc"
     8  )
     9  
    10  type userStore struct {
    11  	db *sql.DB
    12  }
    13  
    14  func NewUserStore(db *sql.DB) uc.UserStore {
    15  	return &userStore{
    16  		db: db,
    17  	}
    18  }
    19  
    20  func (us *userStore) Create(id d.UserID, name, password string) (*d.User, error) {
    21  	sqlStatement := `INSERT INTO users (id, name, password) VALUES ($1, $2, $3)`
    22  	if _, err := us.db.Exec(sqlStatement, id, name, password); err != nil {
    23  		err = d.ErrInternalError
    24  		return nil, err
    25  	}
    26  	return us.FindByID(id)
    27  }
    28  
    29  func (us *userStore) Exists(id d.UserID) (bool, error) {
    30  	sqlStatement := `SELECT 1 FROM users WHERE id=$1`
    31  	if err := us.db.QueryRow(sqlStatement, id).Err(); err != nil {
    32  		switch err {
    33  		case sql.ErrNoRows:
    34  			err = nil
    35  		default:
    36  			err = d.ErrInternalError
    37  		}
    38  		return false, err
    39  	}
    40  	return true, nil
    41  }
    42  
    43  func (us *userStore) FindByID(id d.UserID) (*d.User, error) {
    44  	var user d.User
    45  	sqlStatement := `SELECT id, name, password FROM users WHERE id=$1`
    46  	if err := us.db.QueryRow(sqlStatement, id).Scan(&user.ID, &user.Name, &user.Password); err != nil {
    47  		switch err {
    48  		case sql.ErrNoRows:
    49  			err = d.ErrNotFound
    50  		default:
    51  			err = d.ErrInternalError
    52  		}
    53  		return nil, err
    54  	}
    55  	return &user, nil
    56  }
    57  
    58  func (us *userStore) FindByName(name string) (*d.User, error) {
    59  	var user d.User
    60  	sqlStatement := `SELECT id, name, password FROM users WHERE name=$1`
    61  	if err := us.db.QueryRow(sqlStatement, name).Scan(&user.ID, &user.Name, &user.Password); err != nil {
    62  		switch err {
    63  		case sql.ErrNoRows:
    64  			err = d.ErrNotFound
    65  		default:
    66  			err = d.ErrInternalError
    67  		}
    68  		return nil, err
    69  	}
    70  	return &user, nil
    71  }