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 }