-- 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;