Files
gochat/channels/shangwutong/db/queries/accounts.sql
T

152 lines
4.1 KiB
SQL

-- name: ListAccounts :many
SELECT * FROM accounts ORDER BY id;
-- name: ListRunnableAccounts :many
SELECT * FROM accounts
WHERE enabled = 1
AND desired_presence <> 'offline'
AND deleted_at IS NULL
ORDER BY id;
-- name: GetAccountByID :one
SELECT * FROM accounts WHERE id = ? LIMIT 1;
-- name: GetAccountByInboxID :one
SELECT * FROM accounts WHERE gochat_inbox_id = ? LIMIT 1;
-- name: CreateAccount :one
INSERT INTO accounts (
gochat_account_id, gochat_inbox_id, gochat_inbox_identifier,
config_version, session_id, username, password, enabled,
desired_presence, gochat_hmac_token, gochat_webhook_secret,
last_config_sync_at
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
RETURNING *;
-- name: UpdateAccountConfig :one
UPDATE accounts SET
gochat_account_id = sqlc.arg(gochat_account_id),
gochat_inbox_identifier = sqlc.arg(gochat_inbox_identifier),
config_version = sqlc.arg(config_version),
pending_password = sqlc.narg(pending_password),
credential_state = sqlc.arg(credential_state),
enabled = sqlc.arg(enabled),
desired_presence = sqlc.arg(desired_presence),
gochat_hmac_token = sqlc.arg(gochat_hmac_token),
gochat_webhook_secret = sqlc.arg(gochat_webhook_secret),
config_sync_status = 'pending',
last_config_sync_at = CURRENT_TIMESTAMP,
deleted_at = NULL,
updated_at = CURRENT_TIMESTAMP
WHERE gochat_inbox_id = sqlc.arg(gochat_inbox_id)
AND config_version < sqlc.arg(config_version)
RETURNING *;
-- name: ApplyAccountSession :one
UPDATE accounts SET
password = COALESCE(pending_password, password),
pending_password = NULL,
credential_state = 'applied',
applied_config_version = config_version,
config_sync_status = 'applied',
base_url = ?,
site_id = ?,
login_name = ?,
ma_token = ?,
actual_presence = ?,
connection_status = 'connected',
failure_count = 0,
last_error_code = NULL,
last_error_message = NULL,
last_login_at = CURRENT_TIMESTAMP,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?
RETURNING *;
-- name: UpdateAccountRuntimeError :exec
UPDATE accounts SET
connection_status = ?,
credential_state = ?,
failure_count = failure_count + 1,
last_error_code = ?,
last_error_message = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: RejectPendingCredential :exec
UPDATE accounts SET
credential_state = ?,
config_sync_status = 'rejected',
connection_status = ?,
failure_count = failure_count + 1,
last_error_code = ?,
last_error_message = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ? AND pending_password IS NOT NULL;
-- name: MarkAccountConfigApplied :exec
UPDATE accounts SET
applied_config_version = config_version,
config_sync_status = 'applied',
credential_state = CASE
WHEN pending_password IS NULL THEN 'applied'
ELSE credential_state
END,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: UpdateAccountPresence :exec
UPDATE accounts SET
actual_presence = ?,
connection_status = ?,
failure_count = 0,
last_error_code = NULL,
last_error_message = NULL,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: ClearAccountSession :exec
UPDATE accounts SET
ma_token = NULL,
actual_presence = 'offline',
connection_status = 'relogin_required',
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: StopAccountRuntime :exec
UPDATE accounts SET
actual_presence = 'offline',
connection_status = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: UpdateAccountCursor :exec
UPDATE accounts SET
maxwordid = ?,
maxotick = ?,
maxtmpid = ?,
last_heartbeat_at = CURRENT_TIMESTAMP,
connection_status = 'connected',
failure_count = 0,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: TouchAccountHeartbeat :exec
UPDATE accounts SET
last_heartbeat_at = CURRENT_TIMESTAMP,
connection_status = 'connected',
failure_count = 0,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?;
-- name: MarkAccountDeleted :exec
UPDATE accounts SET
enabled = 0,
desired_presence = 'offline',
actual_presence = 'offline',
connection_status = 'disabled',
config_sync_status = 'deleted',
deleted_at = CURRENT_TIMESTAMP,
updated_at = CURRENT_TIMESTAMP
WHERE gochat_inbox_id = ? AND deleted_at IS NULL;