From c42d85c380a91d3b67d945a9fed10116f7b66f4d Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 14 Mar 2024 14:19:52 -0400 Subject: [PATCH] feat: add suggester to questions --- ...a6b0cd74c7504be0f9bd6769560ab72af0f6b.json | 36 +++++++++++ ...2c9364fe6f7b4a627097c3aed7f3a3c2ac47a.json | 22 +++++++ ...08eaf9b5de45e9c7f2f16853c455826f804f4.json | 15 +++++ ...b70999e3ff9c0ced1ef20cf151ad989aa017e.json | 35 +++++++++++ ...ee558415e032c330ed8fc65c0de1cd4f2c705.json | 58 ++++++++++++++++++ ...e3e7362e30107647596223e7af42a86a051f1.json | 34 +++++++++++ ...4091231fed0d5f7c36f7c1f93933c46650e8e.json | 58 ++++++++++++++++++ ...642721fc9cb3440671043142f516426e2fe09.json | 18 ++++++ ...fe506b03f31b2c0b895eec215921438640e97.json | 60 +++++++++++++++++++ ...1e59c56a0dbd6a1cb436c5a92e53062505ab2.json | 14 +++++ ...d58d3353ac33a6edc115d929edbc52dc13dc3.json | 41 +++++++++++++ ...ea753d28255fa70e1a01ece90b12cb3bd4676.json | 28 +++++++++ ...fc9e409b75f013491c5c563805ac97b78078b.json | 28 +++++++++ server/migrations/3_add_suggester.down.sql | 2 + server/migrations/3_add_suggester.up.sql | 2 + server/src/main.rs | 2 + server/src/question.rs | 1 + 17 files changed, 454 insertions(+) create mode 100644 server/.sqlx/query-18e9c0600ee144cc8076c873000a6b0cd74c7504be0f9bd6769560ab72af0f6b.json create mode 100644 server/.sqlx/query-19eee59e44b49a9d14275fb2cff2c9364fe6f7b4a627097c3aed7f3a3c2ac47a.json create mode 100644 server/.sqlx/query-1fa8e7bb0ae299855199a18faa608eaf9b5de45e9c7f2f16853c455826f804f4.json create mode 100644 server/.sqlx/query-2339240270b8e6533854dee24d8b70999e3ff9c0ced1ef20cf151ad989aa017e.json create mode 100644 server/.sqlx/query-3c76d2fecf7f6dcc8ba6ac1c0a1ee558415e032c330ed8fc65c0de1cd4f2c705.json create mode 100644 server/.sqlx/query-3e861ab97e2b1f270fba70971dce3e7362e30107647596223e7af42a86a051f1.json create mode 100644 server/.sqlx/query-5ba789f8d031bf48af42d0261544091231fed0d5f7c36f7c1f93933c46650e8e.json create mode 100644 server/.sqlx/query-847a788f01943953e4e5752a6e5642721fc9cb3440671043142f516426e2fe09.json create mode 100644 server/.sqlx/query-89816867273ca859cb8544774cdfe506b03f31b2c0b895eec215921438640e97.json create mode 100644 server/.sqlx/query-b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2.json create mode 100644 server/.sqlx/query-c4a663a3d0d0b17668f93f29c86d58d3353ac33a6edc115d929edbc52dc13dc3.json create mode 100644 server/.sqlx/query-cc0cc9c85602ac3b0b658891f06ea753d28255fa70e1a01ece90b12cb3bd4676.json create mode 100644 server/.sqlx/query-da2c158db6d7be27ee25129e96cfc9e409b75f013491c5c563805ac97b78078b.json create mode 100644 server/migrations/3_add_suggester.down.sql create mode 100644 server/migrations/3_add_suggester.up.sql diff --git a/server/.sqlx/query-18e9c0600ee144cc8076c873000a6b0cd74c7504be0f9bd6769560ab72af0f6b.json b/server/.sqlx/query-18e9c0600ee144cc8076c873000a6b0cd74c7504be0f9bd6769560ab72af0f6b.json new file mode 100644 index 0000000..157cd65 --- /dev/null +++ b/server/.sqlx/query-18e9c0600ee144cc8076c873000a6b0cd74c7504be0f9bd6769560ab72af0f6b.json @@ -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" +} diff --git a/server/.sqlx/query-19eee59e44b49a9d14275fb2cff2c9364fe6f7b4a627097c3aed7f3a3c2ac47a.json b/server/.sqlx/query-19eee59e44b49a9d14275fb2cff2c9364fe6f7b4a627097c3aed7f3a3c2ac47a.json new file mode 100644 index 0000000..ee4bae8 --- /dev/null +++ b/server/.sqlx/query-19eee59e44b49a9d14275fb2cff2c9364fe6f7b4a627097c3aed7f3a3c2ac47a.json @@ -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" +} diff --git a/server/.sqlx/query-1fa8e7bb0ae299855199a18faa608eaf9b5de45e9c7f2f16853c455826f804f4.json b/server/.sqlx/query-1fa8e7bb0ae299855199a18faa608eaf9b5de45e9c7f2f16853c455826f804f4.json new file mode 100644 index 0000000..7ca5a9f --- /dev/null +++ b/server/.sqlx/query-1fa8e7bb0ae299855199a18faa608eaf9b5de45e9c7f2f16853c455826f804f4.json @@ -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" +} diff --git a/server/.sqlx/query-2339240270b8e6533854dee24d8b70999e3ff9c0ced1ef20cf151ad989aa017e.json b/server/.sqlx/query-2339240270b8e6533854dee24d8b70999e3ff9c0ced1ef20cf151ad989aa017e.json new file mode 100644 index 0000000..50f3691 --- /dev/null +++ b/server/.sqlx/query-2339240270b8e6533854dee24d8b70999e3ff9c0ced1ef20cf151ad989aa017e.json @@ -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" +} diff --git a/server/.sqlx/query-3c76d2fecf7f6dcc8ba6ac1c0a1ee558415e032c330ed8fc65c0de1cd4f2c705.json b/server/.sqlx/query-3c76d2fecf7f6dcc8ba6ac1c0a1ee558415e032c330ed8fc65c0de1cd4f2c705.json new file mode 100644 index 0000000..9fd95f2 --- /dev/null +++ b/server/.sqlx/query-3c76d2fecf7f6dcc8ba6ac1c0a1ee558415e032c330ed8fc65c0de1cd4f2c705.json @@ -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" +} diff --git a/server/.sqlx/query-3e861ab97e2b1f270fba70971dce3e7362e30107647596223e7af42a86a051f1.json b/server/.sqlx/query-3e861ab97e2b1f270fba70971dce3e7362e30107647596223e7af42a86a051f1.json new file mode 100644 index 0000000..90dfe16 --- /dev/null +++ b/server/.sqlx/query-3e861ab97e2b1f270fba70971dce3e7362e30107647596223e7af42a86a051f1.json @@ -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" +} diff --git a/server/.sqlx/query-5ba789f8d031bf48af42d0261544091231fed0d5f7c36f7c1f93933c46650e8e.json b/server/.sqlx/query-5ba789f8d031bf48af42d0261544091231fed0d5f7c36f7c1f93933c46650e8e.json new file mode 100644 index 0000000..e202c85 --- /dev/null +++ b/server/.sqlx/query-5ba789f8d031bf48af42d0261544091231fed0d5f7c36f7c1f93933c46650e8e.json @@ -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" +} diff --git a/server/.sqlx/query-847a788f01943953e4e5752a6e5642721fc9cb3440671043142f516426e2fe09.json b/server/.sqlx/query-847a788f01943953e4e5752a6e5642721fc9cb3440671043142f516426e2fe09.json new file mode 100644 index 0000000..40f5427 --- /dev/null +++ b/server/.sqlx/query-847a788f01943953e4e5752a6e5642721fc9cb3440671043142f516426e2fe09.json @@ -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" +} diff --git a/server/.sqlx/query-89816867273ca859cb8544774cdfe506b03f31b2c0b895eec215921438640e97.json b/server/.sqlx/query-89816867273ca859cb8544774cdfe506b03f31b2c0b895eec215921438640e97.json new file mode 100644 index 0000000..03a1ffe --- /dev/null +++ b/server/.sqlx/query-89816867273ca859cb8544774cdfe506b03f31b2c0b895eec215921438640e97.json @@ -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" +} diff --git a/server/.sqlx/query-b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2.json b/server/.sqlx/query-b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2.json new file mode 100644 index 0000000..f60705b --- /dev/null +++ b/server/.sqlx/query-b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "delete from users where id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "b0539523e23773e7d01ac00be741e59c56a0dbd6a1cb436c5a92e53062505ab2" +} diff --git a/server/.sqlx/query-c4a663a3d0d0b17668f93f29c86d58d3353ac33a6edc115d929edbc52dc13dc3.json b/server/.sqlx/query-c4a663a3d0d0b17668f93f29c86d58d3353ac33a6edc115d929edbc52dc13dc3.json new file mode 100644 index 0000000..a132d89 --- /dev/null +++ b/server/.sqlx/query-c4a663a3d0d0b17668f93f29c86d58d3353ac33a6edc115d929edbc52dc13dc3.json @@ -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" +} diff --git a/server/.sqlx/query-cc0cc9c85602ac3b0b658891f06ea753d28255fa70e1a01ece90b12cb3bd4676.json b/server/.sqlx/query-cc0cc9c85602ac3b0b658891f06ea753d28255fa70e1a01ece90b12cb3bd4676.json new file mode 100644 index 0000000..dfbafd0 --- /dev/null +++ b/server/.sqlx/query-cc0cc9c85602ac3b0b658891f06ea753d28255fa70e1a01ece90b12cb3bd4676.json @@ -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" +} diff --git a/server/.sqlx/query-da2c158db6d7be27ee25129e96cfc9e409b75f013491c5c563805ac97b78078b.json b/server/.sqlx/query-da2c158db6d7be27ee25129e96cfc9e409b75f013491c5c563805ac97b78078b.json new file mode 100644 index 0000000..85bfb48 --- /dev/null +++ b/server/.sqlx/query-da2c158db6d7be27ee25129e96cfc9e409b75f013491c5c563805ac97b78078b.json @@ -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" +} diff --git a/server/migrations/3_add_suggester.down.sql b/server/migrations/3_add_suggester.down.sql new file mode 100644 index 0000000..033871e --- /dev/null +++ b/server/migrations/3_add_suggester.down.sql @@ -0,0 +1,2 @@ +alter table questions + drop column suggester; diff --git a/server/migrations/3_add_suggester.up.sql b/server/migrations/3_add_suggester.up.sql new file mode 100644 index 0000000..c2d347b --- /dev/null +++ b/server/migrations/3_add_suggester.up.sql @@ -0,0 +1,2 @@ +alter table questions + add column suggester text; diff --git a/server/src/main.rs b/server/src/main.rs index f9dc0d4..ecb65ff 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -314,6 +314,7 @@ struct RawQuestion { question_text: String, answers: Vec, response: Option, + suggester: Option, } async fn parse_question(state: &AppState, question: RawQuestion) -> Result { @@ -323,6 +324,7 @@ async fn parse_question(state: &AppState, question: RawQuestion) -> Result, + pub suggester: Option, } #[derive(Serialize)]