feat: add suggester to questions

This commit is contained in:
Anna 2024-03-14 14:19:52 -04:00
parent 7d539cb99c
commit c42d85c380
Signed by: anna
GPG Key ID: D0943384CD9F87D1
17 changed files with 454 additions and 0 deletions

View File

@ -0,0 +1,36 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n trunc(extract(days from ($2::timestamptz - (stats->>$3)::date)) / 365)::text as \"key!\",\n answer,\n count(*) as \"count!\"\n from responses\n where question_id = $1\n and stats->>$3 is not null\n group by 1, answer\n order by answer\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "key!",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "answer",
"type_info": "Int2"
},
{
"ordinal": 2,
"name": "count!",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid",
"Timestamptz",
"Text"
]
},
"nullable": [
null,
false,
null
]
},
"hash": "18e9c0600ee144cc8076c873000a6b0cd74c7504be0f9bd6769560ab72af0f6b"
}

View File

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "select id from users where api_key_hash = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
}
],
"parameters": {
"Left": [
"Bytea"
]
},
"nullable": [
false
]
},
"hash": "19eee59e44b49a9d14275fb2cff2c9364fe6f7b4a627097c3aed7f3a3c2ac47a"
}

View File

@ -0,0 +1,15 @@
{
"db_name": "PostgreSQL",
"query": "insert into users (id, api_key_hash) values ($1, $2)",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Bytea"
]
},
"nullable": []
},
"hash": "1fa8e7bb0ae299855199a18faa608eaf9b5de45e9c7f2f16853c455826f804f4"
}

View File

@ -0,0 +1,35 @@
{
"db_name": "PostgreSQL",
"query": "select stats->>$2 as \"key!\", answer, count(*) as \"count!\" from responses where question_id = $1 and stats->>$2 is not null group by stats->>$2, answer order by answer",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "key!",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "answer",
"type_info": "Int2"
},
{
"ordinal": 2,
"name": "count!",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid",
"Text"
]
},
"nullable": [
null,
false,
null
]
},
"hash": "2339240270b8e6533854dee24d8b70999e3ff9c0ced1ef20cf151ad989aa017e"
}

View File

@ -0,0 +1,58 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n q.*,\n current_timestamp <= q.publish_date + interval '1 day' and current_timestamp > q.publish_date as \"active!\",\n (select answer from responses r where r.question_id = q.id and r.user_id = $1) as response\n from questions q\n where q.publish_date <= current_timestamp\n order by q.publish_date desc\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "publish_date",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "question_text",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "answers",
"type_info": "TextArray"
},
{
"ordinal": 4,
"name": "suggester",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "active!",
"type_info": "Bool"
},
{
"ordinal": 6,
"name": "response",
"type_info": "Int2"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
true,
null,
null
]
},
"hash": "3c76d2fecf7f6dcc8ba6ac1c0a1ee558415e032c330ed8fc65c0de1cd4f2c705"
}

View File

@ -0,0 +1,34 @@
{
"db_name": "PostgreSQL",
"query": "select country as \"key!\", answer, count(*) as \"count!\" from responses where question_id = $1 group by country, answer order by answer",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "key!",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "answer",
"type_info": "Int2"
},
{
"ordinal": 2,
"name": "count!",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
null
]
},
"hash": "3e861ab97e2b1f270fba70971dce3e7362e30107647596223e7af42a86a051f1"
}

View File

@ -0,0 +1,58 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n q.*,\n true as \"active!\",\n (select answer from responses r where r.question_id = q.id and r.user_id = $1) as response\n from questions q\n where\n q.publish_date <= current_timestamp\n and current_timestamp <= q.publish_date + interval '1 day'\n and current_timestamp > q.publish_date\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "publish_date",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "question_text",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "answers",
"type_info": "TextArray"
},
{
"ordinal": 4,
"name": "suggester",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "active!",
"type_info": "Bool"
},
{
"ordinal": 6,
"name": "response",
"type_info": "Int2"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
true,
null,
null
]
},
"hash": "5ba789f8d031bf48af42d0261544091231fed0d5f7c36f7c1f93933c46650e8e"
}

View File

