added another sql repo methods

This commit is contained in:
Pavel 2024-08-16 15:15:22 +03:00
parent e71a8b8ccf
commit 11d46ada2a
2 changed files with 69 additions and 24 deletions

@ -15,30 +15,6 @@ pub struct Question {
buttons []Button @[json: 'Buttons']
}
pub struct TelegramIntegration {
pub mut:
id i64
account_id string
quiz_id string
bot_token string
repeatable bool
name string
description string
deleted bool
}
pub struct RespondentState {
pub mut:
id i64
telegram_id i64
quiz_id i64
state string
lang string
contact string
finish bool
}
[table: 'question']
pub struct QuizQuestion {
pub mut:

@ -35,6 +35,36 @@ pub fn (mut r Repo)get_next_que_data(state string)!models.Question{
return error('empty')
}
// методы QuizRespondentState
// вызывается при /start, создает запись
pub fn (mut r Repo) create_state(state models.RespondentState) ! {
sql r.pg_db {
insert state into models.RespondentState
} or {
return error('Failed insert state: $err')
}
}
// вызывать при любом другом, кроме вопроса с типом result
pub fn (mut r Repo) update_state(id i64, new_state string) ! {
sql r.pg_db {
update models.RespondentState set state = new_state where id == id
} or {
return error('Failed update state: $err')
}
}
// выставляется при типе вопроса result = true
pub fn (mut r Repo) finish_state(id i64) ! {
sql r.pg_db {
update models.RespondentState set finish = true where id == id
} or {
return error('Failed finish state: $err')
}
}
// методы с question
// получение вопроса по id
pub fn (mut r Repo) get_question_by_id(id i64) !models.QuizQuestion {
question := sql r.pg_db {
select from models.QuizQuestion where id == id && deleted == false
@ -43,4 +73,43 @@ pub fn (mut r Repo) get_question_by_id(id i64) !models.QuizQuestion {
}
return question[0]
}
// методы TelegramIntegration
// получение интеграции по id
pub fn (mut r Repo) get_integration_by_id(id i64) !models.TelegramIntegration {
integration := sql r.pg_db {
select from models.TelegramIntegration where id == id && deleted == false limit 1
} or {
return error('Integration not found')
}
return integration[0]
}
// создает запись о интеграции
pub fn (mut r Repo) create_integration(integration models.TelegramIntegration) ! {
sql r.pg_db {
insert integration into models.TelegramIntegration
} or {
return error('Failed create integration: $err')
}
}
// обновляет токен бота
pub fn (mut r Repo) update_bot_token(id i64, new_token string) ! {
sql r.pg_db {
update models.TelegramIntegration set bot_token = new_token where id == id && deleted == false
} or {
return error('Failed to update bot token: $err')
}
}
// обновляет поля ниже токена
pub fn (mut r Repo) update_integration_fields(id i64, integration models.TelegramIntegration) ! {
sql r.pg_db {
update models.TelegramIntegration set repeatable = integration.repeatable, name = integration.name,
description = integration.description, deleted = integration.deleted where id == id && deleted == false
} or {
return error('Failed update integration fields: $err')
}
}