179 lines
3.6 KiB
SQL
179 lines
3.6 KiB
SQL
-- name: CreateUser :one
|
|
INSERT INTO users (
|
|
email,
|
|
password_hash,
|
|
role,
|
|
full_name
|
|
) VALUES (
|
|
$1,
|
|
$2,
|
|
$3,
|
|
$4
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: GetUserByID :one
|
|
SELECT *
|
|
FROM users
|
|
WHERE id = $1;
|
|
|
|
-- name: GetAuthUserByID :one
|
|
SELECT
|
|
u.id AS user_id,
|
|
u.email AS user_email,
|
|
u.role AS user_role,
|
|
u.full_name AS user_full_name,
|
|
u.is_active AS user_is_active,
|
|
u.created_at AS user_created_at,
|
|
u.updated_at AS user_updated_at,
|
|
p.user_id AS profile_user_id,
|
|
p.preferred_name,
|
|
p.profile_icon_url,
|
|
p.headline,
|
|
p.bio,
|
|
p.timezone,
|
|
p.locale,
|
|
p.grade_level,
|
|
p.learning_goal,
|
|
p.created_at AS profile_created_at,
|
|
p.updated_at AS profile_updated_at
|
|
FROM users u
|
|
LEFT JOIN profiles p ON p.user_id = u.id
|
|
WHERE u.id = $1;
|
|
|
|
-- name: GetUserByEmail :one
|
|
SELECT *
|
|
FROM users
|
|
WHERE email = $1;
|
|
|
|
-- name: GetAuthUserByEmail :one
|
|
SELECT
|
|
u.id AS user_id,
|
|
u.email AS user_email,
|
|
u.role AS user_role,
|
|
u.full_name AS user_full_name,
|
|
u.is_active AS user_is_active,
|
|
u.password_hash AS user_password_hash,
|
|
u.created_at AS user_created_at,
|
|
u.updated_at AS user_updated_at,
|
|
p.user_id AS profile_user_id,
|
|
p.preferred_name,
|
|
p.profile_icon_url,
|
|
p.headline,
|
|
p.bio,
|
|
p.timezone,
|
|
p.locale,
|
|
p.grade_level,
|
|
p.learning_goal,
|
|
p.created_at AS profile_created_at,
|
|
p.updated_at AS profile_updated_at
|
|
FROM users u
|
|
LEFT JOIN profiles p ON p.user_id = u.id
|
|
WHERE u.email = $1;
|
|
|
|
-- name: ListUsersByRole :many
|
|
SELECT *
|
|
FROM users
|
|
WHERE role = $1
|
|
ORDER BY full_name ASC;
|
|
|
|
-- name: ListUsersWithProfileByRole :many
|
|
SELECT
|
|
u.id AS user_id,
|
|
u.email AS user_email,
|
|
u.role AS user_role,
|
|
u.full_name AS user_full_name,
|
|
u.is_active AS user_is_active,
|
|
u.created_at AS user_created_at,
|
|
u.updated_at AS user_updated_at,
|
|
p.user_id AS profile_user_id,
|
|
p.preferred_name,
|
|
p.profile_icon_url,
|
|
p.headline,
|
|
p.bio,
|
|
p.timezone,
|
|
p.locale,
|
|
p.grade_level,
|
|
p.learning_goal,
|
|
p.created_at AS profile_created_at,
|
|
p.updated_at AS profile_updated_at
|
|
FROM users u
|
|
LEFT JOIN profiles p ON p.user_id = u.id
|
|
WHERE u.role = $1
|
|
ORDER BY u.full_name ASC;
|
|
|
|
-- name: GetUserWithProfileByID :one
|
|
SELECT
|
|
u.id AS user_id,
|
|
u.email AS user_email,
|
|
u.role AS user_role,
|
|
u.full_name AS user_full_name,
|
|
u.is_active AS user_is_active,
|
|
u.created_at AS user_created_at,
|
|
u.updated_at AS user_updated_at,
|
|
p.user_id AS profile_user_id,
|
|
p.preferred_name,
|
|
p.profile_icon_url,
|
|
p.headline,
|
|
p.bio,
|
|
p.timezone,
|
|
p.locale,
|
|
p.grade_level,
|
|
p.learning_goal,
|
|
p.created_at AS profile_created_at,
|
|
p.updated_at AS profile_updated_at
|
|
FROM users u
|
|
LEFT JOIN profiles p ON p.user_id = u.id
|
|
WHERE u.id = $1;
|
|
|
|
-- name: UpdateUserActiveStatus :one
|
|
UPDATE users
|
|
SET
|
|
is_active = $2,
|
|
updated_at = NOW()
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: UpdateUserFullName :one
|
|
UPDATE users
|
|
SET
|
|
full_name = $2,
|
|
updated_at = NOW()
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: UpsertUserProfile :one
|
|
INSERT INTO profiles (
|
|
user_id,
|
|
preferred_name,
|
|
profile_icon_url,
|
|
headline,
|
|
bio,
|
|
timezone,
|
|
locale,
|
|
grade_level,
|
|
learning_goal
|
|
) VALUES (
|
|
$1,
|
|
$2,
|
|
$3,
|
|
$4,
|
|
$5,
|
|
$6,
|
|
$7,
|
|
$8,
|
|
$9
|
|
)
|
|
ON CONFLICT (user_id) DO UPDATE
|
|
SET
|
|
preferred_name = EXCLUDED.preferred_name,
|
|
profile_icon_url = EXCLUDED.profile_icon_url,
|
|
headline = EXCLUDED.headline,
|
|
bio = EXCLUDED.bio,
|
|
timezone = EXCLUDED.timezone,
|
|
locale = EXCLUDED.locale,
|
|
grade_level = EXCLUDED.grade_level,
|
|
learning_goal = EXCLUDED.learning_goal,
|
|
updated_at = NOW()
|
|
RETURNING *;
|