writekit/internal/db/users.go

63 lines
1.9 KiB
Go
Raw Normal View History

2026-01-09 00:16:46 +02:00
package db
import (
"context"
"github.com/jackc/pgx/v5"
)
func (db *DB) GetUserByID(ctx context.Context, id string) (*User, error) {
var u User
err := db.pool.QueryRow(ctx,
`SELECT id, email, name, avatar_url, created_at FROM users WHERE id = $1`,
id).Scan(&u.ID, &u.Email, &u.Name, &u.AvatarURL, &u.CreatedAt)
if err == pgx.ErrNoRows {
return nil, nil
}
return &u, err
}
func (db *DB) GetUserByEmail(ctx context.Context, email string) (*User, error) {
var u User
err := db.pool.QueryRow(ctx,
`SELECT id, email, name, avatar_url, created_at FROM users WHERE email = $1`,
email).Scan(&u.ID, &u.Email, &u.Name, &u.AvatarURL, &u.CreatedAt)
if err == pgx.ErrNoRows {
return nil, nil
}
return &u, err
}
func (db *DB) GetUserByIdentity(ctx context.Context, provider, providerID string) (*User, error) {
var u User
err := db.pool.QueryRow(ctx,
`SELECT u.id, u.email, u.name, u.avatar_url, u.created_at
FROM users u
JOIN user_identities i ON i.user_id = u.id
WHERE i.provider = $1 AND i.provider_id = $2`,
provider, providerID).Scan(&u.ID, &u.Email, &u.Name, &u.AvatarURL, &u.CreatedAt)
if err == pgx.ErrNoRows {
return nil, nil
}
return &u, err
}
func (db *DB) CreateUser(ctx context.Context, email, name, avatarURL string) (*User, error) {
var u User
err := db.pool.QueryRow(ctx,
`INSERT INTO users (email, name, avatar_url)
VALUES ($1, $2, $3)
RETURNING id, email, name, avatar_url, created_at`,
email, name, avatarURL).Scan(&u.ID, &u.Email, &u.Name, &u.AvatarURL, &u.CreatedAt)
return &u, err
}
func (db *DB) AddUserIdentity(ctx context.Context, userID, provider, providerID, providerEmail string) error {
_, err := db.pool.Exec(ctx,
`INSERT INTO user_identities (user_id, provider, provider_id, provider_email)
VALUES ($1, $2, $3, $4)
ON CONFLICT (provider, provider_id) DO NOTHING`,
userID, provider, providerID, providerEmail)
return err
}