Yimaru-BackEnd/db/query/user.sql

229 lines
4.4 KiB
SQL

-- name: CreateUser :one
INSERT INTO users (
first_name,
last_name,
nick_name,
email,
phone_number,
role,
password,
age,
education_level,
country,
region,
email_verified,
phone_verified,
suspended,
suspended_at,
organization_id,
created_at,
updated_at
)
VALUES (
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9,
$10,
$11,
$12,
$13,
$14,
$15,
$16,
$17,
$18
)
RETURNING id,
first_name,
last_name,
nick_name,
email,
phone_number,
role,
age,
education_level,
country,
region,
email_verified,
phone_verified,
created_at,
updated_at,
suspended,
suspended_at,
organization_id;
-- name: GetUserByID :one
SELECT *
FROM users
WHERE id = $1;
-- name: GetAllUsers :many
SELECT
COUNT(*) OVER () AS total_count,
id,
first_name,
last_name,
nick_name,
email,
phone_number,
role,
age,
education_level,
country,
region,
email_verified,
phone_verified,
created_at,
updated_at,
suspended,
suspended_at,
organization_id
FROM users
WHERE (
role = $1
OR $1 IS NULL
)
AND (
organization_id = $2
OR $2 IS NULL
)
AND (
first_name ILIKE '%' || sqlc.narg('query') || '%'
OR last_name ILIKE '%' || sqlc.narg('query') || '%'
OR phone_number ILIKE '%' || sqlc.narg('query') || '%'
OR sqlc.narg('query') IS NULL
)
AND (
created_at > sqlc.narg('created_before')
OR sqlc.narg('created_before') IS NULL
)
AND (
created_at < sqlc.narg('created_after')
OR sqlc.narg('created_after') IS NULL
)
LIMIT sqlc.narg('limit')
OFFSET sqlc.narg('offset');
-- name: GetTotalUsers :one
SELECT COUNT(*)
FROM users
wHERE (
role = $1
OR $1 IS NULL
)
AND (
organization_id = $2
OR $2 IS NULL
);
-- name: SearchUserByNameOrPhone :many
SELECT id,
first_name,
last_name,
nick_name,
email,
phone_number,
role,
age,
education_level,
country,
region,
email_verified,
phone_verified,
created_at,
updated_at,
suspended,
suspended_at,
organization_id
FROM users
WHERE (
organization_id = sqlc.narg('organization_id')
OR sqlc.narg('organization_id') IS NULL
)
AND (
first_name ILIKE '%' || $1 || '%'
OR last_name ILIKE '%' || $1 || '%'
OR phone_number LIKE '%' || $1 || '%'
)
AND (
role = sqlc.narg('role')
OR sqlc.narg('role') IS NULL
);
-- name: UpdateUser :exec
UPDATE users
SET first_name = $1,
last_name = $2,
suspended = $3,
updated_at = CURRENT_TIMESTAMP
WHERE id = $4;
-- name: UpdateUserOrganization :exec
UPDATE users
SET organization_id = $1
WHERE id = $2;
-- name: DeleteUser :exec
DELETE FROM users
WHERE id = $1;
-- name: CheckPhoneEmailExist :one
SELECT EXISTS (
SELECT 1
FROM users
WHERE users.phone_number = $1
AND users.phone_number IS NOT NULL
AND users.organization_id = $2
) AS phone_exists,
EXISTS (
SELECT 1
FROM users
WHERE users.email = $3
AND users.email IS NOT NULL
AND users.organization_id = $2
) AS email_exists;
-- name: GetUserByEmailPhone :one
SELECT
id,
first_name,
last_name,
nick_name,
email,
phone_number,
role,
password, -- added this line
age,
education_level,
country,
region,
email_verified,
phone_verified,
created_at,
updated_at,
suspended,
suspended_at,
organization_id
FROM users
WHERE organization_id = $3
AND (
(email = $1 AND $1 IS NOT NULL)
OR (phone_number = $2 AND $2 IS NOT NULL)
)
LIMIT 1;
-- name: UpdatePassword :exec
UPDATE users
SET password = $1,
updated_at = $4
WHERE (
(email = $2 OR phone_number = $3)
AND organization_id = $5
);
-- name: GetOwnerByOrganizationID :one
SELECT users.*
FROM organizations
JOIN users ON organizations.owner_id = users.id
WHERE organizations.id = $1;
-- name: SuspendUser :exec
UPDATE users
SET suspended = $1,
suspended_at = $2,
updated_at = CURRENT_TIMESTAMP
WHERE id = $3;