@ -0,0 +1,18 @@
{
"db_name": "PostgreSQL",
"query": "insert into responses (question_id, user_id, answer, country, stats) values ($1, $2, $3, $4, $5)",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid",
"Uuid",
"Int2",
"Text",
"Jsonb"
]
},
"nullable": []
},
"hash": "847a788f01943953e4e5752a6e5642721fc9cb3440671043142f516426e2fe09"
}

View File

@ -0,0 +1,60 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n q.*,\n current_timestamp <= q.publish_date + interval '1 day' and current_timestamp > q.publish_date as \"active!\",\n (select answer from responses r where r.question_id = q.id and r.user_id = $1) as response\n from questions q\n where q.publish_date <= current_timestamp\n order by q.publish_date desc\n limit $2::bigint + 2 offset $3::bigint * $2::bigint\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "publish_date",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "question_text",
"type_info": "Text"
},
{
"ordinal": 3,
"name": "answers",
"type_info": "TextArray"
},
{
"ordinal": 4,
"name": "suggester",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "active!",
"type_info": "Bool"
},
{
"ordinal": 6,
"name": "response",
"type_info": "Int2"
}
],
"parameters": {
"Left": [
"Uuid",
"Int8",
"Int8"
]
},
"nullable": [
false,
false,
false,
false,
true,
null,
null
]
},
"hash": "89816867273ca859cb8544774cdfe506b03f31b2c0b895eec215921438640e97"
}

View File

@ -0,0 +1,14 @@
{
"db_name": "PostgreSQL",
"query": "delete from users where id = $1",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": []
},
"hash": "b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2"
}

View File

@ -0,0 +1,41 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n answers,\n publish_date,\n exists(select 1 from responses where question_id = $1 and user_id = $2) as \"voted!\",\n current_timestamp <= publish_date + interval '1 day' and current_timestamp > publish_date as \"active!\"\n from questions\n where id = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "answers",
"type_info": "TextArray"
},
{
"ordinal": 1,
"name": "publish_date",
"type_info": "Timestamptz"
},
{
"ordinal": 2,
"name": "voted!",
"type_info": "Bool"
},
{
"ordinal": 3,
"name": "active!",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid",
"Uuid"
]
},
"nullable": [
false,
false,
null,
null
]
},
"hash": "c4a663a3d0d0b17668f93f29c86d58d3353ac33a6edc115d929edbc52dc13dc3"
}

View File

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "\n select\n current_timestamp <= q.publish_date + interval '1 day' and current_timestamp > q.publish_date as \"active!\",\n exists(select 1 from responses r where r.question_id = q.id and r.user_id = $1) as \"voted!\"\n from questions q\n where q.id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "active!",
"type_info": "Bool"
},
{
"ordinal": 1,
"name": "voted!",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
null,
null
]
},
"hash": "cc0cc9c85602ac3b0b658891f06ea753d28255fa70e1a01ece90b12cb3bd4676"
}

View File

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "select r.answer, count(r.*) from responses r where r.question_id = $1 group by r.answer",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "answer",
"type_info": "Int2"
},
{
"ordinal": 1,
"name": "count",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
null
]
},
"hash": "da2c158db6d7be27ee25129e96cfc9e409b75f013491c5c563805ac97b78078b"
}

View File

@ -0,0 +1,2 @@
alter table questions
drop column suggester;

View File

@ -0,0 +1,2 @@
alter table questions
add column suggester text;

View File

@ -314,6 +314,7 @@ struct RawQuestion {
question_text: String,
answers: Vec<String>,
response: Option<i16>,
suggester: Option<String>,
}
async fn parse_question(state: &AppState, question: RawQuestion) -> Result<Question> {
@ -323,6 +324,7 @@ async fn parse_question(state: &AppState, question: RawQuestion) -> Result<Quest
active: question.active,
text: question.question_text,
answers: question.answers,
suggester: question.suggester,
};
if question.response.is_some() || !question.active {

View File

@ -9,6 +9,7 @@ pub struct BasicQuestion {
pub active: bool,
pub text: String,
pub answers: Vec<String>,
pub suggester: Option<String>,
}
#[derive(Serialize)]