ft/adds email_address and phone_number tables ft/adds email and phone endpoints ft/adds account_level query
101 lines
2.9 KiB
SQL
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);
|