initial commit
This commit is contained in:
137
internal/database/queries/users.sql
Normal file
137
internal/database/queries/users.sql
Normal file
@@ -0,0 +1,137 @@
|
||||
-- Фаза 1C: Управление профилем (КРИТИЧНО)
|
||||
-- Запросы для получения и обновления профилей пользователей
|
||||
|
||||
-- ============================================================================
|
||||
-- Профиль пользователя
|
||||
-- ============================================================================
|
||||
|
||||
-- name: GetUserProfile :one
|
||||
SELECT
|
||||
id,
|
||||
email,
|
||||
phone,
|
||||
first_name,
|
||||
last_name,
|
||||
avatar_url,
|
||||
ST_Y(location::geometry) as latitude,
|
||||
ST_X(location::geometry) as longitude,
|
||||
address,
|
||||
city,
|
||||
volunteer_rating,
|
||||
completed_requests_count,
|
||||
is_verified,
|
||||
is_blocked,
|
||||
email_verified,
|
||||
created_at,
|
||||
updated_at,
|
||||
last_login_at
|
||||
FROM users
|
||||
WHERE id = $1 AND deleted_at IS NULL;
|
||||
|
||||
-- name: UpdateUserProfile :exec
|
||||
UPDATE users SET
|
||||
phone = COALESCE(sqlc.narg('phone'), phone),
|
||||
first_name = COALESCE(sqlc.narg('first_name'), first_name),
|
||||
last_name = COALESCE(sqlc.narg('last_name'), last_name),
|
||||
avatar_url = COALESCE(sqlc.narg('avatar_url'), avatar_url),
|
||||
address = COALESCE(sqlc.narg('address'), address),
|
||||
city = COALESCE(sqlc.narg('city'), city),
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = sqlc.arg('user_id');
|
||||
|
||||
-- name: UpdateUserLocation :exec
|
||||
UPDATE users SET
|
||||
location = ST_SetSRID(ST_MakePoint($2, $3), 4326)::geography,
|
||||
address = COALESCE(sqlc.narg('address'), address),
|
||||
city = COALESCE(sqlc.narg('city'), city),
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: VerifyUserEmail :exec
|
||||
UPDATE users SET
|
||||
email_verified = TRUE,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: UpdateUserPassword :exec
|
||||
UPDATE users SET
|
||||
password_hash = $2,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: BlockUser :exec
|
||||
UPDATE users SET
|
||||
is_blocked = TRUE,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: UnblockUser :exec
|
||||
UPDATE users SET
|
||||
is_blocked = FALSE,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: SoftDeleteUser :exec
|
||||
UPDATE users SET
|
||||
deleted_at = CURRENT_TIMESTAMP,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $1;
|
||||
|
||||
-- ============================================================================
|
||||
-- Поиск пользователей
|
||||
-- ============================================================================
|
||||
|
||||
-- name: GetUsersByIDs :many
|
||||
SELECT
|
||||
id,
|
||||
email,
|
||||
phone,
|
||||
password_hash,
|
||||
first_name,
|
||||
last_name,
|
||||
avatar_url,
|
||||
ST_Y(location::geometry) as latitude,
|
||||
ST_X(location::geometry) as longitude,
|
||||
address,
|
||||
city,
|
||||
volunteer_rating,
|
||||
completed_requests_count,
|
||||
is_verified,
|
||||
is_blocked,
|
||||
email_verified,
|
||||
created_at,
|
||||
updated_at,
|
||||
last_login_at,
|
||||
deleted_at
|
||||
FROM users
|
||||
WHERE id = ANY($1::bigint[])
|
||||
AND deleted_at IS NULL;
|
||||
|
||||
-- name: SearchUsersByName :many
|
||||
SELECT
|
||||
id,
|
||||
email,
|
||||
first_name,
|
||||
last_name,
|
||||
avatar_url,
|
||||
volunteer_rating,
|
||||
completed_requests_count,
|
||||
is_verified
|
||||
FROM users
|
||||
WHERE (first_name ILIKE '%' || $1 || '%' OR last_name ILIKE '%' || $1 || '%' OR (first_name || ' ' || last_name) ILIKE '%' || $1 || '%')
|
||||
AND deleted_at IS NULL
|
||||
AND is_blocked = FALSE
|
||||
ORDER BY volunteer_rating DESC NULLS LAST
|
||||
LIMIT $2 OFFSET $3;
|
||||
|
||||
-- name: GetVolunteerStatistics :one
|
||||
SELECT
|
||||
id,
|
||||
first_name,
|
||||
last_name,
|
||||
volunteer_rating,
|
||||
completed_requests_count,
|
||||
created_at as member_since
|
||||
FROM users
|
||||
WHERE id = $1
|
||||
AND deleted_at IS NULL;
|
||||
Reference in New Issue
Block a user