df/bff/db/query/account.sql
itsscb d021f5db51 rf/modifies bff
ft/adds email_address and phone_number tables
ft/adds email and phone endpoints
ft/adds account_level query
2023-11-21 23:32:20 +01:00

101 lines
2.9 KiB
SQL

-- name: GetAccount :one
SELECT * FROM accounts
WHERE "id" = sqlc.arg(id);
-- name: GetAccountByEmail :one
SELECT * FROM accounts
WHERE "email" = sqlc.arg(email);
-- name: CreateAccount :one
INSERT INTO accounts (
"email",
"passwordhash",
"secret_key",
"verification_sent"
)
VALUES (
sqlc.arg(email),
sqlc.arg(passwordhash),
sqlc.arg(secret_key),
now()
)
RETURNING *;
-- name: UpdateAccount :one
UPDATE accounts
SET
"email" = COALESCE(sqlc.narg(email), "email"),
"passwordhash" = COALESCE(sqlc.narg(passwordhash), "passwordhash"),
"secret_key" = COALESCE(sqlc.narg(secret_key), "secret_key")
WHERE "id" = sqlc.arg(id)
RETURNING *;
-- name: ListAccounts :many
SELECT * FROM accounts
ORDER BY "email"
LIMIT $1
OFFSET $2;
-- name: ResendVerification :one
UPDATE accounts
SET
"secret_key" = sqlc.arg(secret_key),
"verification_sent" = now()
WHERE "id" = sqlc.arg(id)
RETURNING *;
-- name: VerifyAccountEmail :exec
UPDATE accounts
SET
"email_verified" = sqlc.arg(email_verified),
"email_verified_time" = sqlc.arg(email_verified_time),
"secret_key" = ''
WHERE "id" = sqlc.arg(id);
-- name: DeleteAccount :exec
DELETE FROM accounts
WHERE "id" = sqlc.arg(id);
-- name: GetAccountLevel :one
SELECT
accounts.id,
CASE
WHEN payments.account_id IS NOT NULL THEN 7
WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship = 'sole_heir' THEN
CASE
WHEN (
SELECT COUNT(*)
FROM documents
WHERE person_id = persons.id AND name IN ('death_certificate','id_card','notary_inheritance_certificate')
) = 3 THEN 6
END
WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship <> 'sole_heir' THEN
CASE
WHEN (
SELECT COUNT(*)
FROM documents
WHERE person_id = persons.id AND name IN ('death_certificate','id_card')
) = 2 THEN 6
END
WHEN (
SELECT COUNT(*)
FROM email_addresses
WHERE person_id = persons.id
) > 0 THEN 5
WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' THEN 4
WHEN persons.account_id IS NOT NULL THEN 3
WHEN account_info.account_id IS NOT NULL THEN 2
WHEN accounts.verified = true THEN 1
ELSE 0
END AS account_level
FROM
accounts
LEFT JOIN account_info ON accounts.id = account_info.account_id
LEFT JOIN persons ON accounts.id = persons.account_id
LEFT JOIN email_addresses ON persons.id = email_addresses.person_id
LEFT JOIN phone_numbers ON persons.id = phone_numbers.person_id
LEFT JOIN documents ON persons.id = documents.person_id
LEFT JOIN payments ON accounts.id = payments.account_id
WHERE accounts.id = sqlc.arg(account_id);