Add user model

This commit is contained in:
2024-08-07 00:15:41 -04:00
parent 1fcbac610f
commit fef066b449
4 changed files with 244 additions and 1 deletions

5
models/sql/users.sql Normal file
View File

@@ -0,0 +1,5 @@
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL
);

43
models/user.go Normal file
View File

@@ -0,0 +1,43 @@
package models
import (
"database/sql"
"fmt"
"strings"
"golang.org/x/crypto/bcrypt"
)
type User struct {
ID int
Email string
PasswordHash string
}
type UserService struct {
DB *sql.DB
}
func (us *UserService) Create(email, password string) (*User, error) {
email = strings.ToLower(email)
hashedBytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return nil, fmt.Errorf("create user: %w", err)
}
passwordHash := string(hashedBytes)
user := User{
Email: email,
PasswordHash: passwordHash,
}
row := us.DB.QueryRow(`
INSERT INTO users (email, password_hash)
VALUES ($1, $2) RETURNING id
`, email, passwordHash)
err = row.Scan(&user.ID)
if err != nil {
return nil, fmt.Errorf("create user: %w", err)
}
return &user, nil
}