201 lines
4.4 KiB
SQL
201 lines
4.4 KiB
SQL
-- name: CreateTeamMember :one
|
|
INSERT INTO team_members (
|
|
first_name,
|
|
last_name,
|
|
email,
|
|
phone_number,
|
|
password,
|
|
team_role,
|
|
department,
|
|
job_title,
|
|
employment_type,
|
|
hire_date,
|
|
profile_picture_url,
|
|
bio,
|
|
work_phone,
|
|
emergency_contact,
|
|
status,
|
|
email_verified,
|
|
permissions,
|
|
created_by,
|
|
updated_at
|
|
)
|
|
VALUES (
|
|
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10,
|
|
$11, $12, $13, $14, $15, $16, $17, $18, CURRENT_TIMESTAMP
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: GetTeamMemberByID :one
|
|
SELECT * FROM team_members
|
|
WHERE id = $1;
|
|
|
|
-- name: GetTeamMemberByEmail :one
|
|
SELECT * FROM team_members
|
|
WHERE email = $1
|
|
LIMIT 1;
|
|
|
|
-- name: GetAllTeamMembers :many
|
|
SELECT
|
|
COUNT(*) OVER () AS total_count,
|
|
id,
|
|
first_name,
|
|
last_name,
|
|
email,
|
|
phone_number,
|
|
team_role,
|
|
department,
|
|
job_title,
|
|
employment_type,
|
|
hire_date,
|
|
profile_picture_url,
|
|
bio,
|
|
work_phone,
|
|
status,
|
|
email_verified,
|
|
permissions,
|
|
last_login,
|
|
created_at,
|
|
updated_at
|
|
FROM team_members
|
|
WHERE (team_role = sqlc.narg('team_role') OR sqlc.narg('team_role') IS NULL)
|
|
AND (department = sqlc.narg('department') OR sqlc.narg('department') IS NULL)
|
|
AND (status = sqlc.narg('status') OR sqlc.narg('status') IS NULL)
|
|
ORDER BY created_at DESC
|
|
LIMIT sqlc.narg('limit')::INT
|
|
OFFSET sqlc.narg('offset')::INT;
|
|
|
|
-- name: SearchTeamMembers :many
|
|
SELECT
|
|
id,
|
|
first_name,
|
|
last_name,
|
|
email,
|
|
phone_number,
|
|
team_role,
|
|
department,
|
|
job_title,
|
|
employment_type,
|
|
hire_date,
|
|
profile_picture_url,
|
|
bio,
|
|
status,
|
|
email_verified,
|
|
permissions,
|
|
last_login,
|
|
created_at,
|
|
updated_at
|
|
FROM team_members
|
|
WHERE (
|
|
first_name ILIKE '%' || $1 || '%'
|
|
OR last_name ILIKE '%' || $1 || '%'
|
|
OR email ILIKE '%' || $1 || '%'
|
|
OR phone_number ILIKE '%' || $1 || '%'
|
|
)
|
|
AND (team_role = sqlc.narg('team_role') OR sqlc.narg('team_role') IS NULL)
|
|
AND (status = sqlc.narg('status') OR sqlc.narg('status') IS NULL);
|
|
|
|
-- name: UpdateTeamMember :exec
|
|
UPDATE team_members
|
|
SET
|
|
first_name = COALESCE($1, first_name),
|
|
last_name = COALESCE($2, last_name),
|
|
phone_number = COALESCE($3, phone_number),
|
|
team_role = COALESCE($4, team_role),
|
|
department = COALESCE($5, department),
|
|
job_title = COALESCE($6, job_title),
|
|
employment_type = COALESCE($7, employment_type),
|
|
hire_date = COALESCE($8, hire_date),
|
|
profile_picture_url = COALESCE($9, profile_picture_url),
|
|
bio = COALESCE($10, bio),
|
|
work_phone = COALESCE($11, work_phone),
|
|
emergency_contact = COALESCE($12, emergency_contact),
|
|
permissions = COALESCE($13, permissions),
|
|
updated_by = $14,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $15;
|
|
|
|
-- name: UpdateTeamMemberStatus :exec
|
|
UPDATE team_members
|
|
SET
|
|
status = $1,
|
|
updated_by = $2,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $3;
|
|
|
|
-- name: UpdateTeamMemberPassword :exec
|
|
UPDATE team_members
|
|
SET
|
|
password = $1,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $2;
|
|
|
|
-- name: UpdateTeamMemberLastLogin :exec
|
|
UPDATE team_members
|
|
SET
|
|
last_login = CURRENT_TIMESTAMP
|
|
WHERE id = $1;
|
|
|
|
-- name: DeleteTeamMember :exec
|
|
DELETE FROM team_members
|
|
WHERE id = $1;
|
|
|
|
-- name: CheckTeamMemberEmailExists :one
|
|
SELECT EXISTS (
|
|
SELECT 1 FROM team_members WHERE email = $1
|
|
) AS email_exists;
|
|
|
|
-- name: GetTeamMembersByDepartment :many
|
|
SELECT
|
|
id,
|
|
first_name,
|
|
last_name,
|
|
email,
|
|
phone_number,
|
|
team_role,
|
|
department,
|
|
job_title,
|
|
employment_type,
|
|
profile_picture_url,
|
|
status,
|
|
created_at
|
|
FROM team_members
|
|
WHERE department = $1
|
|
AND status = 'active'
|
|
ORDER BY first_name, last_name;
|
|
|
|
-- name: GetTeamMembersByRole :many
|
|
SELECT
|
|
id,
|
|
first_name,
|
|
last_name,
|
|
email,
|
|
phone_number,
|
|
team_role,
|
|
department,
|
|
job_title,
|
|
employment_type,
|
|
profile_picture_url,
|
|
status,
|
|
created_at
|
|
FROM team_members
|
|
WHERE team_role = $1
|
|
AND status = 'active'
|
|
ORDER BY first_name, last_name;
|
|
|
|
-- name: CountTeamMembersByStatus :one
|
|
SELECT
|
|
COUNT(*) FILTER (WHERE status = 'active') AS active_count,
|
|
COUNT(*) FILTER (WHERE status = 'inactive') AS inactive_count,
|
|
COUNT(*) FILTER (WHERE status = 'suspended') AS suspended_count,
|
|
COUNT(*) FILTER (WHERE status = 'terminated') AS terminated_count,
|
|
COUNT(*) AS total_count
|
|
FROM team_members;
|
|
|
|
-- name: UpdateTeamMemberEmailVerified :exec
|
|
UPDATE team_members
|
|
SET
|
|
email_verified = $1,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $2;
|