Add a bunch of stuff, mostly user and db related
This commit is contained in:
parent
48b34bca9d
commit
143c3a8b81
62 changed files with 5093 additions and 0 deletions
|
@ -11,6 +11,8 @@ import (
|
|||
type Store struct {
|
||||
Path string
|
||||
Conn *sql.DB
|
||||
|
||||
userStore *UserStore
|
||||
}
|
||||
|
||||
func addPathOptions(path string) string {
|
||||
|
@ -34,6 +36,8 @@ func NewStore(path string) (*Store, error) {
|
|||
|
||||
s.Conn = conn
|
||||
|
||||
s.userStore = NewUserStore(s)
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
|
@ -41,6 +45,10 @@ func (s *Store) Close() error {
|
|||
return s.Conn.Close()
|
||||
}
|
||||
|
||||
func (s *Store) User() *UserStore {
|
||||
return s.userStore
|
||||
}
|
||||
|
||||
func (s *Store) EnsureSchema() error {
|
||||
schema := `
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
|
|
87
services/store/user.go
Normal file
87
services/store/user.go
Normal file
|
@ -0,0 +1,87 @@
|
|||
package store
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
sq "github.com/Masterminds/squirrel"
|
||||
|
||||
"git.ctrlz.es/mgdelacroix/rmsn/model"
|
||||
)
|
||||
|
||||
var userColumns = []string{"id", "name", "mail", "username", "password"}
|
||||
|
||||
type UserStore struct {
|
||||
Conn *sql.DB
|
||||
}
|
||||
|
||||
func NewUserStore(s *Store) *UserStore {
|
||||
return &UserStore{Conn: s.Conn}
|
||||
}
|
||||
|
||||
func (us *UserStore) Q() sq.StatementBuilderType {
|
||||
return sq.StatementBuilder.RunWith(us.Conn)
|
||||
}
|
||||
|
||||
func (us *UserStore) usersFromRows(rows *sql.Rows) ([]*model.User, error) {
|
||||
users := []*model.User{}
|
||||
|
||||
for rows.Next() {
|
||||
var user model.User
|
||||
|
||||
err := rows.Scan(
|
||||
&user.ID,
|
||||
&user.Name,
|
||||
&user.Mail,
|
||||
&user.Username,
|
||||
&user.Password,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
users = append(users, &user)
|
||||
}
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (us *UserStore) GetByID(id int) (*model.User, error) {
|
||||
query := us.Q().Select(userColumns...).
|
||||
From("users").
|
||||
Where(sq.Eq{"id": id})
|
||||
|
||||
rows, err := query.Query()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
users, err := us.usersFromRows(rows)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(users) == 0 {
|
||||
return nil, sql.ErrNoRows
|
||||
}
|
||||
|
||||
return users[0], nil
|
||||
}
|
||||
|
||||
func (us *UserStore) Create(user *model.User) (*model.User, error) {
|
||||
query := us.Q().Insert("users").
|
||||
Columns(userColumns[0:len(userColumns)-1]...).
|
||||
Values(user.Name, user.Mail, user.Username, user.Password)
|
||||
|
||||
res, err := query.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
id, err := res.LastInsertId()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return us.GetByID(int(id))
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue