diff --git a/models/quiz.v b/models/quiz.v index da0a18e..af0cfaa 100644 --- a/models/quiz.v +++ b/models/quiz.v @@ -16,5 +16,44 @@ pub mut: pub struct QuizConfig { pub mut: - have_root string @[json: 'haveRoot'] + have_root string @[json: 'haveRoot'] + form_contact FormContact @[json: 'formContact'] + result_info ResultInfo @[json: 'resultInfo'] +} + +pub struct FormContact { + pub mut: + title string @[json: 'title'] + desc string @[json: 'desc'] + fields FormFields @[json: 'fields'] + button string @[json: 'button'] +} + +pub struct FormFields { + pub mut: + name ContactField @[json: 'name'] + email ContactField @[json: 'email'] + phone ContactField @[json: 'phone'] + text ContactField @[json: 'text'] + address ContactField @[json: 'address'] +} + +pub struct ContactField { + pub mut: + text string @[json: 'text'] + inner_text string @[json: 'innerText'] + key string @[json: 'key'] + required bool @[json: 'required'] + used bool @[json: 'used'] +} + +pub struct ResultInfo { + pub mut: + when string @[json: 'when'] + share bool @[json: 'share'] + replay bool @[json: 'replay'] + theme string @[json: 'theme'] + reply string @[json: 'reply'] + repl_name string @[json: 'replname'] + show_result_form string @[json: 'showResultForm'] } \ No newline at end of file diff --git a/repository/repository.v b/repository/repository.v index 292313b..e8221e1 100644 --- a/repository/repository.v +++ b/repository/repository.v @@ -81,7 +81,7 @@ pub fn (mut r Repo) finish_state(id i64) ! { } } -pub fn (r Repo) get_state_by_tg_quiz_id(tg_id int,quiz_id i64)!models.RespondentState { +pub fn (mut r Repo) get_state_by_tg_quiz_id(tg_id int,quiz_id i64)!models.RespondentState { result := sql r.pg_db { select from models.RespondentState where quiz_id == quiz_id && telegram_id == tg_id && finish == false }or{ @@ -125,7 +125,7 @@ pub fn (mut r Repo) get_questions_by_quiz_id(quiz_id i64) ![]models.QuizQuestion return question } -pub fn (r Repo) get_all_results(id i64)![]models.QuizQuestion { +pub fn (mut r Repo) get_all_results(id i64)![]models.QuizQuestion { result := sql r.pg_db { select from models.QuizQuestion where quiz_id == id && question_type == models.question_type_result.str() && deleted ==false } or { @@ -137,7 +137,7 @@ pub fn (r Repo) get_all_results(id i64)![]models.QuizQuestion { // методы Quiz -pub fn (r Repo) get_quiz(quiz_id i64)!models.Quiz { +pub fn (mut r Repo) get_quiz(quiz_id i64)!models.Quiz { result := sql r.pg_db{ select from models.Quiz where id == quiz_id && deleted == false && archived == false }or{ diff --git a/tg_handle/tg.v b/tg_handle/tg.v index 7ad1178..ce68d35 100644 --- a/tg_handle/tg.v +++ b/tg_handle/tg.v @@ -15,6 +15,8 @@ pub struct TgBot { bot_id i64 liner bool quiz_id i64 + quiz_config models.QuizConfig + flag bool } // todo нужно наверное ограничить возврат пользователя на предыдущие вопросы, потому что храним только @@ -28,17 +30,13 @@ pub fn new_tg_bot(repo repository.Repo,bot_data models.TelegramIntegration) &TgB stop_ch: chan int{} bot_id: bot_data.id quiz_id: bot_data.quiz_id + flag: false } spawn b.start() return b } fn (mut b TgBot) start() { - bot_data := b.bot.get_me() - b.repo.update_bot_name(b.bot_id,bot_data.username)or{ - println('$err') - return - } mut last_offset :=0 for { select { @@ -66,6 +64,14 @@ fn (mut b TgBot) start() { } fn (mut b TgBot) start_handler(update vgram.Update) { + if !b.flag{ + b.add_settings()or{ + println('$err') + return + } + b.flag = true + } + session := utils.generate_signature(b.quiz_id.str(),update.message.from.id.str()) chat_id_str := update.message.from.id.str() // todo приветствие такое как дима писал надо @@ -76,20 +82,6 @@ fn (mut b TgBot) start_handler(update vgram.Update) { return } - quiz := b.repo.get_quiz(integration_data.quiz_id)or{ - b.bot.send_message(chat_id: chat_id_str, text: 'Ошибка при получении анных опроса') - return - } - - root := json.decode(models.QuizConfig, quiz.config) or { - b.bot.send_message(chat_id: chat_id_str, text: 'Ошибка при обработке контента опроса') - return - } - - if root.have_root == '' { - b.liner = true - } - questions := b.repo.get_questions_by_quiz_id(integration_data.quiz_id) or { b.bot.send_message(chat_id: chat_id_str, text: 'Ошибка при получении первого вопроса') return @@ -902,7 +894,7 @@ fn (mut b TgBot)render_message(state_id i64,chat_id_str string, question models. } -fn (mut b TgBot)render_result_question(state_id i64,chat_id_str string, question models.QuizQuestion, content models.QuizQuestionResult){ +fn (mut b TgBot)render_result_question(state_id i64,chat_id_str string, question models.QuizQuestion, content models.QuizQuestionResult ){ b.repo.finish_state(state_id)or{ b.bot.send_message(chat_id: chat_id_str, text: 'Ошибка при завершении состояния респондента') return @@ -929,4 +921,25 @@ fn validate_uploaded_file(file_name string, expected string) bool { } return false +} + +fn (mut b TgBot)add_settings()!{ + bot_data := b.bot.get_me() + b.repo.update_bot_name(b.bot_id,bot_data.username)or{ + return error('$err') + } + + quiz := b.repo.get_quiz(b.quiz_id)or{ + return error('$err') + } + + quiz_config := json.decode(models.QuizConfig, quiz.config) or { + return error('$err') + } + + if quiz_config.have_root == '' { + b.liner = true + } + + b.quiz_config = quiz_config } \ No newline at end of file