From fad3296f337eaaef5f978c9cd9040d37760c5a89 Mon Sep 17 00:00:00 2001 From: skeris Date: Tue, 10 Sep 2024 01:26:00 +0300 Subject: [PATCH 01/26] impee --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/queries.sql.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 1406e9a..9a2bce5 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -523,7 +523,7 @@ WITH Funnel AS ( 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 + WHERE a.result = TRUE AND q.quiz_id = $1 ) AS q ON a.session = q.session WHERE a.quiz_id = $1 diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index cadc777..8e9d991 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -3176,7 +3176,7 @@ WITH Funnel AS ( 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 + WHERE a.result = TRUE AND q.quiz_id = $1 ) AS q ON a.session = q.session WHERE a.quiz_id = $1 From 58e924bf7e4fa67e981c7cb3e8f9a82249e75e9f Mon Sep 17 00:00:00 2001 From: skeris Date: Thu, 12 Sep 2024 17:24:42 +0300 Subject: [PATCH 02/26] 86ms --- dal/db_query/queries.sql | 119 +++++++++++++++---------------- dal/sqlcgen/queries.sql.go | 139 ++++++++++++++++++------------------- 2 files changed, 124 insertions(+), 134 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 9a2bce5..fac740a 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -511,87 +511,82 @@ FROM AND tb.time_interval_end = at.time_interval_end; -- name: QuestionsStatistics :many -WITH Funnel AS ( +WITH QuizAnswers AS ( +SELECT + session, start, result, question_id, created_at, content, quiz_id + FROM answer + WHERE answer.quiz_id = $1 AND created_at between TO_TIMESTAMP($2)::timestamp and TO_TIMESTAMP($3)::timestamp +), QuizQuestions AS (SELECT title, page, id from question where quiz_id = $1), Funnel AS ( SELECT - 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 + 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 FROM - answer a + QuizAnswers a LEFT JOIN ( SELECT DISTINCT a.session, q.id AS qid_true_result - FROM answer a + FROM QuizAnswers a JOIN question q ON a.question_id = q.id - WHERE a.result = TRUE AND q.quiz_id = $1 + 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 ( - SELECT - COALESCE(q.title, '') AS question_title, - COUNT(*) AS total_answers, - CAST(COUNT(*) * 100.0 / NULLIF(SUM(COUNT(*)) FILTER (WHERE a.result = TRUE) OVER (PARTITION BY a.quiz_id), 0) AS FLOAT8) AS percentage - 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) - AND a.result = TRUE - GROUP BY - q.title, a.quiz_id, a.result - HAVING - COUNT(*) >= 1 - ), + SELECT + COALESCE(q.title, '') AS question_title, + COUNT(*) AS total_answers, + CAST(COUNT(*) * 100.0 / NULLIF(SUM(COUNT(*)) FILTER (WHERE a.result = TRUE) OVER (PARTITION BY a.quiz_id), 0) AS FLOAT8) AS percentage + FROM + question q + LEFT JOIN QuizAnswers a ON q.id = a.question_id + WHERE + a.result = TRUE + GROUP BY + q.title, a.result, a.quiz_id + HAVING + COUNT(*) >= 1 + ), LastContent AS ( SELECT a.question_id, - a.content AS last_answer_content + a.content AS last_answer_content, + a.result, + a.start FROM - answer a - JOIN ( + QuizAnswers a + LEFT JOIN ( SELECT session, question_id, MAX(created_at) AS last_created_at FROM - answer + QuizAnswers WHERE - quiz_id = $1 - AND start != true - AND created_at >= TO_TIMESTAMP($2) - AND created_at <= TO_TIMESTAMP($3) + start != true 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 + 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 ), Questions AS ( - SELECT - q.title AS question_title, - q.page AS question_page, - lc.last_answer_content AS answer_content, - 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 - JOIN answer a ON q.id = a.question_id - WHERE - a.quiz_id = $1 - AND a.start != true - AND a.created_at >= TO_TIMESTAMP($2) - AND a.created_at <= TO_TIMESTAMP($3) - GROUP BY - q.id, q.title, lc.last_answer_content - HAVING - COUNT(*) >= 1 -) + SELECT + q.title AS question_title, + MAX(q.page) AS question_page, + lc.last_answer_content AS answer_content, + CAST( + COUNT(CASE WHEN lc.result = FALSE THEN 1 END) * 100.0 / NULLIF(SUM(COUNT(CASE WHEN lc.result = FALSE THEN 1 END)) OVER (PARTITION BY q.id), 0) AS FLOAT8 + ) AS percentage + FROM + LastContent lc + JOIN QuizQuestions q ON q.id = lc.question_id + WHERE + lc.start != true + GROUP BY + q.id, q.title, lc.last_answer_content + HAVING + COUNT(*) >= 1 + ) SELECT Funnel.count_start_false, Funnel.count_start_true, @@ -605,8 +600,8 @@ SELECT COALESCE(Questions.percentage, 0) AS questions_percentage FROM Funnel - LEFT JOIN Results ON true - LEFT JOIN Questions ON Questions.percentage >= 1; + LEFT JOIN Results ON true + LEFT JOIN Questions ON Questions.percentage >= 1; -- name: QuizCopyQid :one INSERT INTO quiz ( diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 8e9d991..a64fbc2 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -3164,87 +3164,82 @@ func (q *Queries) MoveToHistoryQuiz(ctx context.Context, arg MoveToHistoryQuizPa } const questionsStatistics = `-- name: QuestionsStatistics :many -WITH Funnel AS ( +WITH QuizAnswers AS ( +SELECT + session, start, result, question_id, created_at, content, quiz_id + FROM answer + WHERE answer.quiz_id = $1 AND created_at between TO_TIMESTAMP($2)::timestamp and TO_TIMESTAMP($3)::timestamp +), QuizQuestions AS (SELECT title, page, id from question where quiz_id = $1), Funnel AS ( SELECT - 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 + 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 FROM - answer a + QuizAnswers a LEFT JOIN ( SELECT DISTINCT a.session, q.id AS qid_true_result - FROM answer a + FROM QuizAnswers a JOIN question q ON a.question_id = q.id - WHERE a.result = TRUE AND q.quiz_id = $1 + 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 ( - SELECT - COALESCE(q.title, '') AS question_title, - COUNT(*) AS total_answers, - CAST(COUNT(*) * 100.0 / NULLIF(SUM(COUNT(*)) FILTER (WHERE a.result = TRUE) OVER (PARTITION BY a.quiz_id), 0) AS FLOAT8) AS percentage - 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) - AND a.result = TRUE - GROUP BY - q.title, a.quiz_id, a.result - HAVING - COUNT(*) >= 1 - ), + SELECT + COALESCE(q.title, '') AS question_title, + COUNT(*) AS total_answers, + CAST(COUNT(*) * 100.0 / NULLIF(SUM(COUNT(*)) FILTER (WHERE a.result = TRUE) OVER (PARTITION BY a.quiz_id), 0) AS FLOAT8) AS percentage + FROM + question q + LEFT JOIN QuizAnswers a ON q.id = a.question_id + WHERE + a.result = TRUE + GROUP BY + q.title, a.result, a.quiz_id + HAVING + COUNT(*) >= 1 + ), LastContent AS ( SELECT a.question_id, - a.content AS last_answer_content + a.content AS last_answer_content, + a.result, + a.start FROM - answer a - JOIN ( + QuizAnswers a + LEFT JOIN ( SELECT session, question_id, MAX(created_at) AS last_created_at FROM - answer + QuizAnswers WHERE - quiz_id = $1 - AND start != true - AND created_at >= TO_TIMESTAMP($2) - AND created_at <= TO_TIMESTAMP($3) + start != true 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 + 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 ), Questions AS ( - SELECT - q.title AS question_title, - q.page AS question_page, - lc.last_answer_content AS answer_content, - 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 - JOIN answer a ON q.id = a.question_id - WHERE - a.quiz_id = $1 - AND a.start != true - AND a.created_at >= TO_TIMESTAMP($2) - AND a.created_at <= TO_TIMESTAMP($3) - GROUP BY - q.id, q.title, lc.last_answer_content - HAVING - COUNT(*) >= 1 -) + SELECT + q.title AS question_title, + MAX(q.page) AS question_page, + lc.last_answer_content AS answer_content, + CAST( + COUNT(CASE WHEN lc.result = FALSE THEN 1 END) * 100.0 / NULLIF(SUM(COUNT(CASE WHEN lc.result = FALSE THEN 1 END)) OVER (PARTITION BY q.id), 0) AS FLOAT8 + ) AS percentage + FROM + LastContent lc + JOIN QuizQuestions q ON q.id = lc.question_id + WHERE + lc.start != true + GROUP BY + q.id, q.title, lc.last_answer_content + HAVING + COUNT(*) >= 1 + ) SELECT Funnel.count_start_false, Funnel.count_start_true, @@ -3258,8 +3253,8 @@ SELECT COALESCE(Questions.percentage, 0) AS questions_percentage FROM Funnel - LEFT JOIN Results ON true - LEFT JOIN Questions ON Questions.percentage >= 1 + LEFT JOIN Results ON true + LEFT JOIN Questions ON Questions.percentage >= 1 ` type QuestionsStatisticsParams struct { @@ -3269,16 +3264,16 @@ type QuestionsStatisticsParams struct { } type QuestionsStatisticsRow struct { - CountStartFalse int64 `db:"count_start_false" json:"count_start_false"` - CountStartTrue int64 `db:"count_start_true" json:"count_start_true"` - CountFResultWithTQuestion int64 `db:"count_f_result_with_t_question" json:"count_f_result_with_t_question"` - CountTResult int64 `db:"count_t_result" json:"count_t_result"` - ResultsTitle string `db:"results_title" json:"results_title"` - ResultsPercentage float64 `db:"results_percentage" json:"results_percentage"` - QuestionsTitle string `db:"questions_title" json:"questions_title"` - QuestionsPage int16 `db:"questions_page" json:"questions_page"` - AnswerContent string `db:"answer_content" json:"answer_content"` - QuestionsPercentage float64 `db:"questions_percentage" json:"questions_percentage"` + CountStartFalse int64 `db:"count_start_false" json:"count_start_false"` + CountStartTrue int64 `db:"count_start_true" json:"count_start_true"` + CountFResultWithTQuestion int64 `db:"count_f_result_with_t_question" json:"count_f_result_with_t_question"` + CountTResult int64 `db:"count_t_result" json:"count_t_result"` + ResultsTitle string `db:"results_title" json:"results_title"` + ResultsPercentage float64 `db:"results_percentage" json:"results_percentage"` + QuestionsTitle string `db:"questions_title" json:"questions_title"` + QuestionsPage interface{} `db:"questions_page" json:"questions_page"` + AnswerContent string `db:"answer_content" json:"answer_content"` + QuestionsPercentage float64 `db:"questions_percentage" json:"questions_percentage"` } func (q *Queries) QuestionsStatistics(ctx context.Context, arg QuestionsStatisticsParams) ([]QuestionsStatisticsRow, error) { From 1a6da6543cefa88fc38d5bf2c79adc78eb716ca3 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Thu, 24 Oct 2024 12:20:21 +0000 Subject: [PATCH 03/26] Update result.go --- repository/result/result.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/result/result.go b/repository/result/result.go index 52c1010..087de78 100644 --- a/repository/result/result.go +++ b/repository/result/result.go @@ -117,7 +117,7 @@ func (r *ResultRepository) UpdateAnswersStatus(ctx context.Context, accountID st func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, reqExport GetQuizResDeps) ([]model.Answer, error) { var results []model.Answer - mainQuery := `SELECT DISTINCT ON (a.question_id, a.session) + mainQuery := `SELECT DISTINCT ON (a.question_id, a.session, a.created_at, a.result) a.id, a.content, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted FROM answer a From 949befe8b0f85c364e0661d357f4dacc68e13cd8 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Thu, 24 Oct 2024 13:02:41 +0000 Subject: [PATCH 04/26] Update result.go --- repository/result/result.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/result/result.go b/repository/result/result.go index 087de78..2500655 100644 --- a/repository/result/result.go +++ b/repository/result/result.go @@ -122,7 +122,7 @@ func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, FROM answer a WHERE - a.quiz_id = $1 AND a.deleted = FALSE` + a.quiz_id = $1 AND a.content != 'start' AND a.deleted = FALSE` queryParams := []interface{}{quizID} From fe0e37ee9e08b8c67be9749c07155f3b9d6465ff Mon Sep 17 00:00:00 2001 From: skeris Date: Wed, 6 Nov 2024 20:41:33 +0300 Subject: [PATCH 05/26] if tag already exists set delete true --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/db.go | 2 +- dal/sqlcgen/models.go | 2 +- dal/sqlcgen/queries.sql.go | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index fac740a..f29dbc9 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -827,7 +827,7 @@ WITH user_data AS ( CURRENT_TIMESTAMP FROM new_tags nt JOIN user_data ud ON true - ON CONFLICT (amoID, accountID, Entity) DO NOTHING + ON CONFLICT (amoID, accountID, Entity) DO UPDATE SET Deleted = false RETURNING * ) SELECT nt.*,ud.AmoID diff --git a/dal/sqlcgen/db.go b/dal/sqlcgen/db.go index 7090fb4..2d00a87 100644 --- a/dal/sqlcgen/db.go +++ b/dal/sqlcgen/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.26.0 +// sqlc v1.27.0 package sqlcgen diff --git a/dal/sqlcgen/models.go b/dal/sqlcgen/models.go index 90a4ade..92a2af5 100644 --- a/dal/sqlcgen/models.go +++ b/dal/sqlcgen/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.26.0 +// sqlc v1.27.0 package sqlcgen diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index a64fbc2..1d9412c 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.26.0 +// sqlc v1.27.0 // source: queries.sql package sqlcgen @@ -489,7 +489,7 @@ WITH user_data AS ( CURRENT_TIMESTAMP FROM new_tags nt JOIN user_data ud ON true - ON CONFLICT (amoID, accountID, Entity) DO NOTHING + ON CONFLICT (amoID, accountID, Entity) DO UPDATE SET Deleted = false RETURNING id, amoid, accountid, entity, name, color, deleted, createdat ) SELECT nt.amoid, nt.entity, nt.name, nt.color,ud.AmoID From ca69d33bb28206cdf7deea8cc4db2dbeb8cf540f Mon Sep 17 00:00:00 2001 From: skeris Date: Wed, 6 Nov 2024 21:17:51 +0300 Subject: [PATCH 06/26] if field already exists set delete false --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/queries.sql.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index f29dbc9..148cec2 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -889,7 +889,7 @@ WITH user_data AS ( nf.createdAt FROM new_fields nf JOIN user_data ud ON true - ON CONFLICT (amoID, accountID, entity) DO NOTHING + ON CONFLICT (amoID, accountID, entity) DO UPDATE SET Deleted=false RETURNING * ) SELECT nf.*,ud.AmoID diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 1d9412c..c33fbd4 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -230,7 +230,7 @@ WITH user_data AS ( nf.createdAt FROM new_fields nf JOIN user_data ud ON true - ON CONFLICT (amoID, accountID, entity) DO NOTHING + ON CONFLICT (amoID, accountID, entity) DO UPDATE SET Deleted=false RETURNING id, amoid, code, accountid, name, entity, type, deleted, createdat ) SELECT nf.amoid, nf.code, nf.name, nf.entity, nf.type, nf.createdat,ud.AmoID From e4272e6ac82225d0484745e7d58d69864ff91eb6 Mon Sep 17 00:00:00 2001 From: skeris Date: Wed, 27 Nov 2024 21:39:46 +0300 Subject: [PATCH 07/26] fix: multi answers from subquery --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/queries.sql.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 148cec2..a35c05d 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -970,7 +970,7 @@ SELECT a.quiz_id,a.id,a.result,a.question_id,a.content,a.session, FROM answer a2 WHERE a2.start = true AND a2.session = a.session LIMIT 1), '{}'::jsonb) AS utm -,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM usersAmo u WHERE u.AmoUserID = r.performerid AND u.deleted = false) AS performer_name,u.subdomain,u.accountid,u.driveurl +,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM usersAmo u WHERE u.AmoUserID = r.performerid AND u.amoid = r.accountid AND u.deleted = false) AS performer_name,u.subdomain,u.accountid,u.driveurl FROM answer a INNER JOIN quiz q ON a.quiz_id = q.id LEFT JOIN amoCRMStatuses s ON a.id = s.AnswerID diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index c33fbd4..33920e2 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -2777,7 +2777,7 @@ SELECT a.quiz_id,a.id,a.result,a.question_id,a.content,a.session, FROM answer a2 WHERE a2.start = true AND a2.session = a.session LIMIT 1), '{}'::jsonb) AS utm -,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM usersAmo u WHERE u.AmoUserID = r.performerid AND u.deleted = false) AS performer_name,u.subdomain,u.accountid,u.driveurl +,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM usersAmo u WHERE u.AmoUserID = r.performerid AND u.amoid = r.accountid AND u.deleted = false) AS performer_name,u.subdomain,u.accountid,u.driveurl FROM answer a INNER JOIN quiz q ON a.quiz_id = q.id LEFT JOIN amoCRMStatuses s ON a.id = s.AnswerID From f982b5feed3feebc474c14582a5a6fc21adaab9d Mon Sep 17 00:00:00 2001 From: skeris Date: Fri, 29 Nov 2024 00:52:57 +0300 Subject: [PATCH 08/26] fix: allow patch deleted rules --- dal/db_query/queries.sql | 4 ++-- dal/sqlcgen/queries.sql.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index a35c05d..efff5b8 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -945,8 +945,8 @@ SELECT u.AmoID AS AccountID,$1 AS QuizID,$2 AS PerformerID,$3 AS PipelineID, -- name: ChangeQuizSettings :one UPDATE rules -SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5 -WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $6 AND accountsAmo.Deleted = false) AND QuizID = $7 AND Deleted = false +SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5, Deleted = false +WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $6 AND accountsAmo.Deleted = false) AND QuizID = $7 RETURNING id; -- name: GetQuestionListByIDs :many diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 33920e2..86af8ed 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -142,8 +142,8 @@ func (q *Queries) ArchiveQuiz(ctx context.Context, arg ArchiveQuizParams) error const changeQuizSettings = `-- name: ChangeQuizSettings :one UPDATE rules -SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5 -WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $6 AND accountsAmo.Deleted = false) AND QuizID = $7 AND Deleted = false +SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5, Deleted = false +WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $6 AND accountsAmo.Deleted = false) AND QuizID = $7 RETURNING id ` From 7c545dd5f525d11394f9db0bc799283002018dbb Mon Sep 17 00:00:00 2001 From: skeris Date: Fri, 29 Nov 2024 01:22:25 +0300 Subject: [PATCH 09/26] add account id to getting quiz rule --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/queries.sql.go | 11 ++++++++--- repository/amo/amo.go | 7 +++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index efff5b8..905d922 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -935,7 +935,7 @@ WHERE NOT EXISTS ( SELECT * FROM tokens WHERE accountID = $1; -- name: GetQuizRule :one -SELECT * FROM rules WHERE QuizID = $1 AND Deleted = false; +SELECT * FROM rules WHERE QuizID = $1 AND AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $2 AND accountsAmo.Deleted = false) AND Deleted = false; -- name: SetQuizSettings :one INSERT INTO rules (AccountID, QuizID, PerformerID, PipelineID, StepID, FieldsRule,TagsToAdd) diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 86af8ed..1864f5d 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -2261,11 +2261,16 @@ func (q *Queries) GetQuizHistory(ctx context.Context, arg GetQuizHistoryParams) } const getQuizRule = `-- name: GetQuizRule :one -SELECT id, accountid, quizid, performerid, pipelineid, stepid, fieldsrule, deleted, createdat, tagstoadd FROM rules WHERE QuizID = $1 AND Deleted = false +SELECT id, accountid, quizid, performerid, pipelineid, stepid, fieldsrule, deleted, createdat, tagstoadd FROM rules WHERE QuizID = $1 AND AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $2 AND accountsAmo.Deleted = false) AND Deleted = false ` -func (q *Queries) GetQuizRule(ctx context.Context, quizid int32) (Rule, error) { - row := q.db.QueryRowContext(ctx, getQuizRule, quizid) +type GetQuizRuleParams struct { + Quizid int32 `db:"quizid" json:"quizid"` + Accountid string `db:"accountid" json:"accountid"` +} + +func (q *Queries) GetQuizRule(ctx context.Context, arg GetQuizRuleParams) (Rule, error) { + row := q.db.QueryRowContext(ctx, getQuizRule, arg.Quizid, arg.Accountid) var i Rule err := row.Scan( &i.ID, diff --git a/repository/amo/amo.go b/repository/amo/amo.go index 63e2e3d..20c33ca 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -828,8 +828,11 @@ func (r *AmoRepository) SetQuizSettings(ctx context.Context, request *model.Rule return nil } -func (r *AmoRepository) GettingQuizRules(ctx context.Context, quizID int) (*model.Rule, error) { - row, err := r.queries.GetQuizRule(ctx, int32(quizID)) +func (r *AmoRepository) GettingQuizRules(ctx context.Context, accountID string, quizID int) (*model.Rule, error) { + row, err := r.queries.GetQuizRule(ctx, sqlcgen.GetQuizRuleParams{ + Quizid: int32(quizID), + Accountid: accountID, + }) if err != nil { return nil, err } From 9994f2d4d43f8b82c58766c521400f5e454146e5 Mon Sep 17 00:00:00 2001 From: skeris Date: Sat, 8 Feb 2025 00:46:52 +0300 Subject: [PATCH 10/26] -- --- dal/dal.go | 18 ++-- go.mod | 44 +++++----- go.sum | 119 ++++++++------------------- middleware/middleware.go | 2 +- model/model.go | 2 +- repository/account/account.go | 6 +- repository/amo/amo.go | 6 +- repository/answer/answer.go | 4 +- repository/answer/worker_answer.go | 4 +- repository/question/question.go | 4 +- repository/quiz/quiz.go | 4 +- repository/result/result.go | 4 +- repository/statistics/statistics.go | 2 +- repository/workers/worker.go | 2 +- tests/integration/answerRepo_test.go | 6 +- utils/verifyPrivilege.go | 2 +- 16 files changed, 89 insertions(+), 140 deletions(-) diff --git a/dal/dal.go b/dal/dal.go index 106e537..c94cbb7 100644 --- a/dal/dal.go +++ b/dal/dal.go @@ -9,15 +9,15 @@ import ( _ "github.com/ClickHouse/clickhouse-go" _ "github.com/lib/pq" "github.com/minio/minio-go/v7" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/account" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/amo" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/answer" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/question" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/quiz" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/result" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/statistics" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/workers" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/repository/account" + "gitea.pena/SQuiz/common/repository/amo" + "gitea.pena/SQuiz/common/repository/answer" + "gitea.pena/SQuiz/common/repository/question" + "gitea.pena/SQuiz/common/repository/quiz" + "gitea.pena/SQuiz/common/repository/result" + "gitea.pena/SQuiz/common/repository/statistics" + "gitea.pena/SQuiz/common/repository/workers" "time" ) diff --git a/go.mod b/go.mod index 41af95d..1a6dba0 100644 --- a/go.mod +++ b/go.mod @@ -1,53 +1,49 @@ -module penahub.gitlab.yandexcloud.net/backend/quiz/common.git +module gitea.pena/SQuiz/common -go 1.21.4 +go 1.23.2 + +toolchain go1.23.6 require ( + gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 + gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 + github.com/ClickHouse/clickhouse-go v1.5.4 github.com/gofiber/fiber/v2 v2.52.0 github.com/golang-jwt/jwt/v5 v5.2.0 github.com/golang/protobuf v1.5.3 github.com/google/uuid v1.6.0 github.com/lib/pq v1.10.9 - github.com/minio/minio-go/v7 v7.0.69 - github.com/rs/xid v1.5.0 - github.com/stretchr/testify v1.8.4 + github.com/minio/minio-go/v7 v7.0.81 + github.com/rs/xid v1.6.0 + github.com/stretchr/testify v1.9.0 github.com/tealeg/xlsx v1.0.5 - github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf google.golang.org/protobuf v1.33.0 - penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d ) require ( - github.com/ClickHouse/clickhouse-go v1.5.4 // indirect github.com/andybalholm/brotli v1.0.5 // indirect github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/go-ini/ini v1.67.0 // indirect + github.com/goccy/go-json v0.10.3 // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.6 // indirect - github.com/klauspost/cpuid/v2 v2.2.6 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.51.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.20.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/text v0.14.0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + go.uber.org/multierr v1.10.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 5bcd421..23ea860 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,12 @@ +gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 h1:EgBe8VcdPwmxbSzYLndncP+NmR73uYuXxkTeDlEttEE= +gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517/go.mod h1:91EuBCgcqgJ6mG36n2pds8sPwwfaJytLWOzY3h2YFKU= +gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 h1:tBkXWNIt8icmkMMnq8MA421RWkUy4OZh5P7C3q8uCu4= +gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9/go.mod h1:sanhSL8aEsfcq21P+eItYiAnKAre+B67nGJmDfk2cf0= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk= github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= @@ -12,7 +15,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= @@ -23,22 +30,20 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= -github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= -github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= +github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -52,104 +57,52 @@ github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.69 h1:l8AnsQFyY1xiwa/DaQskY4NXSLA2yrGsW5iD9nRPVS0= -github.com/minio/minio-go/v7 v7.0.69/go.mod h1:XAvOPJQ5Xlzk5o3o/ArO2NMbhSGkimC+bpW/ngRKDmQ= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA= +github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE= github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM= -github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf h1:TJJm6KcBssmbWzplF5lzixXl1RBAi/ViPs1GaSOkhwo= -github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf/go.mod h1:1FsorU3vnXO9xS9SrhUp8fRb/6H/Zfll0rPt1i4GWaA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d h1:gbaDt35HMDqOK84WYmDIlXMI7rstUcRqNttaT6Kx1do= -penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM= diff --git a/middleware/middleware.go b/middleware/middleware.go index 90dde8a..af2e8a8 100644 --- a/middleware/middleware.go +++ b/middleware/middleware.go @@ -2,7 +2,7 @@ package middleware import ( "github.com/gofiber/fiber/v2" - "github.com/themakers/hlog" + "gitea.pena/PenaSide/hlog" "os" "strings" "time" diff --git a/model/model.go b/model/model.go index 3882503..ac86848 100644 --- a/model/model.go +++ b/model/model.go @@ -2,7 +2,7 @@ package model import ( "github.com/golang/protobuf/proto" - "penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege" + "gitea.pena/PenaSide/common/privilege" "time" ) diff --git a/repository/account/account.go b/repository/account/account.go index 1cb97b6..6cb96a3 100644 --- a/repository/account/account.go +++ b/repository/account/account.go @@ -5,9 +5,9 @@ import ( "database/sql" "fmt" "github.com/google/uuid" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" + "gitea.pena/SQuiz/common/pj_errors" "strconv" ) diff --git a/repository/amo/amo.go b/repository/amo/amo.go index 20c33ca..f83d684 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" "encoding/json" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" + "gitea.pena/SQuiz/common/pj_errors" "time" ) diff --git a/repository/answer/answer.go b/repository/answer/answer.go index 893dbb9..77c1566 100644 --- a/repository/answer/answer.go +++ b/repository/answer/answer.go @@ -4,8 +4,8 @@ import ( "context" "database/sql" "encoding/json" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" ) type Deps struct { diff --git a/repository/answer/worker_answer.go b/repository/answer/worker_answer.go index 3bd1995..ebe758c 100644 --- a/repository/answer/worker_answer.go +++ b/repository/answer/worker_answer.go @@ -4,8 +4,8 @@ import ( "context" "database/sql" "fmt" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" ) type WorkerAnswerRepository struct { diff --git a/repository/question/question.go b/repository/question/question.go index 44f56a5..3567ef7 100644 --- a/repository/question/question.go +++ b/repository/question/question.go @@ -6,8 +6,8 @@ import ( "errors" "fmt" "github.com/lib/pq" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" "sort" "strings" "sync" diff --git a/repository/quiz/quiz.go b/repository/quiz/quiz.go index f4ce259..44cf9a4 100644 --- a/repository/quiz/quiz.go +++ b/repository/quiz/quiz.go @@ -8,8 +8,8 @@ import ( "fmt" "github.com/google/uuid" "github.com/lib/pq" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" "strings" "sync" diff --git a/repository/result/result.go b/repository/result/result.go index 2500655..05e7f22 100644 --- a/repository/result/result.go +++ b/repository/result/result.go @@ -4,8 +4,8 @@ import ( "context" "database/sql" "fmt" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" "strconv" "strings" "time" diff --git a/repository/statistics/statistics.go b/repository/statistics/statistics.go index 4ecda3f..83b086e 100644 --- a/repository/statistics/statistics.go +++ b/repository/statistics/statistics.go @@ -4,7 +4,7 @@ import ( "fmt" "context" "database/sql" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" + "gitea.pena/SQuiz/common/dal/sqlcgen" ) type Deps struct { diff --git a/repository/workers/worker.go b/repository/workers/worker.go index 79602c5..298ef88 100644 --- a/repository/workers/worker.go +++ b/repository/workers/worker.go @@ -2,7 +2,7 @@ package workers import ( "context" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" + "gitea.pena/SQuiz/common/dal/sqlcgen" ) type Deps struct { diff --git a/tests/integration/answerRepo_test.go b/tests/integration/answerRepo_test.go index 0577772..9baf656 100644 --- a/tests/integration/answerRepo_test.go +++ b/tests/integration/answerRepo_test.go @@ -5,9 +5,9 @@ import ( "database/sql" "fmt" "github.com/stretchr/testify/assert" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/answer" + "gitea.pena/SQuiz/common/dal/sqlcgen" + "gitea.pena/SQuiz/common/model" + "gitea.pena/SQuiz/common/repository/answer" "testing" "time" ) diff --git a/utils/verifyPrivilege.go b/utils/verifyPrivilege.go index 32b3968..6848abb 100644 --- a/utils/verifyPrivilege.go +++ b/utils/verifyPrivilege.go @@ -1,7 +1,7 @@ package utils import ( - "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" + "gitea.pena/SQuiz/common/model" "time" ) From 0360146b10ed1d27128b4f0ccaf542b5da24c90a Mon Sep 17 00:00:00 2001 From: skeris Date: Wed, 26 Feb 2025 17:16:29 +0300 Subject: [PATCH 11/26] fix export empty cells --- repository/result/result.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repository/result/result.go b/repository/result/result.go index 05e7f22..bbca93e 100644 --- a/repository/result/result.go +++ b/repository/result/result.go @@ -117,7 +117,7 @@ func (r *ResultRepository) UpdateAnswersStatus(ctx context.Context, accountID st func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, reqExport GetQuizResDeps) ([]model.Answer, error) { var results []model.Answer - mainQuery := `SELECT DISTINCT ON (a.question_id, a.session, a.created_at, a.result) + mainQuery := `SELECT DISTINCT ON (a.question_id, a.session, a.result) a.id, a.content, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted FROM answer a @@ -141,7 +141,7 @@ func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, WHERE a2.session = a.session AND a2.result = TRUE AND a2.quiz_id = a.quiz_id )` - mainQuery += ` ORDER BY a.session, a.question_id ASC, a.created_at DESC, a.result DESC` + mainQuery += ` ORDER BY a.session, a.question_id ASC, a.result DESC, a.created_at DESC` rows, err := r.pool.QueryContext(ctx, mainQuery, queryParams...) if err != nil { From 802ffdfd076608524607bcff15fc538abb43c7cc Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Fri, 4 Apr 2025 17:40:54 +0300 Subject: [PATCH 12/26] ai for imp --- dal/db_query/queries.sql | 14 ++++++++++-- dal/schema/000017_init.down.sql | 1 + dal/schema/000017_init.up.sql | 11 ++++++++++ model/model.go | 3 +++ repository/question/question.go | 39 +++++++++++++++++++++++++++++++++ sqlc.yaml | 2 ++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 dal/schema/000017_init.down.sql create mode 100644 dal/schema/000017_init.up.sql diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 905d922..bfd2edf 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -32,9 +32,10 @@ INSERT INTO question ( page, content, parent_ids, - updated_at + updated_at, + session ) -VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) +VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10) RETURNING id, created_at, updated_at; -- name: DeleteQuestion :one @@ -1052,3 +1053,12 @@ INSERT INTO amoContact (AccountID, AmoID, Field) VALUES ($1, $2, $3) RETURNING A -- name: UpdateAmoContact :exec UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2; + +-- name: GetQuestionsAI :many +WITH total_count AS (SELECT COUNT(*) AS count +FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE) +SELECT q.*, t.count FROM question q + CROSS JOIN total_count t +WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE +ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4; + diff --git a/dal/schema/000017_init.down.sql b/dal/schema/000017_init.down.sql new file mode 100644 index 0000000..1ceb041 --- /dev/null +++ b/dal/schema/000017_init.down.sql @@ -0,0 +1 @@ +ALTER table question DROP column session; diff --git a/dal/schema/000017_init.up.sql b/dal/schema/000017_init.up.sql new file mode 100644 index 0000000..ce187bd --- /dev/null +++ b/dal/schema/000017_init.up.sql @@ -0,0 +1,11 @@ +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_enum + WHERE enumlabel = 'ai' AND enumtypid = 'quiz_status'::regtype + ) THEN +ALTER TYPE quiz_status ADD VALUE 'ai'; +END IF; +END $$; + +ALTER TABLE question ADD column session varchar(20) NOT NULL DEFAULT ''; diff --git a/model/model.go b/model/model.go index ac86848..efcb951 100644 --- a/model/model.go +++ b/model/model.go @@ -13,6 +13,7 @@ const ( StatusStart = "start" StatusTimeout = "timeout" StatusOffLimit = "offlimit" + StatusAI = "ai" TypeVariant = "variant" TypeImages = "images" @@ -104,6 +105,8 @@ type Question struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` + + Session string `json:"session"` } // Answer record of question answer diff --git a/repository/question/question.go b/repository/question/question.go index 3567ef7..49b62d4 100644 --- a/repository/question/question.go +++ b/repository/question/question.go @@ -43,6 +43,7 @@ func (r *QuestionRepository) CreateQuestion(ctx context.Context, record *model.Q Content: sql.NullString{String: record.Content, Valid: true}, ParentIds: record.ParentIds, UpdatedAt: sql.NullTime{Time: time.Now(), Valid: true}, + Session: record.Session, } data, err := r.queries.InsertQuestion(ctx, params) @@ -485,3 +486,41 @@ func (r *QuestionRepository) GetQuestionListByIDs(ctx context.Context, ids []int return questions, nil } + +func (r *QuestionRepository) GetQuestionsAI(ctx context.Context, quizID int64, session string, limit, offset int32) ([]model.Question, uint64, error) { + rows, err := r.queries.GetQuestionsAI(ctx, sqlcgen.GetQuestionsAIParams{ + QuizID: quizID, + Session: session, + Limit: limit, + Offset: offset, + }) + if err != nil { + return nil, 0, err + } + + var questions []model.Question + var count uint64 + + for _, row := range rows { + count = uint64(row.Count) + + questions = append(questions, model.Question{ + Id: uint64(row.ID), + QuizId: uint64(row.QuizID), + Title: row.Title, + Description: row.Description.String, + Type: string(row.Questiontype.([]byte)), + Required: row.Required.Bool, + Deleted: row.Deleted.Bool, + Page: int(row.Page.Int16), + Content: row.Content.String, + Version: int(row.Version.Int16), + ParentIds: row.ParentIds, + CreatedAt: row.CreatedAt.Time, + UpdatedAt: row.UpdatedAt.Time, + Session: row.Session, + }) + } + + return questions, count, nil +} diff --git a/sqlc.yaml b/sqlc.yaml index 07bb059..031ec0e 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -34,6 +34,8 @@ packages: - "./dal/schema/000014_init.down.sql" - "./dal/schema/000016_init.up.sql" - "./dal/schema/000016_init.down.sql" + - "./dal/schema/000017_init.up.sql" + - "./dal/schema/000017_init.down.sql" engine: "postgresql" emit_json_tags: true emit_db_tags: true From 0d793990158655d7bf490b813f3152a9e24917cb Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 4 Apr 2025 17:49:14 +0300 Subject: [PATCH 13/26] sqlc gen --- dal/sqlcgen/db.go | 2 +- dal/sqlcgen/models.go | 3 +- dal/sqlcgen/queries.sql.go | 118 ++++++++++++++++++++++++++++++++++--- 3 files changed, 112 insertions(+), 11 deletions(-) diff --git a/dal/sqlcgen/db.go b/dal/sqlcgen/db.go index 2d00a87..b72fec4 100644 --- a/dal/sqlcgen/db.go +++ b/dal/sqlcgen/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.28.0 package sqlcgen diff --git a/dal/sqlcgen/models.go b/dal/sqlcgen/models.go index 92a2af5..ed96a38 100644 --- a/dal/sqlcgen/models.go +++ b/dal/sqlcgen/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.28.0 package sqlcgen @@ -114,6 +114,7 @@ type Question struct { ParentIds []int32 `db:"parent_ids" json:"parent_ids"` CreatedAt sql.NullTime `db:"created_at" json:"created_at"` UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"` + Session string `db:"session" json:"session"` } type Quiz struct { diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 1864f5d..2dc6fa4 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.28.0 // source: queries.sql package sqlcgen @@ -813,7 +813,7 @@ func (q *Queries) DeletePrivilegeByID(ctx context.Context, id int32) error { } const deleteQuestion = `-- name: DeleteQuestion :one -UPDATE question SET deleted=true WHERE id=$1 RETURNING question.id, question.quiz_id, question.title, question.description, question.questiontype, question.required, question.deleted, question.page, question.content, question.version, question.parent_ids, question.created_at, question.updated_at +UPDATE question SET deleted=true WHERE id=$1 RETURNING question.id, question.quiz_id, question.title, question.description, question.questiontype, question.required, question.deleted, question.page, question.content, question.version, question.parent_ids, question.created_at, question.updated_at, question.session ` func (q *Queries) DeleteQuestion(ctx context.Context, id int64) (Question, error) { @@ -833,6 +833,7 @@ func (q *Queries) DeleteQuestion(ctx context.Context, id int64) (Question, error pq.Array(&i.ParentIds), &i.CreatedAt, &i.UpdatedAt, + &i.Session, ) return i, err } @@ -1934,7 +1935,7 @@ func (q *Queries) GetQidOwner(ctx context.Context, qid uuid.NullUUID) (string, e } const getQuestionHistory = `-- name: GetQuestionHistory :many -SELECT id, quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids, created_at, updated_at FROM question WHERE question.id = $1 OR question.id = ANY( +SELECT id, quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids, created_at, updated_at, session 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 ` @@ -1968,6 +1969,7 @@ func (q *Queries) GetQuestionHistory(ctx context.Context, arg GetQuestionHistory pq.Array(&i.ParentIds), &i.CreatedAt, &i.UpdatedAt, + &i.Session, ); err != nil { return nil, err } @@ -1983,7 +1985,7 @@ func (q *Queries) GetQuestionHistory(ctx context.Context, arg GetQuestionHistory } const getQuestionListByIDs = `-- name: GetQuestionListByIDs :many -SELECT id, quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids, created_at, updated_at FROM question WHERE id = ANY($1::int[]) AND deleted = FALSE +SELECT id, quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids, created_at, updated_at, session FROM question WHERE id = ANY($1::int[]) AND deleted = FALSE ` func (q *Queries) GetQuestionListByIDs(ctx context.Context, dollar_1 []int32) ([]Question, error) { @@ -2009,6 +2011,7 @@ func (q *Queries) GetQuestionListByIDs(ctx context.Context, dollar_1 []int32) ([ pq.Array(&i.ParentIds), &i.CreatedAt, &i.UpdatedAt, + &i.Session, ); err != nil { return nil, err } @@ -2044,15 +2047,31 @@ const getQuestions = `-- 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 ` -func (q *Queries) GetQuestions(ctx context.Context, quizID int64) ([]Question, error) { +type GetQuestionsRow struct { + ID int64 `db:"id" json:"id"` + QuizID int64 `db:"quiz_id" json:"quiz_id"` + Title string `db:"title" json:"title"` + Description sql.NullString `db:"description" json:"description"` + Questiontype interface{} `db:"questiontype" json:"questiontype"` + Required sql.NullBool `db:"required" json:"required"` + Deleted sql.NullBool `db:"deleted" json:"deleted"` + Page sql.NullInt16 `db:"page" json:"page"` + Content sql.NullString `db:"content" json:"content"` + Version sql.NullInt16 `db:"version" json:"version"` + ParentIds []int32 `db:"parent_ids" json:"parent_ids"` + CreatedAt sql.NullTime `db:"created_at" json:"created_at"` + UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"` +} + +func (q *Queries) GetQuestions(ctx context.Context, quizID int64) ([]GetQuestionsRow, error) { rows, err := q.db.QueryContext(ctx, getQuestions, quizID) if err != nil { return nil, err } defer rows.Close() - var items []Question + var items []GetQuestionsRow for rows.Next() { - var i Question + var i GetQuestionsRow if err := rows.Scan( &i.ID, &i.QuizID, @@ -2081,6 +2100,84 @@ func (q *Queries) GetQuestions(ctx context.Context, quizID int64) ([]Question, e return items, nil } +const getQuestionsAI = `-- name: GetQuestionsAI :many +WITH total_count AS (SELECT COUNT(*) AS count +FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE) +SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session, t.count FROM question q + CROSS JOIN total_count t +WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE +ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4 +` + +type GetQuestionsAIParams struct { + QuizID int64 `db:"quiz_id" json:"quiz_id"` + Session string `db:"session" json:"session"` + Limit int32 `db:"limit" json:"limit"` + Offset int32 `db:"offset" json:"offset"` +} + +type GetQuestionsAIRow struct { + ID int64 `db:"id" json:"id"` + QuizID int64 `db:"quiz_id" json:"quiz_id"` + Title string `db:"title" json:"title"` + Description sql.NullString `db:"description" json:"description"` + Questiontype interface{} `db:"questiontype" json:"questiontype"` + Required sql.NullBool `db:"required" json:"required"` + Deleted sql.NullBool `db:"deleted" json:"deleted"` + Page sql.NullInt16 `db:"page" json:"page"` + Content sql.NullString `db:"content" json:"content"` + Version sql.NullInt16 `db:"version" json:"version"` + ParentIds []int32 `db:"parent_ids" json:"parent_ids"` + CreatedAt sql.NullTime `db:"created_at" json:"created_at"` + UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"` + Session string `db:"session" json:"session"` + Count int64 `db:"count" json:"count"` +} + +func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) ([]GetQuestionsAIRow, error) { + rows, err := q.db.QueryContext(ctx, getQuestionsAI, + arg.QuizID, + arg.Session, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetQuestionsAIRow + for rows.Next() { + var i GetQuestionsAIRow + if err := rows.Scan( + &i.ID, + &i.QuizID, + &i.Title, + &i.Description, + &i.Questiontype, + &i.Required, + &i.Deleted, + &i.Page, + &i.Content, + &i.Version, + pq.Array(&i.ParentIds), + &i.CreatedAt, + &i.UpdatedAt, + &i.Session, + &i.Count, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const getQuizById = `-- name: GetQuizById :one SELECT id, qid, accountid, deleted, archived, fingerprinting, repeatable, note_prevented, mail_notifications, unique_answers, super, group_id, name, description, config, status, limit_answers, due_to, time_of_passing, pausable, version, version_comment, parent_ids, created_at, updated_at, questions_count, answers_count, average_time_passing, sessions_count FROM quiz WHERE id=$1 AND accountId=$2 ` @@ -2988,9 +3085,10 @@ INSERT INTO question ( page, content, parent_ids, - updated_at + updated_at, + session ) -VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) +VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10) RETURNING id, created_at, updated_at ` @@ -3004,6 +3102,7 @@ type InsertQuestionParams struct { Content sql.NullString `db:"content" json:"content"` ParentIds []int32 `db:"parent_ids" json:"parent_ids"` UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"` + Session string `db:"session" json:"session"` } type InsertQuestionRow struct { @@ -3023,6 +3122,7 @@ func (q *Queries) InsertQuestion(ctx context.Context, arg InsertQuestionParams) arg.Content, pq.Array(arg.ParentIds), arg.UpdatedAt, + arg.Session, ) var i InsertQuestionRow err := row.Scan(&i.ID, &i.CreatedAt, &i.UpdatedAt) From 7a28f947e790781bcd8708a87df3d750b93bfcd5 Mon Sep 17 00:00:00 2001 From: skeris Date: Thu, 17 Apr 2025 00:30:49 +0300 Subject: [PATCH 14/26] add way to get ai quiz --- dal/db_query/queries.sql | 2 +- dal/sqlcgen/queries.sql.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index bfd2edf..9a13e26 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -168,7 +168,7 @@ SELECT * FROM quiz WHERE deleted = false AND archived = false AND - status = 'start' AND + (status = 'start' OR status = 'ai') AND qid = $1; -- name: GetQuestionTitle :one diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 2dc6fa4..ba76f7e 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -2229,7 +2229,7 @@ SELECT id, qid, accountid, deleted, archived, fingerprinting, repeatable, note_p WHERE deleted = false AND archived = false AND - status = 'start' AND + (status = 'start' OR status = 'ai') AND qid = $1 ` From c2702e984b371da6deec26b05c6427adf12f94ba Mon Sep 17 00:00:00 2001 From: skeris Date: Thu, 17 Apr 2025 01:32:44 +0300 Subject: [PATCH 15/26] add session to get quiestions list --- repository/question/question.go | 1 + repository/quiz/quiz.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/repository/question/question.go b/repository/question/question.go index 49b62d4..60d5d0d 100644 --- a/repository/question/question.go +++ b/repository/question/question.go @@ -160,6 +160,7 @@ func (r *QuestionRepository) GetQuestionList( &pIds, &piece.CreatedAt, &piece.UpdatedAt, + &piece.Session, ); err != nil { qerr = err return diff --git a/repository/quiz/quiz.go b/repository/quiz/quiz.go index 44cf9a4..eda5e07 100644 --- a/repository/quiz/quiz.go +++ b/repository/quiz/quiz.go @@ -262,7 +262,7 @@ SELECT * FROM quiz WHERE deleted = false AND archived = false AND - status = 'start' AND + (status = 'start' OR status = 'ai') AND qid = $1; `, qid) if err != nil { From 51689eeb92c9fcb44ddb6ee0e28e1e12aa7d38cf Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Fri, 25 Apr 2025 17:49:10 +0300 Subject: [PATCH 16/26] fix pagination methods --- dal/db_query/queries.sql | 52 +++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 9a13e26..cba76ba 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -731,48 +731,78 @@ SELECT * FROM usersamo WHERE amoid = $1 AND deleted = false; WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT u.*, COUNT(*) OVER() as total_count +SELECT u.* FROM usersAmo u JOIN user_data a ON u.AmoID = a.AmoID WHERE u.Deleted = false ORDER BY u.ID OFFSET ($2 - 1) * $3 LIMIT $3; +-- name: GetUsersCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM usersAmo u JOIN user_data a ON u.AmoID = a.AmoID WHERE u.Deleted = false; + -- name: GetTagsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT t.*, COUNT(*) OVER() as total_count +SELECT t.* FROM tags t JOIN user_data u ON t.AccountID = u.AmoID WHERE t.Deleted = false ORDER BY t.ID OFFSET ($2 - 1) * $3 LIMIT $3; +-- name: GetTagsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM tags t JOIN user_data u ON t.AccountID = u.AmoID WHERE t.Deleted = false; + -- name: GetStepsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT s.*, COUNT(*) OVER() as total_count +SELECT s.* FROM steps s JOIN user_data u ON s.AccountID = u.AmoID -WHERE s.Deleted = false AND PipelineID = $4 +WHERE s.Deleted = false AND s.PipelineID = $4 ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3; +-- name: GetStepsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM steps s JOIN user_data u ON s.AccountID = u.AmoID WHERE s.Deleted = false AND s.PipelineID = $4; + -- name: GetPipelinesWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT p.*, COUNT(*) OVER() as total_count +SELECT p.* FROM pipelines p JOIN user_data u ON p.AccountID = u.AmoID WHERE p.Deleted = false ORDER BY p.ID OFFSET ($2 - 1) * $3 LIMIT $3; +-- name: GetPipelinesCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM pipelines p JOIN user_data u ON p.AccountID = u.AmoID WHERE p.Deleted = false; + -- name: GetFieldsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT f.*, COUNT(*) OVER() as total_count +SELECT f.* FROM fields f JOIN user_data u ON f.AccountID = u.AmoID WHERE f.Deleted = false ORDER BY f.ID OFFSET ($2 - 1) * $3 LIMIT $3; +-- name: GetFieldsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM fields f JOIN user_data u ON f.AccountID = u.AmoID WHERE f.Deleted = false; + -- name: UpdateTags :exec UPDATE tags AS t SET name = (update_data ->> 'Name')::varchar(512), @@ -1055,10 +1085,10 @@ INSERT INTO amoContact (AccountID, AmoID, Field) VALUES ($1, $2, $3) RETURNING A UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2; -- name: GetQuestionsAI :many -WITH total_count AS (SELECT COUNT(*) AS count -FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE) -SELECT q.*, t.count FROM question q - CROSS JOIN total_count t +SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session FROM question q WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE -ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4; +ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4 + +-- name: GetQuestionsAICount :one +SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE; From 1fdb13e16e833f0fc5557fbd0ebd89972c77422e Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 25 Apr 2025 17:56:20 +0300 Subject: [PATCH 17/26] sqlc gen --- dal/db_query/queries.sql | 4 +- dal/sqlcgen/queries.sql.go | 229 +++++++++++++++++++------------------ 2 files changed, 118 insertions(+), 115 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index cba76ba..cd55627 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -771,7 +771,7 @@ ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3; WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT COUNT(*) FROM steps s JOIN user_data u ON s.AccountID = u.AmoID WHERE s.Deleted = false AND s.PipelineID = $4; +SELECT COUNT(*) FROM steps s JOIN user_data u ON s.AccountID = u.AmoID WHERE s.Deleted = false AND s.PipelineID = $2; -- name: GetPipelinesWithPagination :many WITH user_data AS ( @@ -1087,7 +1087,7 @@ UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2; -- name: GetQuestionsAI :many SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session FROM question q WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE -ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4 +ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4; -- name: GetQuestionsAICount :one SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE; diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index ba76f7e..5ca3fc3 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -1605,11 +1605,25 @@ func (q *Queries) GetFieldByAmoID(ctx context.Context, amoid int32) (Field, erro return i, err } +const getFieldsCount = `-- name: GetFieldsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM fields f JOIN user_data u ON f.AccountID = u.AmoID WHERE f.Deleted = false +` + +func (q *Queries) GetFieldsCount(ctx context.Context, accountid string) (int64, error) { + row := q.db.QueryRowContext(ctx, getFieldsCount, accountid) + var count int64 + err := row.Scan(&count) + return count, err +} + const getFieldsWithPagination = `-- name: GetFieldsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT f.id, f.amoid, f.code, f.accountid, f.name, f.entity, f.type, f.deleted, f.createdat, COUNT(*) OVER() as total_count +SELECT f.id, f.amoid, f.code, f.accountid, f.name, f.entity, f.type, f.deleted, f.createdat FROM fields f JOIN user_data u ON f.AccountID = u.AmoID WHERE f.Deleted = false ORDER BY f.ID OFFSET ($2 - 1) * $3 LIMIT $3 @@ -1621,28 +1635,15 @@ type GetFieldsWithPaginationParams struct { Limit int32 `db:"limit" json:"limit"` } -type GetFieldsWithPaginationRow struct { - ID int64 `db:"id" json:"id"` - Amoid int32 `db:"amoid" json:"amoid"` - Code string `db:"code" json:"code"` - Accountid int32 `db:"accountid" json:"accountid"` - Name string `db:"name" json:"name"` - Entity interface{} `db:"entity" json:"entity"` - Type interface{} `db:"type" json:"type"` - Deleted bool `db:"deleted" json:"deleted"` - Createdat sql.NullTime `db:"createdat" json:"createdat"` - TotalCount int64 `db:"total_count" json:"total_count"` -} - -func (q *Queries) GetFieldsWithPagination(ctx context.Context, arg GetFieldsWithPaginationParams) ([]GetFieldsWithPaginationRow, error) { +func (q *Queries) GetFieldsWithPagination(ctx context.Context, arg GetFieldsWithPaginationParams) ([]Field, error) { rows, err := q.db.QueryContext(ctx, getFieldsWithPagination, arg.Accountid, arg.Column2, arg.Limit) if err != nil { return nil, err } defer rows.Close() - var items []GetFieldsWithPaginationRow + var items []Field for rows.Next() { - var i GetFieldsWithPaginationRow + var i Field if err := rows.Scan( &i.ID, &i.Amoid, @@ -1653,7 +1654,6 @@ func (q *Queries) GetFieldsWithPagination(ctx context.Context, arg GetFieldsWith &i.Type, &i.Deleted, &i.Createdat, - &i.TotalCount, ); err != nil { return nil, err } @@ -1724,11 +1724,25 @@ func (q *Queries) GetListStartQuiz(ctx context.Context, accountid string) ([]int return items, nil } +const getPipelinesCount = `-- name: GetPipelinesCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM pipelines p JOIN user_data u ON p.AccountID = u.AmoID WHERE p.Deleted = false +` + +func (q *Queries) GetPipelinesCount(ctx context.Context, accountid string) (int64, error) { + row := q.db.QueryRowContext(ctx, getPipelinesCount, accountid) + var count int64 + err := row.Scan(&count) + return count, err +} + const getPipelinesWithPagination = `-- name: GetPipelinesWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT p.id, p.amoid, p.accountid, p.name, p.isarchive, p.deleted, p.createdat, COUNT(*) OVER() as total_count +SELECT p.id, p.amoid, p.accountid, p.name, p.isarchive, p.deleted, p.createdat FROM pipelines p JOIN user_data u ON p.AccountID = u.AmoID WHERE p.Deleted = false ORDER BY p.ID OFFSET ($2 - 1) * $3 LIMIT $3 @@ -1740,26 +1754,15 @@ type GetPipelinesWithPaginationParams struct { Limit int32 `db:"limit" json:"limit"` } -type GetPipelinesWithPaginationRow struct { - ID int64 `db:"id" json:"id"` - Amoid int32 `db:"amoid" json:"amoid"` - Accountid int32 `db:"accountid" json:"accountid"` - Name string `db:"name" json:"name"` - Isarchive bool `db:"isarchive" json:"isarchive"` - Deleted bool `db:"deleted" json:"deleted"` - Createdat sql.NullTime `db:"createdat" json:"createdat"` - TotalCount int64 `db:"total_count" json:"total_count"` -} - -func (q *Queries) GetPipelinesWithPagination(ctx context.Context, arg GetPipelinesWithPaginationParams) ([]GetPipelinesWithPaginationRow, error) { +func (q *Queries) GetPipelinesWithPagination(ctx context.Context, arg GetPipelinesWithPaginationParams) ([]Pipeline, error) { rows, err := q.db.QueryContext(ctx, getPipelinesWithPagination, arg.Accountid, arg.Column2, arg.Limit) if err != nil { return nil, err } defer rows.Close() - var items []GetPipelinesWithPaginationRow + var items []Pipeline for rows.Next() { - var i GetPipelinesWithPaginationRow + var i Pipeline if err := rows.Scan( &i.ID, &i.Amoid, @@ -1768,7 +1771,6 @@ func (q *Queries) GetPipelinesWithPagination(ctx context.Context, arg GetPipelin &i.Isarchive, &i.Deleted, &i.Createdat, - &i.TotalCount, ); err != nil { return nil, err } @@ -2101,10 +2103,7 @@ func (q *Queries) GetQuestions(ctx context.Context, quizID int64) ([]GetQuestion } const getQuestionsAI = `-- name: GetQuestionsAI :many -WITH total_count AS (SELECT COUNT(*) AS count -FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE) -SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session, t.count FROM question q - CROSS JOIN total_count t +SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session FROM question q WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4 ` @@ -2116,25 +2115,7 @@ type GetQuestionsAIParams struct { Offset int32 `db:"offset" json:"offset"` } -type GetQuestionsAIRow struct { - ID int64 `db:"id" json:"id"` - QuizID int64 `db:"quiz_id" json:"quiz_id"` - Title string `db:"title" json:"title"` - Description sql.NullString `db:"description" json:"description"` - Questiontype interface{} `db:"questiontype" json:"questiontype"` - Required sql.NullBool `db:"required" json:"required"` - Deleted sql.NullBool `db:"deleted" json:"deleted"` - Page sql.NullInt16 `db:"page" json:"page"` - Content sql.NullString `db:"content" json:"content"` - Version sql.NullInt16 `db:"version" json:"version"` - ParentIds []int32 `db:"parent_ids" json:"parent_ids"` - CreatedAt sql.NullTime `db:"created_at" json:"created_at"` - UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"` - Session string `db:"session" json:"session"` - Count int64 `db:"count" json:"count"` -} - -func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) ([]GetQuestionsAIRow, error) { +func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) ([]Question, error) { rows, err := q.db.QueryContext(ctx, getQuestionsAI, arg.QuizID, arg.Session, @@ -2145,9 +2126,9 @@ func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) return nil, err } defer rows.Close() - var items []GetQuestionsAIRow + var items []Question for rows.Next() { - var i GetQuestionsAIRow + var i Question if err := rows.Scan( &i.ID, &i.QuizID, @@ -2163,7 +2144,6 @@ func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) &i.CreatedAt, &i.UpdatedAt, &i.Session, - &i.Count, ); err != nil { return nil, err } @@ -2178,6 +2158,22 @@ func (q *Queries) GetQuestionsAI(ctx context.Context, arg GetQuestionsAIParams) return items, nil } +const getQuestionsAICount = `-- name: GetQuestionsAICount :one +SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE +` + +type GetQuestionsAICountParams struct { + QuizID int64 `db:"quiz_id" json:"quiz_id"` + Session string `db:"session" json:"session"` +} + +func (q *Queries) GetQuestionsAICount(ctx context.Context, arg GetQuestionsAICountParams) (int64, error) { + row := q.db.QueryRowContext(ctx, getQuestionsAICount, arg.QuizID, arg.Session) + var count int64 + err := row.Scan(&count) + return count, err +} + const getQuizById = `-- name: GetQuizById :one SELECT id, qid, accountid, deleted, archived, fingerprinting, repeatable, note_prevented, mail_notifications, unique_answers, super, group_id, name, description, config, status, limit_answers, due_to, time_of_passing, pausable, version, version_comment, parent_ids, created_at, updated_at, questions_count, answers_count, average_time_passing, sessions_count FROM quiz WHERE id=$1 AND accountId=$2 ` @@ -2446,13 +2442,32 @@ func (q *Queries) GetResultAnswers(ctx context.Context, id int64) ([]GetResultAn return items, nil } +const getStepsCount = `-- name: GetStepsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM steps s JOIN user_data u ON s.AccountID = u.AmoID WHERE s.Deleted = false AND s.PipelineID = $2 +` + +type GetStepsCountParams struct { + Accountid string `db:"accountid" json:"accountid"` + Pipelineid int32 `db:"pipelineid" json:"pipelineid"` +} + +func (q *Queries) GetStepsCount(ctx context.Context, arg GetStepsCountParams) (int64, error) { + row := q.db.QueryRowContext(ctx, getStepsCount, arg.Accountid, arg.Pipelineid) + var count int64 + err := row.Scan(&count) + return count, err +} + const getStepsWithPagination = `-- name: GetStepsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT s.id, s.amoid, s.pipelineid, s.accountid, s.name, s.color, s.deleted, s.createdat, COUNT(*) OVER() as total_count +SELECT s.id, s.amoid, s.pipelineid, s.accountid, s.name, s.color, s.deleted, s.createdat FROM steps s JOIN user_data u ON s.AccountID = u.AmoID -WHERE s.Deleted = false AND PipelineID = $4 +WHERE s.Deleted = false AND s.PipelineID = $4 ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3 ` @@ -2463,19 +2478,7 @@ type GetStepsWithPaginationParams struct { Pipelineid int32 `db:"pipelineid" json:"pipelineid"` } -type GetStepsWithPaginationRow struct { - ID int64 `db:"id" json:"id"` - Amoid int32 `db:"amoid" json:"amoid"` - Pipelineid int32 `db:"pipelineid" json:"pipelineid"` - Accountid int32 `db:"accountid" json:"accountid"` - Name string `db:"name" json:"name"` - Color string `db:"color" json:"color"` - Deleted bool `db:"deleted" json:"deleted"` - Createdat sql.NullTime `db:"createdat" json:"createdat"` - TotalCount int64 `db:"total_count" json:"total_count"` -} - -func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPaginationParams) ([]GetStepsWithPaginationRow, error) { +func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPaginationParams) ([]Step, error) { rows, err := q.db.QueryContext(ctx, getStepsWithPagination, arg.Accountid, arg.Column2, @@ -2486,9 +2489,9 @@ func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPa return nil, err } defer rows.Close() - var items []GetStepsWithPaginationRow + var items []Step for rows.Next() { - var i GetStepsWithPaginationRow + var i Step if err := rows.Scan( &i.ID, &i.Amoid, @@ -2498,7 +2501,6 @@ func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPa &i.Color, &i.Deleted, &i.Createdat, - &i.TotalCount, ); err != nil { return nil, err } @@ -2513,11 +2515,25 @@ func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPa return items, nil } +const getTagsCount = `-- name: GetTagsCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM tags t JOIN user_data u ON t.AccountID = u.AmoID WHERE t.Deleted = false +` + +func (q *Queries) GetTagsCount(ctx context.Context, accountid string) (int64, error) { + row := q.db.QueryRowContext(ctx, getTagsCount, accountid) + var count int64 + err := row.Scan(&count) + return count, err +} + const getTagsWithPagination = `-- name: GetTagsWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT t.id, t.amoid, t.accountid, t.entity, t.name, t.color, t.deleted, t.createdat, COUNT(*) OVER() as total_count +SELECT t.id, t.amoid, t.accountid, t.entity, t.name, t.color, t.deleted, t.createdat FROM tags t JOIN user_data u ON t.AccountID = u.AmoID WHERE t.Deleted = false ORDER BY t.ID OFFSET ($2 - 1) * $3 LIMIT $3 @@ -2529,27 +2545,15 @@ type GetTagsWithPaginationParams struct { Limit int32 `db:"limit" json:"limit"` } -type GetTagsWithPaginationRow struct { - ID int64 `db:"id" json:"id"` - Amoid int32 `db:"amoid" json:"amoid"` - Accountid int32 `db:"accountid" json:"accountid"` - Entity interface{} `db:"entity" json:"entity"` - Name string `db:"name" json:"name"` - Color string `db:"color" json:"color"` - Deleted bool `db:"deleted" json:"deleted"` - Createdat sql.NullTime `db:"createdat" json:"createdat"` - TotalCount int64 `db:"total_count" json:"total_count"` -} - -func (q *Queries) GetTagsWithPagination(ctx context.Context, arg GetTagsWithPaginationParams) ([]GetTagsWithPaginationRow, error) { +func (q *Queries) GetTagsWithPagination(ctx context.Context, arg GetTagsWithPaginationParams) ([]Tag, error) { rows, err := q.db.QueryContext(ctx, getTagsWithPagination, arg.Accountid, arg.Column2, arg.Limit) if err != nil { return nil, err } defer rows.Close() - var items []GetTagsWithPaginationRow + var items []Tag for rows.Next() { - var i GetTagsWithPaginationRow + var i Tag if err := rows.Scan( &i.ID, &i.Amoid, @@ -2559,7 +2563,6 @@ func (q *Queries) GetTagsWithPagination(ctx context.Context, arg GetTagsWithPagi &i.Color, &i.Deleted, &i.Createdat, - &i.TotalCount, ); err != nil { return nil, err } @@ -2809,11 +2812,25 @@ func (q *Queries) GetUserUsersByID(ctx context.Context, amoid int32) ([]Usersamo return items, nil } +const getUsersCount = `-- name: GetUsersCount :one +WITH user_data AS ( + SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false +) +SELECT COUNT(*) FROM usersAmo u JOIN user_data a ON u.AmoID = a.AmoID WHERE u.Deleted = false +` + +func (q *Queries) GetUsersCount(ctx context.Context, accountid string) (int64, error) { + row := q.db.QueryRowContext(ctx, getUsersCount, accountid) + var count int64 + err := row.Scan(&count) + return count, err +} + const getUsersWithPagination = `-- name: GetUsersWithPagination :many WITH user_data AS ( SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false ) -SELECT u.id, u.amoid, u.amouserid, u.name, u.email, u.role, u."Group", u.deleted, u.createdat, COUNT(*) OVER() as total_count +SELECT u.id, u.amoid, u.amouserid, u.name, u.email, u.role, u."Group", u.deleted, u.createdat FROM usersAmo u JOIN user_data a ON u.AmoID = a.AmoID WHERE u.Deleted = false @@ -2826,28 +2843,15 @@ type GetUsersWithPaginationParams struct { Limit int32 `db:"limit" json:"limit"` } -type GetUsersWithPaginationRow struct { - ID int64 `db:"id" json:"id"` - Amoid int32 `db:"amoid" json:"amoid"` - Amouserid int32 `db:"amouserid" json:"amouserid"` - Name string `db:"name" json:"name"` - Email string `db:"email" json:"email"` - Role int32 `db:"role" json:"role"` - Group int32 `db:"Group" json:"Group"` - Deleted bool `db:"deleted" json:"deleted"` - Createdat time.Time `db:"createdat" json:"createdat"` - TotalCount int64 `db:"total_count" json:"total_count"` -} - -func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPaginationParams) ([]GetUsersWithPaginationRow, error) { +func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPaginationParams) ([]Usersamo, error) { rows, err := q.db.QueryContext(ctx, getUsersWithPagination, arg.Accountid, arg.Column2, arg.Limit) if err != nil { return nil, err } defer rows.Close() - var items []GetUsersWithPaginationRow + var items []Usersamo for rows.Next() { - var i GetUsersWithPaginationRow + var i Usersamo if err := rows.Scan( &i.ID, &i.Amoid, @@ -2858,7 +2862,6 @@ func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPa &i.Group, &i.Deleted, &i.Createdat, - &i.TotalCount, ); err != nil { return nil, err } From 7f57d8c289d7776bc7b4f09a1b36f541329837b6 Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Fri, 25 Apr 2025 18:05:36 +0300 Subject: [PATCH 18/26] fix pagination methods in repo amo and GetQuestionsAI --- repository/amo/amo.go | 37 ++++++++++++++++++++++++++------- repository/question/question.go | 15 +++++++------ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/repository/amo/amo.go b/repository/amo/amo.go index f83d684..a095ebb 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -53,11 +53,15 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode Deleted: row.Deleted, CreatedAt: row.Createdat, } - count = row.TotalCount users = append(users, user) } + count, err = r.queries.GetUsersCount(ctx, accountID) + if err != nil { + return nil, err + } + resp := model.UserListResp{ Count: count, Items: users, @@ -299,7 +303,6 @@ func (r *AmoRepository) GetPipelinesWithPagination(ctx context.Context, req *mod var pipelines []model.Pipeline for _, row := range rows { - count = row.TotalCount pipeline := model.Pipeline{ ID: row.ID, Amoid: row.Amoid, @@ -311,6 +314,11 @@ func (r *AmoRepository) GetPipelinesWithPagination(ctx context.Context, req *mod pipelines = append(pipelines, pipeline) } + count, err = r.queries.GetPipelinesCount(ctx, accountID) + if err != nil { + return nil, err + } + resp := model.UserListPipelinesResp{ Count: count, Items: pipelines, @@ -400,7 +408,6 @@ func (r *AmoRepository) GetStepsWithPagination(ctx context.Context, req *model.P var steps []model.Step for _, row := range rows { - count = row.TotalCount step := model.Step{ ID: row.ID, Amoid: row.Amoid, @@ -413,6 +420,14 @@ func (r *AmoRepository) GetStepsWithPagination(ctx context.Context, req *model.P steps = append(steps, step) } + count, err = r.queries.GetStepsCount(ctx, sqlcgen.GetStepsCountParams{ + Accountid: accountID, + Pipelineid: pipelineID, + }) + if err != nil { + return nil, err + } + resp := model.UserListStepsResp{ Count: count, Items: steps, @@ -505,8 +520,6 @@ func (r *AmoRepository) GetTagsWithPagination(ctx context.Context, req *model.Pa var count int64 var tags []model.Tag for _, row := range rows { - count = row.TotalCount - var entity model.EntityType v := string(row.Entity.([]byte)) entity = model.EntityType(v) @@ -523,6 +536,11 @@ func (r *AmoRepository) GetTagsWithPagination(ctx context.Context, req *model.Pa tags = append(tags, tag) } + count, err = r.queries.GetTagsCount(ctx, accountID) + if err != nil { + return nil, err + } + resp := model.UserListTagsResp{ Count: count, Items: tags, @@ -625,8 +643,6 @@ func (r *AmoRepository) GetFieldsWithPagination(ctx context.Context, req *model. var fields []model.Field for _, row := range rows { - count = row.TotalCount - var entity model.EntityType v := string(row.Entity.([]byte)) entity = model.EntityType(v) @@ -649,6 +665,11 @@ func (r *AmoRepository) GetFieldsWithPagination(ctx context.Context, req *model. fields = append(fields, field) } + count, err = r.queries.GetFieldsCount(ctx, accountID) + if err != nil { + return nil, err + } + resp := model.UserListFieldsResp{ Count: count, Items: fields, @@ -830,7 +851,7 @@ func (r *AmoRepository) SetQuizSettings(ctx context.Context, request *model.Rule func (r *AmoRepository) GettingQuizRules(ctx context.Context, accountID string, quizID int) (*model.Rule, error) { row, err := r.queries.GetQuizRule(ctx, sqlcgen.GetQuizRuleParams{ - Quizid: int32(quizID), + Quizid: int32(quizID), Accountid: accountID, }) if err != nil { diff --git a/repository/question/question.go b/repository/question/question.go index 60d5d0d..cccaada 100644 --- a/repository/question/question.go +++ b/repository/question/question.go @@ -5,9 +5,9 @@ import ( "database/sql" "errors" "fmt" - "github.com/lib/pq" "gitea.pena/SQuiz/common/dal/sqlcgen" "gitea.pena/SQuiz/common/model" + "github.com/lib/pq" "sort" "strings" "sync" @@ -160,7 +160,7 @@ func (r *QuestionRepository) GetQuestionList( &pIds, &piece.CreatedAt, &piece.UpdatedAt, - &piece.Session, + &piece.Session, ); err != nil { qerr = err return @@ -500,11 +500,9 @@ func (r *QuestionRepository) GetQuestionsAI(ctx context.Context, quizID int64, s } var questions []model.Question - var count uint64 + var count int64 for _, row := range rows { - count = uint64(row.Count) - questions = append(questions, model.Question{ Id: uint64(row.ID), QuizId: uint64(row.QuizID), @@ -523,5 +521,10 @@ func (r *QuestionRepository) GetQuestionsAI(ctx context.Context, quizID int64, s }) } - return questions, count, nil + count, err = r.queries.GetQuestionsAICount(ctx, sqlcgen.GetQuestionsAICountParams{ + QuizID: quizID, + Session: session, + }) + + return questions, uint64(count), nil } From 467907d391680f628ed89e68c1af7e7472cec493 Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Fri, 25 Apr 2025 18:11:36 +0300 Subject: [PATCH 19/26] added low test --- tests/integration/questionRepo_test.go | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/integration/questionRepo_test.go diff --git a/tests/integration/questionRepo_test.go b/tests/integration/questionRepo_test.go new file mode 100644 index 0000000..20e660a --- /dev/null +++ b/tests/integration/questionRepo_test.go @@ -0,0 +1,30 @@ +package integration + +import ( + "context" + "fmt" + "gitea.pena/SQuiz/common/dal" + "testing" +) + +func Test_GetQuestionList(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + d, err := dal.New(ctx, "host=localhost port=35432 user=squiz password=Redalert2 dbname=squiz sslmode=disable", nil) + if err != nil { + t.Fatal(err) + } + + defer d.Close() + + limit := int32(10) + offset := int32(1000) + + list, count, err := d.QuestionRepo.GetQuestionsAI(ctx, 1308, "", limit, offset) + if err != nil { + t.Fatal(err) + } + fmt.Println(list) + fmt.Println(count) + +} From 606d1c5185c62db97b9236d7d89fab3d5538fdc2 Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Fri, 25 Apr 2025 18:49:10 +0300 Subject: [PATCH 20/26] update sorted for GetQuestionsAI --- dal/db_query/queries.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index cd55627..067d65b 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -1087,7 +1087,10 @@ UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2; -- name: GetQuestionsAI :many SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session FROM question q WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE -ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4; +ORDER BY (q.session != '') ASC, --без сессии первые потом с сессией + q.page, --по возрастанию страницы + q.created_at --по времени создания + LIMIT $3 OFFSET $4; -- name: GetQuestionsAICount :one SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE; From ad4095b7c130f7a81e6154d26ecb90a00d55dbec Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 25 Apr 2025 18:52:55 +0300 Subject: [PATCH 21/26] sqlc gen --- dal/sqlcgen/queries.sql.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 5ca3fc3..7728050 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -2105,7 +2105,10 @@ func (q *Queries) GetQuestions(ctx context.Context, quizID int64) ([]GetQuestion const getQuestionsAI = `-- name: GetQuestionsAI :many SELECT q.id, q.quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids, q.created_at, q.updated_at, q.session FROM question q WHERE q.quiz_id = $1 AND (q.session = $2 OR q.session = '') AND q.deleted = FALSE -ORDER BY q.page, q.created_at ASC LIMIT $3 OFFSET $4 +ORDER BY (q.session != '') ASC, --без сессии первые потом с сессией + q.page, --по возрастанию страницы + q.created_at --по времени создания + LIMIT $3 OFFSET $4 ` type GetQuestionsAIParams struct { From 8161c7fddb52fa7296bd037f3935f09d3ef00239 Mon Sep 17 00:00:00 2001 From: pasha1coil Date: Sat, 10 May 2025 11:51:07 +0300 Subject: [PATCH 22/26] added sql for gigachat --- dal/db_query/queries.sql | 8 ++++++ dal/schema/000018_init.down.sql | 1 + dal/schema/000018_init.up.sql | 9 ++++++ model/gigachat.go | 49 +++++++++++++++++++++++++++++++++ sqlc.yaml | 2 ++ 5 files changed, 69 insertions(+) create mode 100644 dal/schema/000018_init.down.sql create mode 100644 dal/schema/000018_init.up.sql create mode 100644 model/gigachat.go diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 067d65b..d8e548e 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -1095,3 +1095,11 @@ ORDER BY (q.session != '') ASC, --без сессии первые потом с -- name: GetQuestionsAICount :one SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE; +-- name: CreateQuizAudience :one +INSERT INTO gigachatAudience (QuizID, Sex, Age) VALUES ($1, $2, $3) RETURNING ID; + +-- name: GetQuizAudience :many +SELECT * FROM gigachatAudience WHERE QuizID = $1 AND Deleted = FALSE; + +-- name: DeleteQuizAudience :exec +UPDATE gigachatAudience set Deleted = TRUE WHERE QuizID = $1; diff --git a/dal/schema/000018_init.down.sql b/dal/schema/000018_init.down.sql new file mode 100644 index 0000000..b771edc --- /dev/null +++ b/dal/schema/000018_init.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS gigachatAudience; \ No newline at end of file diff --git a/dal/schema/000018_init.up.sql b/dal/schema/000018_init.up.sql new file mode 100644 index 0000000..57e39f9 --- /dev/null +++ b/dal/schema/000018_init.up.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS gigachatAudience ( + ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, + QuizID BIGINT NOT NULL, + Sex BOOLEAN NOT NULL, + Age VARCHAR(5) NOT NULL, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, + CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_quiz FOREIGN KEY (QuizID) REFERENCES quiz(ID) +); \ No newline at end of file diff --git a/model/gigachat.go b/model/gigachat.go new file mode 100644 index 0000000..adf26d8 --- /dev/null +++ b/model/gigachat.go @@ -0,0 +1,49 @@ +package model + +import ( + "errors" +) + +type GigaChatMessage struct { + Role string `json:"role"` + Content string `json:"content"` +} + +type GigaChatRequest struct { + Model string `json:"model"` + Stream bool `json:"stream"` + UpdateInterval int `json:"update_interval"` + Messages []GigaChatMessage `json:"messages"` +} + +type GigaChatResponse struct { + Choices []struct { + Message struct { + Role string `json:"role"` + Content string `json:"content"` + } `json:"message"` + } `json:"choices"` +} + +const CreatePrompt = `Ты маркетолог и копирайтер. Твоя задача — переформулировать маркетинговый вопрос так, чтобы он лучше подходил определённой целевой аудитории по полу и возрасту. +Ответ должен строго состоять из двух строк: + +{ + "title": "<переформулированный заголовок>", + "description": "<переформулированное описание>" +} + +Я напишу возраст, пол, заголовок и описание вопроса, а ты вернёшь только отформатированный результат.` + +var ReworkQuestionPrompt string = "%s %s пол.\n%s\n%s" + +var EmptyResponseErrorGigaChat = errors.New("empty response from GigaChat try again") + +type GigaChatAudience struct { + ID int64 `json:"id"` + QuizID int32 `json:"quiz_id"` + Sex bool `json:"sex"` // false - female, true - male + Age string `json:"age"` + Deleted bool `json:"deleted"` + CreatedAt int64 `json:"created_at"` +} diff --git a/sqlc.yaml b/sqlc.yaml index 031ec0e..c92df77 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -36,6 +36,8 @@ packages: - "./dal/schema/000016_init.down.sql" - "./dal/schema/000017_init.up.sql" - "./dal/schema/000017_init.down.sql" + - "./dal/schema/000018_init.up.sql" + - "./dal/schema/000018_init.down.sql" engine: "postgresql" emit_json_tags: true emit_db_tags: true From 3db6e9ead62e9e25b6201f7e0462eff9e06ca6a6 Mon Sep 17 00:00:00 2001 From: Pavel Date: Sat, 10 May 2025 11:55:26 +0300 Subject: [PATCH 23/26] sqlc gen --- dal/sqlcgen/models.go | 9 ++++++ dal/sqlcgen/queries.sql.go | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/dal/sqlcgen/models.go b/dal/sqlcgen/models.go index ed96a38..4cb05bc 100644 --- a/dal/sqlcgen/models.go +++ b/dal/sqlcgen/models.go @@ -81,6 +81,15 @@ type Field struct { Createdat sql.NullTime `db:"createdat" json:"createdat"` } +type Gigachataudience struct { + ID int64 `db:"id" json:"id"` + Quizid int64 `db:"quizid" json:"quizid"` + Sex bool `db:"sex" json:"sex"` + Age string `db:"age" json:"age"` + Deleted bool `db:"deleted" json:"deleted"` + Createdat sql.NullTime `db:"createdat" json:"createdat"` +} + type Pipeline struct { ID int64 `db:"id" json:"id"` Amoid int32 `db:"amoid" json:"amoid"` diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 7728050..a472065 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -716,6 +716,23 @@ func (q *Queries) CreateAmoAccount(ctx context.Context, arg CreateAmoAccountPara return err } +const createQuizAudience = `-- name: CreateQuizAudience :one +INSERT INTO gigachatAudience (QuizID, Sex, Age) VALUES ($1, $2, $3) RETURNING ID +` + +type CreateQuizAudienceParams struct { + Quizid int64 `db:"quizid" json:"quizid"` + Sex bool `db:"sex" json:"sex"` + Age string `db:"age" json:"age"` +} + +func (q *Queries) CreateQuizAudience(ctx context.Context, arg CreateQuizAudienceParams) (int64, error) { + row := q.db.QueryRowContext(ctx, createQuizAudience, arg.Quizid, arg.Sex, arg.Age) + var id int64 + err := row.Scan(&id) + return id, err +} + const createWebHook = `-- name: CreateWebHook :exec INSERT INTO tokens (AccountID, RefreshToken, AccessToken, AuthCode, Expiration, CreatedAt) VALUES ($1, $2, $3, $4, $5, $6) @@ -838,6 +855,15 @@ func (q *Queries) DeleteQuestion(ctx context.Context, id int64) (Question, error return i, err } +const deleteQuizAudience = `-- name: DeleteQuizAudience :exec +UPDATE gigachatAudience set Deleted = TRUE WHERE QuizID = $1 +` + +func (q *Queries) DeleteQuizAudience(ctx context.Context, quizid int64) error { + _, err := q.db.ExecContext(ctx, deleteQuizAudience, quizid) + return err +} + const deleteQuizByID = `-- name: DeleteQuizByID :one UPDATE quiz SET deleted=true WHERE quiz.id=$1 AND accountid=$2 RETURNING quiz.id, quiz.qid, quiz.accountid, quiz.deleted, quiz.archived, quiz.fingerprinting, quiz.repeatable, quiz.note_prevented, quiz.mail_notifications, quiz.unique_answers, quiz.super, quiz.group_id, quiz.name, quiz.description, quiz.config, quiz.status, quiz.limit_answers, quiz.due_to, quiz.time_of_passing, quiz.pausable, quiz.version, quiz.version_comment, quiz.parent_ids, quiz.created_at, quiz.updated_at, quiz.questions_count, quiz.answers_count, quiz.average_time_passing, quiz.sessions_count ` @@ -2177,6 +2203,40 @@ func (q *Queries) GetQuestionsAICount(ctx context.Context, arg GetQuestionsAICou return count, err } +const getQuizAudience = `-- name: GetQuizAudience :many +SELECT id, quizid, sex, age, deleted, createdat FROM gigachatAudience WHERE QuizID = $1 AND Deleted = FALSE +` + +func (q *Queries) GetQuizAudience(ctx context.Context, quizid int64) ([]Gigachataudience, error) { + rows, err := q.db.QueryContext(ctx, getQuizAudience, quizid) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Gigachataudience + for rows.Next() { + var i Gigachataudience + if err := rows.Scan( + &i.ID, + &i.Quizid, + &i.Sex, + &i.Age, + &i.Deleted, + &i.Createdat, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const getQuizById = `-- name: GetQuizById :one SELECT id, qid, accountid, deleted, archived, fingerprinting, repeatable, note_prevented, mail_notifications, unique_answers, super, group_id, name, description, config, status, limit_answers, due_to, time_of_passing, pausable, version, version_comment, parent_ids, created_at, updated_at, questions_count, answers_count, average_time_passing, sessions_count FROM quiz WHERE id=$1 AND accountId=$2 ` From dd71e1b6712d85fc42c2d5e59ec29157296ad178 Mon Sep 17 00:00:00 2001 From: Pasha Date: Sat, 10 May 2025 12:18:27 +0300 Subject: [PATCH 24/26] added repos method for new gigachat queries --- model/gigachat.go | 2 +- repository/quiz/quiz.go | 51 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/model/gigachat.go b/model/gigachat.go index adf26d8..4b93f2a 100644 --- a/model/gigachat.go +++ b/model/gigachat.go @@ -41,7 +41,7 @@ var EmptyResponseErrorGigaChat = errors.New("empty response from GigaChat try ag type GigaChatAudience struct { ID int64 `json:"id"` - QuizID int32 `json:"quiz_id"` + QuizID int64 `json:"quiz_id"` Sex bool `json:"sex"` // false - female, true - male Age string `json:"age"` Deleted bool `json:"deleted"` diff --git a/repository/quiz/quiz.go b/repository/quiz/quiz.go index eda5e07..9321015 100644 --- a/repository/quiz/quiz.go +++ b/repository/quiz/quiz.go @@ -6,10 +6,10 @@ import ( "encoding/json" "errors" "fmt" - "github.com/google/uuid" - "github.com/lib/pq" "gitea.pena/SQuiz/common/dal/sqlcgen" "gitea.pena/SQuiz/common/model" + "github.com/google/uuid" + "github.com/lib/pq" "strings" "sync" @@ -651,3 +651,50 @@ func (r *QuizRepository) TemplateCopy(ctx context.Context, accountID, qID string return quizID, nil } + +type DepsCreateQuizAudience struct { + QuizID int64 `json:"quiz_id"` + Sex bool `json:"sex"` // false - female, true - male + Age string `json:"age"` +} + +func (r *QuizRepository) CreateQuizAudience(ctx context.Context, audience DepsCreateQuizAudience) (int64, error) { + result, err := r.queries.CreateQuizAudience(ctx, sqlcgen.CreateQuizAudienceParams{ + Quizid: audience.QuizID, + Sex: audience.Sex, + Age: audience.Age, + }) + if err != nil { + return 0, err + } + return result, nil +} + +func (r *QuizRepository) GetQuizAudience(ctx context.Context, quizID int64) ([]model.GigaChatAudience, error) { + rows, err := r.queries.GetQuizAudience(ctx, quizID) + if err != nil { + return nil, err + } + + var audiences []model.GigaChatAudience + for _, row := range rows { + audiences = append(audiences, model.GigaChatAudience{ + ID: row.ID, + QuizID: row.ID, + Sex: row.Sex, + Age: row.Age, + Deleted: row.Deleted, + CreatedAt: row.Createdat.Time.Unix(), + }) + } + + return audiences, nil +} + +func (r *QuizRepository) DeleteQuizAudience(ctx context.Context, quizID int64) error { + err := r.queries.DeleteQuizAudience(ctx, quizID) + if err != nil { + return err + } + return nil +} From 22f0a36e865660020576ff281b1905a044432e93 Mon Sep 17 00:00:00 2001 From: Pasha Date: Sat, 10 May 2025 12:06:31 +0300 Subject: [PATCH 25/26] upd --- model/gigachat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/gigachat.go b/model/gigachat.go index 4b93f2a..adf26d8 100644 --- a/model/gigachat.go +++ b/model/gigachat.go @@ -41,7 +41,7 @@ var EmptyResponseErrorGigaChat = errors.New("empty response from GigaChat try ag type GigaChatAudience struct { ID int64 `json:"id"` - QuizID int64 `json:"quiz_id"` + QuizID int32 `json:"quiz_id"` Sex bool `json:"sex"` // false - female, true - male Age string `json:"age"` Deleted bool `json:"deleted"` From de3110750c7158d6b1acad9744315e392986aecb Mon Sep 17 00:00:00 2001 From: Pasha Date: Sat, 10 May 2025 12:21:56 +0300 Subject: [PATCH 26/26] - --- model/gigachat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/gigachat.go b/model/gigachat.go index adf26d8..4b93f2a 100644 --- a/model/gigachat.go +++ b/model/gigachat.go @@ -41,7 +41,7 @@ var EmptyResponseErrorGigaChat = errors.New("empty response from GigaChat try ag type GigaChatAudience struct { ID int64 `json:"id"` - QuizID int32 `json:"quiz_id"` + QuizID int64 `json:"quiz_id"` Sex bool `json:"sex"` // false - female, true - male Age string `json:"age"` Deleted bool `json:"deleted"`