FloorVisualizer/internal/repository/user_repo.go
dindang 94895cbc22 Initial commit: FloorVisualizer backend
- Go API server with PostgreSQL + Redis
- AI floor replacement (OpenRouter Gemini)
- Product database (10 brands, 3539 products)
- Recommendation engine, calculator, articles
- Redis async queue + worker pool
- Hot product caching, brand view tracking
- JWT auth, favorites, projects
- Docker deployment ready

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-16 09:47:11 +08:00

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
}