common/dal/db_query/queries.sql

686 lines
23 KiB
MySQL
Raw Normal View History

2024-02-19 16:33:15 +00:00
-- name: InsertQuiz :one
INSERT INTO quiz (accountid,
fingerprinting,
repeatable,
note_prevented,
mail_notifications,
unique_answers,
super,
group_id,
name,
description,
config,
status,
limit_answers,
due_to,
time_of_passing,
pausable,
parent_ids,
questions_count,
qid
)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19)
RETURNING id, created_at, updated_at, qid;
-- name: InsertQuestion :one
INSERT INTO question (
quiz_id,
title,
description,
questiontype,
required,
page,
content,
parent_ids,
updated_at
)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
RETURNING id, created_at, updated_at;
-- name: DeleteQuestion :one
UPDATE question SET deleted=true WHERE id=$1 RETURNING question.*;
-- name: DeleteQuizByID :one
UPDATE quiz SET deleted=true WHERE quiz.id=$1 AND accountid=$2 RETURNING quiz.*;
-- name: CopyQuestion :one
INSERT INTO question(
quiz_id, title, description, questiontype, required,
page, content, version, parent_ids
)
SELECT $1, title, description, questiontype, required,
page, content, version, parent_ids
FROM question WHERE question.id=$2
RETURNING question.id, quiz_id, created_at, updated_at;
-- name: DuplicateQuestion :one
INSERT INTO question(
quiz_id, title, description, questiontype, required,
page, content, version, parent_ids
)
SELECT quiz_id, title, description, questiontype, required,
page, content, version, parent_ids
FROM question WHERE question.id=$1
RETURNING question.id, quiz_id, created_at, updated_at;
-- name: MoveToHistory :one
INSERT INTO question(
quiz_id, title, description, questiontype, required,
page, content, version, parent_ids, deleted
)
SELECT quiz_id, title, description, questiontype, required,
page, content, version, parent_ids, true as deleted
FROM question WHERE question.id=$1
RETURNING question.id, quiz_id, parent_ids;
-- name: MoveToHistoryQuiz :one
INSERT INTO quiz(deleted,
accountid, archived,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,name,description,config,
status,limit_answers,due_to,time_of_passing,pausable,version,version_comment,parent_ids,questions_count,answers_count,average_time_passing, super, group_id
)
SELECT true as deleted, accountid, archived,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,name,description,config,
status,limit_answers,due_to,time_of_passing,pausable,version,version_comment,parent_ids,questions_count,answers_count,average_time_passing, super, group_id
FROM quiz WHERE quiz.id=$1 AND quiz.accountid=$2
RETURNING quiz.id, qid, parent_ids;
-- name: CopyQuiz :one
INSERT INTO quiz(
accountid, archived,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,name,description,config,
status,limit_answers,due_to,time_of_passing,pausable,version,version_comment,parent_ids,questions_count,answers_count,average_time_passing, super, group_id
)
SELECT accountid, archived,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,name,description,config,
status,limit_answers,due_to,time_of_passing,pausable,version,version_comment,parent_ids,questions_count,answers_count,average_time_passing, super, group_id
FROM quiz WHERE quiz.id=$1 AND quiz.accountId=$2
RETURNING id, qid,created_at, updated_at;
-- name: CopyQuizQuestions :exec
INSERT INTO question(
quiz_id, title, description, questiontype, required, page, content, version, parent_ids
)
SELECT $2, title, description, questiontype, required, page, content, version, parent_ids
FROM question WHERE question.quiz_id=$1 AND deleted=false;
-- name: GetQuizHistory :many
SELECT * FROM quiz WHERE quiz.id = $1 AND quiz.accountId = $4 OR quiz.id = ANY(
SELECT unnest(parent_ids) FROM quiz WHERE id = $1
) ORDER BY quiz.id DESC LIMIT $2 OFFSET $3;
-- name: GetQuestionHistory :many
SELECT * FROM question WHERE question.id = $1 OR question.id = ANY(
SELECT unnest(parent_ids) FROM question WHERE id = $1
) ORDER BY question.id DESC LIMIT $2 OFFSET $3;
-- name: ArchiveQuiz :exec
UPDATE quiz SET archived = true WHERE id=$1 AND accountId=$2;
-- name: GetPrivilegesByAccountID :many
SELECT id,privilegeID,privilege_name,amount, created_at FROM privileges WHERE account_id = $1;
-- name: GetAccountWithPrivileges :many
SELECT a.id, a.user_id, a.created_at, a.deleted,
2024-03-13 16:21:37 +00:00
coalesce(p.id,0) AS privilege_id,
coalesce(p.privilegeID,''),
coalesce(p.privilege_name,''),
coalesce(p.amount,0), coalesce(p.created_at,Now()) AS privilege_created_at
2024-02-19 16:33:15 +00:00
FROM account a
LEFT JOIN privileges AS p ON a.id = p.account_id
WHERE a.user_id = $1;
2024-03-13 16:21:37 +00:00
2024-02-19 16:33:15 +00:00
-- name: GetPrivilegesQuizAccount :many
SELECT
p.privilegeID,
p.privilege_name,
p.amount,
p.created_at,
a.id,
a.email,
qz.config
FROM
privileges AS p
INNER JOIN account AS a ON p.account_id = a.id
INNER JOIN quiz AS qz ON qz.accountid = a.user_id
WHERE
qz.id = $1;
-- name: CreateAccount :exec
INSERT INTO account (id, user_id, email, created_at, deleted) VALUES ($1, $2, $3, $4, $5);
-- name: DeletePrivilegeByAccID :exec
DELETE FROM privileges WHERE account_id = $1;
-- name: DeleteAccountById :exec
DELETE FROM account WHERE id = $1;
-- name: AccountPagination :many
SELECT a.id, a.user_id, a.created_at, a.deleted
FROM account a ORDER BY a.created_at DESC LIMIT $1 OFFSET $2;
-- name: UpdatePrivilege :exec
UPDATE privileges SET amount = $1, created_at = $2 WHERE account_id = $3 AND privilegeID = $4;
-- name: InsertPrivilege :exec
INSERT INTO privileges (privilegeID, account_id, privilege_name, amount, created_at) VALUES ($1, $2, $3, $4, $5);
-- name: GetQuizByQid :one
SELECT * FROM quiz
WHERE
deleted = false AND
archived = false AND
status = 'start' AND
qid = $1;
-- name: GetQuestionTitle :one
SELECT title, questiontype,page FROM question WHERE id = $1;
2024-02-19 16:33:15 +00:00
-- name: WorkerTimeoutProcess :exec
UPDATE quiz SET status = 'timeout' WHERE deleted = false AND due_to <> 0 AND due_to < EXTRACT(epoch FROM CURRENT_TIMESTAMP);
-- name: GetQuizById :one
SELECT * FROM quiz WHERE id=$1 AND accountId=$2;
-- name: GetPrivilegesByAccountIDWC :many
SELECT p.id,p.privilegeID,p.privilege_name,p.amount, p.created_at FROM privileges as p JOIN account as a on p.account_id = a.id WHERE a.user_id = $1;
-- name: WorkerStatProcess :exec
WITH answer_aggregates AS (
SELECT
quiz_id,
COUNT(DISTINCT session) AS unique_true_answers_count
FROM
answer
WHERE
result = TRUE
GROUP BY
quiz_id
),
question_aggregates AS (
SELECT
q.id AS quiz_id,
COUNT(qs.id) AS total_questions
FROM
quiz q
INNER JOIN
question qs ON q.id = qs.quiz_id
WHERE
q.deleted = false
AND q.archived = false
AND qs.deleted = false
GROUP BY
q.id
),
session_times_aggregates AS (
SELECT
quiz_id, COUNT(session) as sess,
AVG(extract(epoch FROM session_time)) AS average_session_time
FROM (
SELECT
quiz_id,
session,
(MAX(created_at) - MIN(created_at)) AS session_time
FROM
answer
GROUP BY
quiz_id,
session
) AS all_sessions
GROUP BY
quiz_id
)
UPDATE quiz q
SET
questions_count = COALESCE(qa.total_questions, 0),
answers_count = COALESCE(aa.unique_true_answers_count, 0),
average_time_passing = COALESCE(sta.average_session_time, 0),
sessions_count = COALESCE(sta.sess,0)
FROM
(SELECT * FROM quiz WHERE deleted = FALSE AND archived = FALSE) q_sub
LEFT JOIN answer_aggregates aa ON q_sub.id = aa.quiz_id
LEFT JOIN question_aggregates qa ON q_sub.id = qa.quiz_id
LEFT JOIN session_times_aggregates sta ON q_sub.id = sta.quiz_id
WHERE
q.id = q_sub.id;
-- name: UpdatePrivilegeAmount :exec
UPDATE privileges SET amount = $1 WHERE id = $2;
-- name: GetAccAndPrivilegeByEmail :one
SELECT
a.id,
a.user_id,
a.email,
a.created_at,
2024-03-13 16:21:37 +00:00
COALESCE(p.ID,0),
coalesce(p.privilegeid,''),
coalesce(p.amount,0),
coalesce(p.created_at,Now())
2024-02-19 16:33:15 +00:00
FROM
account AS a
LEFT JOIN privileges AS p ON a.id = p.account_id
WHERE
a.user_id = $1;
-- name: DeletePrivilegeByID :exec
DELETE FROM privileges WHERE id = $1;
-- name: GetQuizConfig :one
SELECT config, accountid FROM quiz WHERE id = $1 AND deleted = false;
-- name: GetExpiredPrivilege :many
SELECT id, privilegeID, privilege_name, amount, created_at
FROM privileges
WHERE created_at + amount * interval '1 day' < NOW()
AND privilegeid = $1;
-- name: CheckAndAddDefault :exec
UPDATE privileges
SET amount = $1, created_at = NOW()
WHERE privilege_name = $2
AND (amount < $3 OR created_at <= NOW() - INTERVAL '1 month');
-- name: GetAllAnswersByQuizID :many
2024-03-28 10:35:38 +00:00
SELECT DISTINCT ON (a.question_id)
2024-04-11 16:26:02 +00:00
a.content, a.created_at, a.question_id, a.id, q.questiontype::Text as questiontype, quiz.qid
2024-03-28 10:35:38 +00:00
FROM
answer a
JOIN
question q ON a.question_id = q.id
JOIN
quiz ON q.quiz_id = quiz.id
WHERE
a.session = $1 AND a.start = false AND a.deleted = false
ORDER BY
a.question_id ASC, a.created_at DESC;
2024-02-19 16:33:15 +00:00
-- name: InsertAnswers :exec
INSERT INTO answer(
content,
quiz_id,
question_id,
fingerprint,
session,
2024-03-13 16:21:37 +00:00
result,
email,
device_type,
device,
os,
browser,
ip,
start
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13);
2024-02-19 16:33:15 +00:00
-- name: GetResultAnswers :many
SELECT DISTINCT on (question_id) id, content, quiz_id, question_id, fingerprint, session,created_at, result, new,deleted, device_type,device,os,browser,ip FROM answer WHERE session = (
SELECT session FROM answer WHERE answer.id = $1) ORDER BY question_id, created_at DESC;
2024-02-19 16:33:15 +00:00
-- name: GetQuestions :many
SELECT id, quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids, created_at, updated_at FROM question WHERE quiz_id = $1 AND deleted = FALSE ORDER BY page ASC;
2024-02-19 16:33:15 +00:00
-- name: SoftDeleteResultByID :exec
UPDATE answer SET deleted = TRUE WHERE id = $1 AND deleted = FALSE;
-- name: CheckResultsOwner :many
SELECT a.id
FROM answer a
JOIN quiz q ON a.quiz_id = q.id
WHERE a.id = ANY($1::bigint[]) AND a.deleted = FALSE AND q.accountid = $2 AND a.start = false;
2024-02-19 16:33:15 +00:00
-- name: CheckResultOwner :one
2024-03-15 13:02:09 +00:00
SELECT q.accountid FROM answer a JOIN quiz q ON a.quiz_id = q.id WHERE a.id = $1 AND a.deleted = FALSE AND a.start = false;
2024-03-15 13:11:42 +00:00
-- name: DeviceStatistics :many
2024-03-15 13:02:09 +00:00
WITH DeviceStats AS (
SELECT
device_type,
COUNT(*) AS device_count
FROM
answer
WHERE
2024-03-15 13:11:42 +00:00
answer.quiz_id = $1
2024-03-15 13:02:09 +00:00
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
device_type
),
OSStats AS (
SELECT
os,
COUNT(*) AS os_count
FROM
answer
WHERE
2024-03-15 13:11:42 +00:00
answer.quiz_id = $1
2024-03-15 13:02:09 +00:00
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
os
),
BrowserStats AS (
SELECT
browser,
COUNT(*) AS browser_count
FROM
answer
WHERE
2024-03-15 13:11:42 +00:00
answer.quiz_id = $1
2024-03-15 13:02:09 +00:00
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
GROUP BY
browser
),
TotalStats AS (
SELECT
COUNT(*) AS total_count
FROM
answer
WHERE
2024-03-15 13:11:42 +00:00
answer.quiz_id = $1
2024-03-15 13:02:09 +00:00
AND created_at >= to_timestamp($2)
AND created_at <= to_timestamp($3)
AND result = TRUE
)
SELECT
2024-03-15 13:11:42 +00:00
DeviceStats.device_type,
2024-03-18 09:09:47 +00:00
CAST((DeviceStats.device_count::FLOAT / TotalStats.total_count) * 100.0 AS FLOAT8) AS device_percentage,
2024-03-15 13:11:42 +00:00
OSStats.os,
2024-03-18 09:09:47 +00:00
CAST((OSStats.os_count::FLOAT / TotalStats.total_count) * 100.0 AS FLOAT8) AS os_percentage,
2024-03-15 13:11:42 +00:00
BrowserStats.browser,
2024-03-18 09:09:47 +00:00
CAST((BrowserStats.browser_count::FLOAT / TotalStats.total_count) * 100.0 AS FLOAT8) AS browser_percentage
2024-03-15 13:02:09 +00:00
FROM
2024-03-16 19:46:28 +00:00
DeviceStats,
OSStats,
BrowserStats,
TotalStats;
2024-03-15 16:28:22 +00:00
-- name: GeneralStatistics :many
WITH TimeBucket AS (
SELECT
date_trunc('hour', timestamp_bucket)::TIMESTAMP AS time_interval_start,
COALESCE(LEAD(
date_trunc('hour', timestamp_bucket)::TIMESTAMP
) OVER (ORDER BY timestamp_bucket), NOW()) AS time_interval_end
2024-03-15 16:28:22 +00:00
FROM
generate_series(TO_TIMESTAMP($1), TO_TIMESTAMP($2), CASE
WHEN EXTRACT(epoch FROM TO_TIMESTAMP($2)) - EXTRACT(epoch FROM TO_TIMESTAMP($1)) > 172800 THEN '1 day'::interval
ELSE '1 hour'::interval
END) AS timestamp_bucket
2024-03-15 16:28:22 +00:00
),
OpenStats AS (
SELECT
2024-03-18 10:01:58 +00:00
tb.time_interval_start,
tb.time_interval_end,
2024-03-15 16:28:22 +00:00
COUNT(DISTINCT session) AS open_count
2024-03-18 10:01:58 +00:00
FROM
(
SELECT
session,
MIN(created_at) AS first_start_time
FROM
answer
WHERE
answer.quiz_id = $3
AND start = TRUE
AND created_at >= TO_TIMESTAMP($1)
AND created_at <= TO_TIMESTAMP($2)
2024-03-18 10:01:58 +00:00
GROUP BY
session
) AS first_starts
JOIN TimeBucket tb ON date_trunc('hour', first_starts.first_start_time) >= tb.time_interval_start
AND date_trunc('hour', first_starts.first_start_time) < tb.time_interval_end
2024-03-15 16:28:22 +00:00
GROUP BY
2024-03-18 10:01:58 +00:00
tb.time_interval_start, tb.time_interval_end
2024-03-15 16:28:22 +00:00
),
ResultStats AS (
SELECT
2024-03-18 10:01:58 +00:00
tb.time_interval_start,
tb.time_interval_end,
2024-03-18 11:12:10 +00:00
COUNT(DISTINCT session) AS true_result_count
2024-03-15 16:28:22 +00:00
FROM
2024-03-18 11:12:10 +00:00
(
SELECT
session,
MIN(created_at) AS first_result_time
FROM
answer
WHERE
answer.quiz_id = $3
AND result = TRUE
AND created_at >= TO_TIMESTAMP($1)
AND created_at <= TO_TIMESTAMP($2)
2024-03-18 11:12:10 +00:00
GROUP BY
session
) AS first_results
JOIN TimeBucket tb ON date_trunc('hour', first_results.first_result_time) >= tb.time_interval_start
AND date_trunc('hour', first_results.first_result_time) < tb.time_interval_end
2024-03-15 16:28:22 +00:00
GROUP BY
2024-03-18 10:01:58 +00:00
tb.time_interval_start, tb.time_interval_end
2024-03-15 16:28:22 +00:00
),
AvTimeStats AS (
SELECT
2024-03-18 10:01:58 +00:00
tb.time_interval_start,
tb.time_interval_end,
AVG(EXTRACT(epoch FROM (a.created_at)) - EXTRACT(epoch FROM (b.created_at))) AS avg_time
2024-03-15 16:28:22 +00:00
FROM
answer a
2024-03-18 10:01:58 +00:00
JOIN answer b ON a.session = b.session
JOIN TimeBucket tb ON date_trunc('hour', a.created_at) >= tb.time_interval_start
AND date_trunc('hour', a.created_at) < tb.time_interval_end
2024-03-15 16:28:22 +00:00
WHERE
a.quiz_id = $3
AND a.result = TRUE
AND b.start = TRUE
2024-03-18 10:01:58 +00:00
AND b.quiz_id = $3
AND a.created_at >= TO_TIMESTAMP($1)
AND a.created_at <= TO_TIMESTAMP($2)
AND b.created_at >= TO_TIMESTAMP($1)
AND b.created_at <= TO_TIMESTAMP($2)
2024-03-15 16:28:22 +00:00
GROUP BY
2024-03-18 10:01:58 +00:00
tb.time_interval_start, tb.time_interval_end
2024-03-15 16:28:22 +00:00
)
SELECT
2024-03-18 10:01:58 +00:00
tb.time_interval_start AS time_bucket,
2024-03-15 16:28:22 +00:00
COALESCE(os.open_count, 0) AS open_count,
2024-03-18 10:01:58 +00:00
COALESCE(rs.true_result_count, 0) AS true_result_count,
2024-03-15 16:28:22 +00:00
CASE
WHEN COALESCE(os.open_count, 0) > 0 THEN COALESCE(rs.true_result_count, 0)::float / COALESCE(os.open_count, 0)::float
2024-03-15 16:28:22 +00:00
ELSE 0
END::float AS conversion,
2024-03-18 10:01:58 +00:00
COALESCE(at.avg_time, 0) AS avg_time
2024-03-15 16:28:22 +00:00
FROM
TimeBucket tb
2024-03-15 17:02:01 +00:00
LEFT JOIN
2024-03-18 10:01:58 +00:00
OpenStats os ON tb.time_interval_start = os.time_interval_start
AND tb.time_interval_end = os.time_interval_end
2024-03-15 17:02:01 +00:00
LEFT JOIN
2024-03-18 10:01:58 +00:00
ResultStats rs ON tb.time_interval_start = rs.time_interval_start
AND tb.time_interval_end = rs.time_interval_end
2024-03-15 17:02:01 +00:00
LEFT JOIN
2024-03-18 10:01:58 +00:00
AvTimeStats at ON tb.time_interval_start = at.time_interval_start
AND tb.time_interval_end = at.time_interval_end;
2024-03-17 14:41:24 +00:00
-- name: QuestionsStatistics :many
WITH Funnel AS (
SELECT
2024-03-17 15:24:23 +00:00
COUNT(DISTINCT a.session) FILTER (WHERE a.start = FALSE) AS count_start_false,
COUNT(DISTINCT a.session) FILTER (WHERE a.start = TRUE) AS count_start_true,
COUNT(DISTINCT CASE WHEN a.result = FALSE AND qid_true_result IS NOT NULL THEN a.session END) AS count_f_result_with_t_question,
COUNT(DISTINCT a.session) FILTER (WHERE a.result = TRUE) AS count_t_result
2024-03-17 14:41:24 +00:00
FROM
answer a
LEFT JOIN (
SELECT DISTINCT a.session, q.id AS qid_true_result
FROM answer a
JOIN question q ON a.question_id = q.id
WHERE a.result = TRUE
) AS q ON a.session = q.session
WHERE
a.quiz_id = $1
AND a.created_at >= TO_TIMESTAMP($2)
AND a.created_at <= TO_TIMESTAMP($3)
),
Results AS (
2024-03-17 19:21:12 +00:00
SELECT
2024-04-10 14:31:20 +00:00
COALESCE(q.title, '') AS question_title,
2024-03-17 19:21:12 +00:00
COUNT(*) AS total_answers,
2024-03-17 19:25:41 +00:00
CAST(COUNT(*) * 100.0 / NULLIF(SUM(COUNT(*)) FILTER (WHERE a.result = TRUE) OVER (PARTITION BY a.quiz_id), 0) AS FLOAT8) AS percentage
2024-03-17 19:21:12 +00:00
FROM
question q
JOIN answer a ON q.id = a.question_id
WHERE
a.quiz_id = $1
AND a.created_at >= TO_TIMESTAMP($2)
AND a.created_at <= TO_TIMESTAMP($3)
2024-03-17 19:28:28 +00:00
AND a.result = TRUE
2024-03-17 19:21:12 +00:00
GROUP BY
2024-03-17 19:23:30 +00:00
q.title, a.quiz_id, a.result
2024-03-17 19:21:12 +00:00
HAVING
COUNT(*) >= 1
),
LastContent AS (
SELECT
a.question_id,
a.content AS last_answer_content
FROM
answer a
JOIN (
SELECT
session,
question_id,
MAX(created_at) AS last_created_at
FROM
answer
WHERE
quiz_id = $1
AND start != true
AND created_at >= TO_TIMESTAMP($2)
AND created_at <= TO_TIMESTAMP($3)
GROUP BY
question_id, session
) AS last_created_at_one_session ON a.session = last_created_at_one_session.session AND a.question_id = last_created_at_one_session.question_id AND a.created_at = last_created_at_one_session.last_created_at
),
2024-03-17 14:41:24 +00:00
Questions AS (
2024-03-17 19:08:19 +00:00
SELECT
q.title AS question_title,
2024-04-08 18:28:39 +00:00
q.page AS question_page,
lc.last_answer_content AS answer_content,
2024-03-17 19:08:19 +00:00
CAST(
COUNT(CASE WHEN a.result = FALSE THEN 1 END) * 100.0 / NULLIF(SUM(COUNT(CASE WHEN a.result = FALSE THEN 1 END)) OVER (PARTITION BY q.id), 0) AS FLOAT8
) AS percentage
FROM
question q
JOIN LastContent lc ON q.id = lc.question_id
2024-03-17 19:08:19 +00:00
JOIN answer a ON q.id = a.question_id
WHERE
a.quiz_id = $1
AND a.start != true
2024-03-17 19:08:19 +00:00
AND a.created_at >= TO_TIMESTAMP($2)
AND a.created_at <= TO_TIMESTAMP($3)
GROUP BY
q.id, q.title, lc.last_answer_content
2024-03-17 19:08:19 +00:00
HAVING
COUNT(*) >= 1
2024-03-17 18:10:10 +00:00
)
2024-03-17 14:41:24 +00:00
SELECT
Funnel.count_start_false,
Funnel.count_start_true,
Funnel.count_f_result_with_t_question,
Funnel.count_t_result,
2024-04-10 14:31:20 +00:00
COALESCE(Results.question_title, '') AS results_title,
COALESCE(Results.percentage, 0) AS results_percentage,
COALESCE(Questions.question_title, '') AS questions_title,
2024-04-08 18:28:39 +00:00
COALESCE(Questions.question_page, 0) AS questions_page,
2024-04-10 14:31:20 +00:00
COALESCE(Questions.answer_content, '') AS answer_content,
COALESCE(Questions.percentage, 0) AS questions_percentage
2024-03-17 14:41:24 +00:00
FROM
2024-04-10 14:31:20 +00:00
Funnel
LEFT JOIN Results ON true
LEFT JOIN Questions ON Questions.percentage >= 1;
2024-03-19 14:18:05 +00:00
2024-03-19 16:13:03 +00:00
-- name: QuizCopyQid :one
INSERT INTO quiz (
accountid, archived, fingerprinting, repeatable, note_prevented, mail_notifications, unique_answers, name, description, config,
status, limit_answers, due_to, time_of_passing, pausable, version, version_comment, parent_ids, questions_count, answers_count, average_time_passing, super, group_id
)
SELECT
2024-03-28 22:23:08 +00:00
$2, archived, fingerprinting, repeatable, note_prevented, mail_notifications, unique_answers, name, description, config,
2024-03-19 16:13:03 +00:00
status, limit_answers, due_to, time_of_passing, pausable, version, version_comment, parent_ids, questions_count, answers_count, average_time_passing, super, group_id
FROM
2024-03-28 22:23:08 +00:00
quiz as q
2024-03-19 16:13:03 +00:00
WHERE
2024-03-28 22:23:08 +00:00
q.qid = $1
2024-03-29 08:37:16 +00:00
RETURNING (select id from quiz where qid = $1),id, qid;
2024-03-19 16:13:03 +00:00
-- name: CopyQuestionQuizID :exec
INSERT INTO question (
quiz_id, title, description, questiontype, required,
page, content, version, parent_ids, created_at, updated_at
)
SELECT
$2, title, description, questiontype, required,
page, content, version, parent_ids, created_at, updated_at
FROM
question
WHERE
question.quiz_id = $1 AND deleted = false;
2024-03-22 11:31:37 +00:00
-- name: GetQidOwner :one
2024-03-28 22:23:08 +00:00
SELECT accountid FROM quiz where qid=$1;
2024-03-25 08:30:06 +00:00
-- name: AllServiceStatistics :one
WITH Registrations AS (
SELECT COUNT(*) AS registration_count
FROM account
WHERE created_at >= to_timestamp($1) AND created_at <= to_timestamp($2)
),
Quizes AS (
SELECT COUNT(*) AS quiz_count
FROM quiz
WHERE deleted = false AND created_at >= to_timestamp($1) AND created_at <= to_timestamp($2)
),
Results AS (
SELECT COUNT(*) AS result_count
FROM answer
WHERE result = true AND created_at >= to_timestamp($1) AND created_at <= to_timestamp($2)
)
SELECT
(SELECT registration_count FROM Registrations) AS registrations,
(SELECT quiz_count FROM Quizes) AS quizes,
2024-03-28 19:31:00 +00:00
(SELECT result_count FROM Results) AS results;
-- amo methods:
-- name: CreateAmoAccount :exec
INSERT INTO users (AccountID, AmoID, Name, Email, Role, "Group", Deleted, CreatedAt, Subdomain, AmoUserID, Country)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);
-- name: CreateWebHook :exec
INSERT INTO tokens (AccountID, RefreshToken, AccessToken, AuthCode, Expiration, CreatedAt)
VALUES ($1, $2, $3, $4, $5, $6);
-- name: WebhookUpdate :exec
UPDATE tokens SET AccessToken = $1, RefreshToken = $2, Expiration = $3, CreatedAt = $4 WHERE AccountID = $5;
-- name: GetAllTokens :many
SELECT * FROM tokens;
-- name: CheckExpired :many
SELECT * FROM tokens WHERE Expiration <= EXTRACT(EPOCH FROM NOW()) + (10 * 60);
-- name: WebhookDelete :exec
DELETE FROM tokens WHERE AccountID = $1;
-- name: SoftDeleteAccount :exec
UPDATE users SET Deleted = TRUE WHERE AccountID = $1;
2024-04-17 18:09:09 +00:00
-- name: GetCurrentAccount :one
SELECT * FROM users WHERE AccountID = $1;
-- name: CheckUsers :exec
UPDATE users SET Name = $1, "Group" = $2, Email = $3, Role = $4 WHERE AmoID = $5;
-- name: GetUsersWithPagination :many
2024-04-17 17:42:13 +00:00
SELECT *, COUNT(*) OVER() as total_count FROM users WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2;