Add a bunch of stuff, mostly user and db related

This commit is contained in:
Miguel de la Cruz 2021-09-11 21:38:38 +02:00
parent 48b34bca9d
commit 143c3a8b81
62 changed files with 5093 additions and 0 deletions

View file

@ -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
View 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))
}