From 38170308bdfe79bab502e0775655e75ba08eea0f Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 13 May 2024 14:03:10 +0300 Subject: [PATCH 1/5] add new query for copy quiz on account from tmpl --- dal/db_query/queries.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 7fa963c..1586c97 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -656,3 +656,19 @@ SELECT id FROM quiz WHERE accountid = $1 AND status = 'start'; SELECT id FROM quiz WHERE accountid = $1; + +-- name: TemplateCopy :exec +WITH copied_quiz AS ( + INSERT INTO quiz (accountid, name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids) + SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids + FROM quiz + WHERE qid = $2 + RETURNING id +),update_status AS ( + UPDATE quiz SET status = 'stop' WHERE qid = $2 +) +INSERT INTO question (quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids) +SELECT cq.id AS quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids +FROM question q + JOIN quiz old ON q.quiz_id = old.id + JOIN copied_quiz cq ON old.qid = $2; From a3bce771c93f898c46ccc2c10f6c68291c7e95d5 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 13 May 2024 14:05:04 +0300 Subject: [PATCH 2/5] update sqlc gen --- dal/sqlcgen/db.go | 2 +- dal/sqlcgen/models.go | 2 +- dal/sqlcgen/queries.sql.go | 29 ++++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/dal/sqlcgen/db.go b/dal/sqlcgen/db.go index 6e5541c..7090fb4 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.25.0 +// sqlc v1.26.0 package sqlcgen diff --git a/dal/sqlcgen/models.go b/dal/sqlcgen/models.go index 5a42d12..75ae972 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.25.0 +// sqlc v1.26.0 package sqlcgen diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 006e529..441c0e8 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.25.0 +// sqlc v1.26.0 // source: queries.sql package sqlcgen @@ -1916,6 +1916,33 @@ func (q *Queries) SoftDeleteResultByID(ctx context.Context, id int64) error { return err } +const templateCopy = `-- name: TemplateCopy :exec +WITH copied_quiz AS ( + INSERT INTO quiz (accountid, name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids) + SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids + FROM quiz + WHERE qid = $2 + RETURNING id +),update_status AS ( + UPDATE quiz SET status = 'stop' WHERE qid = $2 +) +INSERT INTO question (quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids) +SELECT cq.id AS quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids +FROM question q + JOIN quiz old ON q.quiz_id = old.id + JOIN copied_quiz cq ON old.qid = $2 +` + +type TemplateCopyParams struct { + Accountid string `db:"accountid" json:"accountid"` + Qid uuid.NullUUID `db:"qid" json:"qid"` +} + +func (q *Queries) TemplateCopy(ctx context.Context, arg TemplateCopyParams) error { + _, err := q.db.ExecContext(ctx, templateCopy, arg.Accountid, arg.Qid) + return err +} + const updatePrivilege = `-- name: UpdatePrivilege :exec UPDATE privileges SET amount = $1, created_at = $2 WHERE account_id = $3 AND privilegeID = $4 ` From 28469944809632beeca9932ac977491015826eb0 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 13 May 2024 14:10:30 +0300 Subject: [PATCH 3/5] add new tmpl copy method to quiz repo --- repository/quiz/quiz.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/repository/quiz/quiz.go b/repository/quiz/quiz.go index 787bb52..ac27e9c 100644 --- a/repository/quiz/quiz.go +++ b/repository/quiz/quiz.go @@ -412,12 +412,12 @@ func (r *QuizRepository) UpdateQuiz(ctx context.Context, accountId string, recor params = append(params, record.GroupId, record.Version, record.Id, accountId) var placeholders []any - for i:=1;i<=len(params);i++ { + for i := 1; i <= len(params); i++ { placeholders = append(placeholders, i) } query = fmt.Sprintf(query, placeholders...) - + _, err := r.pool.ExecContext(ctx, query, params...) return err } @@ -631,3 +631,23 @@ func (r *QuizRepository) GetStartedQuizzesID(ctx context.Context, accountID stri return ids, nil } + +func (r *QuizRepository) TemplateCopy(ctx context.Context, accountID, qID string) error { + qUUID, err := uuid.Parse(qID) + if err != nil { + return err + } + + qNullUUID := uuid.NullUUID{UUID: qUUID, Valid: true} + + err = r.queries.TemplateCopy(ctx, sqlcgen.TemplateCopyParams{ + Accountid: accountID, + Qid: qNullUUID, + }) + + if err != nil { + return err + } + + return nil +} From 14acd815cbc2704494b4805ce9c1608cb599b202 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 13 May 2024 15:29:39 +0300 Subject: [PATCH 4/5] update query tmpl copy --- dal/db_query/queries.sql | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 1586c97..ae4ccb5 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -660,12 +660,10 @@ WHERE accountid = $1; -- name: TemplateCopy :exec WITH copied_quiz AS ( INSERT INTO quiz (accountid, name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids) - SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids + SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, 'stop' AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids FROM quiz WHERE qid = $2 RETURNING id -),update_status AS ( - UPDATE quiz SET status = 'stop' WHERE qid = $2 ) INSERT INTO question (quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids) SELECT cq.id AS quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids From 04773c7fce9c3da104c2456777e60bc44e7b01de Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 13 May 2024 15:30:37 +0300 Subject: [PATCH 5/5] update sqlc gen --- dal/sqlcgen/queries.sql.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 441c0e8..9d88c2a 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -1919,12 +1919,10 @@ func (q *Queries) SoftDeleteResultByID(ctx context.Context, id int64) error { const templateCopy = `-- name: TemplateCopy :exec WITH copied_quiz AS ( INSERT INTO quiz (accountid, name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids) - SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, status AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids + SELECT $1 AS accountid,name,fingerprinting,repeatable,note_prevented,mail_notifications,unique_answers,super,group_id, description, config, 'stop' AS status,limit_answers,due_to,time_of_passing,pausable,version,version_comment, parent_ids FROM quiz WHERE qid = $2 RETURNING id -),update_status AS ( - UPDATE quiz SET status = 'stop' WHERE qid = $2 ) INSERT INTO question (quiz_id, title, description, questiontype, required, deleted, page, content, version, parent_ids) SELECT cq.id AS quiz_id, q.title, q.description, q.questiontype, q.required, q.deleted, q.page, q.content, q.version, q.parent_ids