58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"database/sql"
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"floorvisualizer/internal/model"
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
func CreateUser(d *sql.DB, username, passwordHash, name string) (*model.User, error) {
|
||
|
|
var u model.User
|
||
|
|
err := d.QueryRow(`
|
||
|
|
INSERT INTO users (username, password_hash, name) VALUES ($1,$2,$3)
|
||
|
|
RETURNING id, username, name, avatar_url, created_at, updated_at
|
||
|
|
`, username, passwordHash, name).Scan(&u.ID, &u.Username, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("create user: %w", err)
|
||
|
|
}
|
||
|
|
return &u, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetUserByUsername(d *sql.DB, username string) (*model.User, error) {
|
||
|
|
var u model.User
|
||
|
|
err := d.QueryRow(`
|
||
|
|
SELECT id, username, password_hash, name, avatar_url, created_at, updated_at
|
||
|
|
FROM users WHERE username = $1
|
||
|
|
`, username).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &u, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetUserByID(d *sql.DB, id string) (*model.User, error) {
|
||
|
|
var u model.User
|
||
|
|
err := d.QueryRow(`
|
||
|
|
SELECT id, username, password_hash, name, avatar_url, created_at, updated_at
|
||
|
|
FROM users WHERE id = $1
|
||
|
|
`, id).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &u, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func UpdateUser(d *sql.DB, id, name, avatarURL string) (*model.User, error) {
|
||
|
|
var u model.User
|
||
|
|
err := d.QueryRow(`
|
||
|
|
UPDATE users SET name=$1, avatar_url=$2, updated_at=now() WHERE id=$3
|
||
|
|
RETURNING id, username, name, avatar_url, created_at, updated_at
|
||
|
|
`, name, avatarURL, id).Scan(&u.ID, &u.Username, &u.Name, &u.AvatarURL, &u.CreatedAt, &u.UpdatedAt)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("update user: %w", err)
|
||
|
|
}
|
||
|
|
return &u, nil
|
||
|
|
}
|