diff --git a/.sqlx/query-0dcc7ef3ced8f280c164b673ef35cc6a813c06de7c8f93e257fbb361c457f7a4.json b/.sqlx/query-0dcc7ef3ced8f280c164b673ef35cc6a813c06de7c8f93e257fbb361c457f7a4.json deleted file mode 100644 index ea84833..0000000 --- a/.sqlx/query-0dcc7ef3ced8f280c164b673ef35cc6a813c06de7c8f93e257fbb361c457f7a4.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT users.id AS \"id!\", users.realm::text AS \"realm!\", users.name AS \"name!\", users.email AS \"email!\"\n FROM car JOIN users ON car.driver = users.id WHERE car.id = $1;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id!", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "realm!", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "name!", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "email!", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false, - null, - false, - false - ] - }, - "hash": "0dcc7ef3ced8f280c164b673ef35cc6a813c06de7c8f93e257fbb361c457f7a4" -} diff --git a/.sqlx/query-240da8a772a1541d34bc85a89a6d8a1ddf08e06a3062401f6584aa86bdecb2ba.json b/.sqlx/query-240da8a772a1541d34bc85a89a6d8a1ddf08e06a3062401f6584aa86bdecb2ba.json deleted file mode 100644 index cb3cebc..0000000 --- a/.sqlx/query-240da8a772a1541d34bc85a89a6d8a1ddf08e06a3062401f6584aa86bdecb2ba.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH new_car AS (\n UPDATE car SET\n max_capacity = COALESCE($1, max_capacity),\n departure_time = COALESCE($2, departure_time),\n return_time = COALESCE($3, return_time),\n comment = COALESCE($4, comment)\n WHERE event_id = $5 AND id = $6 AND driver = $7 RETURNING *\n )\n SELECT new_car.id, new_car.event_id, new_car.max_capacity, new_car.departure_time, new_car.return_time, new_car.comment,\n (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email)\n END\n ), NULL) as \"riders!: Vec\"\n FROM new_car\n JOIN users driverUser ON new_car.driver = driverUser.id\n LEFT JOIN rider on new_car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n GROUP BY new_car.id, new_car.event_id, new_car.max_capacity, new_car.departure_time, new_car.return_time, new_car.comment, driverUser.id\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "event_id", - "type_info": "Int4" - }, - { - "ordinal": 2, - "name": "max_capacity", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "departure_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "return_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "comment", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "driver!: UserData", - "type_info": "Record" - }, - { - "ordinal": 7, - "name": "riders!: Vec", - "type_info": "RecordArray" - } - ], - "parameters": { - "Left": [ - "Int4", - "Timestamptz", - "Timestamptz", - "Varchar", - "Int4", - "Int4", - "Text" - ] - }, - "nullable": [ - false, - true, - false, - false, - false, - false, - null, - null - ] - }, - "hash": "240da8a772a1541d34bc85a89a6d8a1ddf08e06a3062401f6584aa86bdecb2ba" -} diff --git a/.sqlx/query-31b1a46117fd51573240ca9c41408fcc2aae985df11e2255538c15a099d2449a.json b/.sqlx/query-31b1a46117fd51573240ca9c41408fcc2aae985df11e2255538c15a099d2449a.json deleted file mode 100644 index c516569..0000000 --- a/.sqlx/query-31b1a46117fd51573240ca9c41408fcc2aae985df11e2255538c15a099d2449a.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT id AS \"id!\", realm::text AS \"realm!\", name AS \"name!\", email AS \"email!\"\n FROM users WHERE id IN (SELECT UNNEST($1::VARCHAR[]))\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id!", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "realm!", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "name!", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "email!", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "VarcharArray" - ] - }, - "nullable": [ - false, - null, - false, - false - ] - }, - "hash": "31b1a46117fd51573240ca9c41408fcc2aae985df11e2255538c15a099d2449a" -} diff --git a/.sqlx/query-366d090e5be3459cf1194d88388a3e4e23ea8d0a725d8180909f2874438e9955.json b/.sqlx/query-366d090e5be3459cf1194d88388a3e4e23ea8d0a725d8180909f2874438e9955.json new file mode 100644 index 0000000..1d36498 --- /dev/null +++ b/.sqlx/query-366d090e5be3459cf1194d88388a3e4e23ea8d0a725d8180909f2874438e9955.json @@ -0,0 +1,86 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n event.id, event.name, event.location, event.start_time, event.end_time,\n ROW(users.*)::users AS \"creator!: UserData\"\n FROM event\n JOIN users ON users.id = event.creator\n WHERE event.id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "location", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "start_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "end_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "creator!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + null + ] + }, + "hash": "366d090e5be3459cf1194d88388a3e4e23ea8d0a725d8180909f2874438e9955" +} diff --git a/.sqlx/query-36ed41ae1cf1a4fd67cb1bf564e40247a91516dfbba0ceedfc3030f2db561b0e.json b/.sqlx/query-36ed41ae1cf1a4fd67cb1bf564e40247a91516dfbba0ceedfc3030f2db561b0e.json new file mode 100644 index 0000000..d75eb1d --- /dev/null +++ b/.sqlx/query-36ed41ae1cf1a4fd67cb1bf564e40247a91516dfbba0ceedfc3030f2db561b0e.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT id AS \"id!\", realm AS \"realm!: UserRealm\", name AS \"name!\", email AS \"email!\"\n FROM users WHERE id IN (SELECT UNNEST($1::VARCHAR[]))\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id!", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "realm!: UserRealm", + "type_info": { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + }, + { + "ordinal": 2, + "name": "name!", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "email!", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "VarcharArray" + ] + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "36ed41ae1cf1a4fd67cb1bf564e40247a91516dfbba0ceedfc3030f2db561b0e" +} diff --git a/.sqlx/query-39df16aa76ad52799d8a9f13f91381cfb82c1da8129806dfb92d3cc893616dc1.json b/.sqlx/query-39df16aa76ad52799d8a9f13f91381cfb82c1da8129806dfb92d3cc893616dc1.json new file mode 100644 index 0000000..1af8357 --- /dev/null +++ b/.sqlx/query-39df16aa76ad52799d8a9f13f91381cfb82c1da8129806dfb92d3cc893616dc1.json @@ -0,0 +1,86 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n event.id, event.name, event.location, event.start_time, event.end_time,\n ROW(users.*)::users AS \"creator!: UserData\"\n FROM event\n JOIN users ON users.id = event.creator\n WHERE (end_time >= NOW() AND $1 = False) OR (end_time < NOW() AND $1)\n ORDER BY start_time ASC\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "location", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "start_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "end_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "creator!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + ], + "parameters": { + "Left": [ + "Bool" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + null + ] + }, + "hash": "39df16aa76ad52799d8a9f13f91381cfb82c1da8129806dfb92d3cc893616dc1" +} diff --git a/.sqlx/query-c0a0870ea552a324fe5396b722d25f895d6297af309db791459b659df20d1de9.json b/.sqlx/query-478ada18673745c359b434a721ee4810667f819498eaa254de1523f3709a2ef9.json similarity index 67% rename from .sqlx/query-c0a0870ea552a324fe5396b722d25f895d6297af309db791459b659df20d1de9.json rename to .sqlx/query-478ada18673745c359b434a721ee4810667f819498eaa254de1523f3709a2ef9.json index 8e20ab3..725b4c1 100644 --- a/.sqlx/query-c0a0870ea552a324fe5396b722d25f895d6297af309db791459b659df20d1de9.json +++ b/.sqlx/query-478ada18673745c359b434a721ee4810667f819498eaa254de1523f3709a2ef9.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO users (id, realm, name, email)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (id) DO UPDATE SET realm = EXCLUDED.realm, name = EXCLUDED.name, email = EXCLUDED.email\n RETURNING id AS \"id!\", realm::text AS \"realm!\", name AS \"name!\", email AS \"email!\";", + "query": "INSERT INTO users (id, realm, name, email)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (id) DO UPDATE SET realm = EXCLUDED.realm, name = EXCLUDED.name, email = EXCLUDED.email\n RETURNING id AS \"id!\", realm AS \"realm!: UserRealm\", name AS \"name!\", email AS \"email!\";", "describe": { "columns": [ { @@ -10,8 +10,18 @@ }, { "ordinal": 1, - "name": "realm!", - "type_info": "Text" + "name": "realm!: UserRealm", + "type_info": { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } }, { "ordinal": 2, @@ -44,10 +54,10 @@ }, "nullable": [ false, - null, + false, false, false ] }, - "hash": "c0a0870ea552a324fe5396b722d25f895d6297af309db791459b659df20d1de9" + "hash": "478ada18673745c359b434a721ee4810667f819498eaa254de1523f3709a2ef9" } diff --git a/.sqlx/query-4bead5e5fce8e9d2014e8728dedfd60941ee9f7f7cbebe352dd66b669c317f72.json b/.sqlx/query-4bead5e5fce8e9d2014e8728dedfd60941ee9f7f7cbebe352dd66b669c317f72.json new file mode 100644 index 0000000..d824890 --- /dev/null +++ b/.sqlx/query-4bead5e5fce8e9d2014e8728dedfd60941ee9f7f7cbebe352dd66b669c317f72.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT users.id AS \"id!\", users.realm AS \"realm!: UserRealm\", users.name AS \"name!\", users.email AS \"email!\"\n FROM car JOIN users ON car.driver = users.id WHERE car.id = $1;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id!", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "realm!: UserRealm", + "type_info": { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + }, + { + "ordinal": 2, + "name": "name!", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "email!", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "4bead5e5fce8e9d2014e8728dedfd60941ee9f7f7cbebe352dd66b669c317f72" +} diff --git a/.sqlx/query-50d4a2c68fe79cbb1d4d3a215496090cba3cca05f1af163eda6c5a7b2df35e89.json b/.sqlx/query-50d4a2c68fe79cbb1d4d3a215496090cba3cca05f1af163eda6c5a7b2df35e89.json new file mode 100644 index 0000000..3823e07 --- /dev/null +++ b/.sqlx/query-50d4a2c68fe79cbb1d4d3a215496090cba3cca05f1af163eda6c5a7b2df35e89.json @@ -0,0 +1,140 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n ROW(driverUser.*)::users AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN ROW(riderUser.*)::users\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n WHERE event_id = $1 AND car.id = $2 GROUP BY car.id, driverUser.id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "event_id", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "max_capacity", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "departure_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "return_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "comment", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "driver!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + }, + { + "ordinal": 7, + "name": "riders!: Vec", + "type_info": { + "Custom": { + "name": "users[]", + "kind": { + "Array": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4", + "Int4" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + null, + null + ] + }, + "hash": "50d4a2c68fe79cbb1d4d3a215496090cba3cca05f1af163eda6c5a7b2df35e89" +} diff --git a/.sqlx/query-67d309e08cc3fe47fb7451f33c922aa9899f38d68666196261c595597cba0edd.json b/.sqlx/query-67d309e08cc3fe47fb7451f33c922aa9899f38d68666196261c595597cba0edd.json deleted file mode 100644 index 2ca3d97..0000000 --- a/.sqlx/query-67d309e08cc3fe47fb7451f33c922aa9899f38d68666196261c595597cba0edd.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email)\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n WHERE event_id = $1 AND car.id = $2 GROUP BY car.id, driverUser.id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "event_id", - "type_info": "Int4" - }, - { - "ordinal": 2, - "name": "max_capacity", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "departure_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "return_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "comment", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "driver!: UserData", - "type_info": "Record" - }, - { - "ordinal": 7, - "name": "riders!: Vec", - "type_info": "RecordArray" - } - ], - "parameters": { - "Left": [ - "Int4", - "Int4" - ] - }, - "nullable": [ - false, - true, - false, - false, - false, - false, - null, - null - ] - }, - "hash": "67d309e08cc3fe47fb7451f33c922aa9899f38d68666196261c595597cba0edd" -} diff --git a/.sqlx/query-cb047f95ea4e40c404f8baa40d64374338bfe777cea9708d29aaf12acb3a51e0.json b/.sqlx/query-741df03cbb42910f99372dcab7d2d966e16482d7100cb30955e6a8b5cd97f64b.json similarity index 50% rename from .sqlx/query-cb047f95ea4e40c404f8baa40d64374338bfe777cea9708d29aaf12acb3a51e0.json rename to .sqlx/query-741df03cbb42910f99372dcab7d2d966e16482d7100cb30955e6a8b5cd97f64b.json index 63ac8f6..346b9f9 100644 --- a/.sqlx/query-cb047f95ea4e40c404f8baa40d64374338bfe777cea9708d29aaf12acb3a51e0.json +++ b/.sqlx/query-741df03cbb42910f99372dcab7d2d966e16482d7100cb30955e6a8b5cd97f64b.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT id AS \"id!\", realm::text AS \"realm!\", name AS \"name!\", email AS \"email!\" FROM users WHERE LOWER(name) LIKE $1 OR LOWER(email) LIKE $1;", + "query": "SELECT id AS \"id!\", realm AS \"realm!: UserRealm\", name AS \"name!\", email AS \"email!\" FROM users WHERE LOWER(name) LIKE $1 OR LOWER(email) LIKE $1;", "describe": { "columns": [ { @@ -10,8 +10,18 @@ }, { "ordinal": 1, - "name": "realm!", - "type_info": "Text" + "name": "realm!: UserRealm", + "type_info": { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } }, { "ordinal": 2, @@ -31,10 +41,10 @@ }, "nullable": [ false, - null, + false, false, false ] }, - "hash": "cb047f95ea4e40c404f8baa40d64374338bfe777cea9708d29aaf12acb3a51e0" + "hash": "741df03cbb42910f99372dcab7d2d966e16482d7100cb30955e6a8b5cd97f64b" } diff --git a/.sqlx/query-c154842825de70b021e70f40170deaeeb7d51de2390225d8b7b49a6edbdd165c.json b/.sqlx/query-7458e6cb1e5fb283c5e13ee72666395272acabe8963eb278fd0db2d3d658256a.json similarity index 54% rename from .sqlx/query-c154842825de70b021e70f40170deaeeb7d51de2390225d8b7b49a6edbdd165c.json rename to .sqlx/query-7458e6cb1e5fb283c5e13ee72666395272acabe8963eb278fd0db2d3d658256a.json index fb75013..b86fe2f 100644 --- a/.sqlx/query-c154842825de70b021e70f40170deaeeb7d51de2390225d8b7b49a6edbdd165c.json +++ b/.sqlx/query-7458e6cb1e5fb283c5e13ee72666395272acabe8963eb278fd0db2d3d658256a.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT users.id AS \"id!\", users.realm::text AS \"realm!\", users.name AS \"name!\", users.email AS \"email!\"\n FROM users where id = $1;\n ", + "query": "\n SELECT users.id AS \"id!\", users.realm AS \"realm!: UserRealm\", users.name AS \"name!\", users.email AS \"email!\"\n FROM users where id = $1;\n ", "describe": { "columns": [ { @@ -10,8 +10,18 @@ }, { "ordinal": 1, - "name": "realm!", - "type_info": "Text" + "name": "realm!: UserRealm", + "type_info": { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } }, { "ordinal": 2, @@ -31,10 +41,10 @@ }, "nullable": [ false, - null, + false, false, false ] }, - "hash": "c154842825de70b021e70f40170deaeeb7d51de2390225d8b7b49a6edbdd165c" + "hash": "7458e6cb1e5fb283c5e13ee72666395272acabe8963eb278fd0db2d3d658256a" } diff --git a/.sqlx/query-960795ad9f2fec9f080c16a2570dc13e2c1ef472b769810e5e7e0b70624f0081.json b/.sqlx/query-7c295838adf660d733e49ce9d818c910d7df0d66b3b8793716b6c44be8a576c2.json similarity index 53% rename from .sqlx/query-960795ad9f2fec9f080c16a2570dc13e2c1ef472b769810e5e7e0b70624f0081.json rename to .sqlx/query-7c295838adf660d733e49ce9d818c910d7df0d66b3b8793716b6c44be8a576c2.json index 1773196..5567e4d 100644 --- a/.sqlx/query-960795ad9f2fec9f080c16a2570dc13e2c1ef472b769810e5e7e0b70624f0081.json +++ b/.sqlx/query-7c295838adf660d733e49ce9d818c910d7df0d66b3b8793716b6c44be8a576c2.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH new_event AS (\n INSERT INTO event (name, location, start_time, end_time, creator) VALUES ($1, $2, $3, $4, $5) RETURNING *\n )\n SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time,\n (users.id, users.realm, users.name, users.email) AS \"creator!: UserData\"\n FROM new_event LEFT JOIN users ON new_event.creator = users.id\n ", + "query": "\n WITH new_event AS (\n INSERT INTO event (name, location, start_time, end_time, creator) VALUES ($1, $2, $3, $4, $5) RETURNING *\n )\n SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time,\n (users.id, users.realm, users.name, users.email)::users AS \"creator!: UserData\"\n FROM new_event LEFT JOIN users ON new_event.creator = users.id\n ", "describe": { "columns": [ { @@ -31,7 +31,41 @@ { "ordinal": 5, "name": "creator!: UserData", - "type_info": "Record" + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } } ], "parameters": { @@ -52,5 +86,5 @@ null ] }, - "hash": "960795ad9f2fec9f080c16a2570dc13e2c1ef472b769810e5e7e0b70624f0081" + "hash": "7c295838adf660d733e49ce9d818c910d7df0d66b3b8793716b6c44be8a576c2" } diff --git a/.sqlx/query-91ea1b7c65cf3e1d1e156f2ce26114fc5f79bec08e21aee12a849cc0219b37ae.json b/.sqlx/query-91ea1b7c65cf3e1d1e156f2ce26114fc5f79bec08e21aee12a849cc0219b37ae.json new file mode 100644 index 0000000..031ef42 --- /dev/null +++ b/.sqlx/query-91ea1b7c65cf3e1d1e156f2ce26114fc5f79bec08e21aee12a849cc0219b37ae.json @@ -0,0 +1,145 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH new_car AS (\n UPDATE car SET\n max_capacity = COALESCE($1, max_capacity),\n departure_time = COALESCE($2, departure_time),\n return_time = COALESCE($3, return_time),\n comment = COALESCE($4, comment)\n WHERE event_id = $5 AND id = $6 AND driver = $7 RETURNING *\n )\n SELECT new_car.id, new_car.event_id, new_car.max_capacity, new_car.departure_time, new_car.return_time, new_car.comment,\n ROW(driverUser.*)::users AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN ROW(riderUser.*)::users\n END\n ), NULL) as \"riders!: Vec\"\n FROM new_car\n JOIN users driverUser ON new_car.driver = driverUser.id\n LEFT JOIN rider on new_car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n GROUP BY new_car.id, new_car.event_id, new_car.max_capacity, new_car.departure_time, new_car.return_time, new_car.comment, driverUser.id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "event_id", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "max_capacity", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "departure_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "return_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "comment", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "driver!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + }, + { + "ordinal": 7, + "name": "riders!: Vec", + "type_info": { + "Custom": { + "name": "users[]", + "kind": { + "Array": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4", + "Timestamptz", + "Timestamptz", + "Varchar", + "Int4", + "Int4", + "Text" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + null, + null + ] + }, + "hash": "91ea1b7c65cf3e1d1e156f2ce26114fc5f79bec08e21aee12a849cc0219b37ae" +} diff --git a/.sqlx/query-b308e89ef9a0f59e2ccb7d3b5234e3c46d3121a45542053f2746206e78a2f462.json b/.sqlx/query-b308e89ef9a0f59e2ccb7d3b5234e3c46d3121a45542053f2746206e78a2f462.json new file mode 100644 index 0000000..96d39d6 --- /dev/null +++ b/.sqlx/query-b308e89ef9a0f59e2ccb7d3b5234e3c46d3121a45542053f2746206e78a2f462.json @@ -0,0 +1,139 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n ROW(driverUser.*)::users AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN ROW(riderUser.*)::users\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n WHERE event_id = $1 GROUP BY car.id, driverUser.id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "event_id", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "max_capacity", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "departure_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "return_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "comment", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "driver!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + }, + { + "ordinal": 7, + "name": "riders!: Vec", + "type_info": { + "Custom": { + "name": "users[]", + "kind": { + "Array": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + null, + null + ] + }, + "hash": "b308e89ef9a0f59e2ccb7d3b5234e3c46d3121a45542053f2746206e78a2f462" +} diff --git a/.sqlx/query-b5bdc526fd8c9eedae54349fa0377c2781da4d2d7daf8d007520cd8c127f5cba.json b/.sqlx/query-b5bdc526fd8c9eedae54349fa0377c2781da4d2d7daf8d007520cd8c127f5cba.json deleted file mode 100644 index 2606c90..0000000 --- a/.sqlx/query-b5bdc526fd8c9eedae54349fa0377c2781da4d2d7daf8d007520cd8c127f5cba.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n event.id, event.name, event.location, event.start_time, event.end_time,\n (users.id, users.realm, users.name, users.email) AS \"creator!: UserData\"\n FROM event\n JOIN users ON users.id = event.creator\n WHERE event.id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "location", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "start_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "end_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "creator!: UserData", - "type_info": "Record" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - null - ] - }, - "hash": "b5bdc526fd8c9eedae54349fa0377c2781da4d2d7daf8d007520cd8c127f5cba" -} diff --git a/.sqlx/query-c8d5936687078027d4eade18f615126dcea8a4d098ad7a0ee8b84f6cb05f8b20.json b/.sqlx/query-c8d5936687078027d4eade18f615126dcea8a4d098ad7a0ee8b84f6cb05f8b20.json new file mode 100644 index 0000000..85b3349 --- /dev/null +++ b/.sqlx/query-c8d5936687078027d4eade18f615126dcea8a4d098ad7a0ee8b84f6cb05f8b20.json @@ -0,0 +1,144 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH new_car AS (\n INSERT INTO car (event_id, driver, max_capacity, departure_time, return_time, comment)\n VALUES ($1, $2, $3, $4, $5, $6) RETURNING *\n )\n SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n ROW(driverUser.*)::users AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN ROW(riderUser.*)::users\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n GROUP BY car.id, driverUser.id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "event_id", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "max_capacity", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "departure_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "return_time", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "comment", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "driver!: UserData", + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + }, + { + "ordinal": 7, + "name": "riders!: Vec", + "type_info": { + "Custom": { + "name": "users[]", + "kind": { + "Array": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4", + "Varchar", + "Int4", + "Timestamptz", + "Timestamptz", + "Varchar" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + null, + null + ] + }, + "hash": "c8d5936687078027d4eade18f615126dcea8a4d098ad7a0ee8b84f6cb05f8b20" +} diff --git a/.sqlx/query-cb538ffcf3c889a3cb1b0b2ef60d088c2698d5c97c84a9f8ac2195487dfaf082.json b/.sqlx/query-cb538ffcf3c889a3cb1b0b2ef60d088c2698d5c97c84a9f8ac2195487dfaf082.json deleted file mode 100644 index a51f4f1..0000000 --- a/.sqlx/query-cb538ffcf3c889a3cb1b0b2ef60d088c2698d5c97c84a9f8ac2195487dfaf082.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n event.id, event.name, event.location, event.start_time, event.end_time,\n (users.id, users.realm::text, users.name, users.email) AS \"creator!: UserData\"\n FROM event\n JOIN users ON users.id = event.creator\n WHERE (end_time >= NOW() AND $1 = False) OR (end_time < NOW() AND $1)\n ORDER BY start_time ASC\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "location", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "start_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "end_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "creator!: UserData", - "type_info": "Record" - } - ], - "parameters": { - "Left": [ - "Bool" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - null - ] - }, - "hash": "cb538ffcf3c889a3cb1b0b2ef60d088c2698d5c97c84a9f8ac2195487dfaf082" -} diff --git a/.sqlx/query-dfb0b8e0b017987e4f43de0b622c046ec02715e7e3c7a52982905cc58dfd0997.json b/.sqlx/query-dfb0b8e0b017987e4f43de0b622c046ec02715e7e3c7a52982905cc58dfd0997.json deleted file mode 100644 index fe5980d..0000000 --- a/.sqlx/query-dfb0b8e0b017987e4f43de0b622c046ec02715e7e3c7a52982905cc58dfd0997.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email)\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n WHERE event_id = $1 GROUP BY car.id, driverUser.id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "event_id", - "type_info": "Int4" - }, - { - "ordinal": 2, - "name": "max_capacity", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "departure_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "return_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "comment", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "driver!: UserData", - "type_info": "Record" - }, - { - "ordinal": 7, - "name": "riders!: Vec", - "type_info": "RecordArray" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false, - true, - false, - false, - false, - false, - null, - null - ] - }, - "hash": "dfb0b8e0b017987e4f43de0b622c046ec02715e7e3c7a52982905cc58dfd0997" -} diff --git a/.sqlx/query-92ca921e97f450d289a9d99149b03067c7270886768deb35bf57037ec440b553.json b/.sqlx/query-ea23eaaeaa326a6f655f933870c9156db4ffa15eaedf5a602333f43d8d6602ca.json similarity index 55% rename from .sqlx/query-92ca921e97f450d289a9d99149b03067c7270886768deb35bf57037ec440b553.json rename to .sqlx/query-ea23eaaeaa326a6f655f933870c9156db4ffa15eaedf5a602333f43d8d6602ca.json index 92ac784..2e18427 100644 --- a/.sqlx/query-92ca921e97f450d289a9d99149b03067c7270886768deb35bf57037ec440b553.json +++ b/.sqlx/query-ea23eaaeaa326a6f655f933870c9156db4ffa15eaedf5a602333f43d8d6602ca.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH new_event AS (\n UPDATE event SET\n name = COALESCE($1, name),\n location = COALESCE($2, location),\n start_time = COALESCE($3, start_time),\n end_time = COALESCE($4, end_time)\n WHERE id = $5 AND creator = $6\n RETURNING *\n )\n SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time,\n (users.id, users.realm, users.name, users.email) AS \"creator!: UserData\"\n FROM new_event LEFT JOIN users ON new_event.creator = users.id\n ", + "query": "\n WITH new_event AS (\n UPDATE event SET\n name = COALESCE($1, name),\n location = COALESCE($2, location),\n start_time = COALESCE($3, start_time),\n end_time = COALESCE($4, end_time)\n WHERE id = $5 AND creator = $6\n RETURNING *\n )\n SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time,\n ROW(users.*)::users AS \"creator!: UserData\"\n FROM new_event JOIN users ON new_event.creator = users.id\n ", "describe": { "columns": [ { @@ -31,7 +31,41 @@ { "ordinal": 5, "name": "creator!: UserData", - "type_info": "Record" + "type_info": { + "Custom": { + "name": "users", + "kind": { + "Composite": [ + [ + "id", + "Varchar" + ], + [ + "realm", + { + "Custom": { + "name": "user_realm", + "kind": { + "Enum": [ + "csh", + "google" + ] + } + } + } + ], + [ + "name", + "Varchar" + ], + [ + "email", + "Varchar" + ] + ] + } + } + } } ], "parameters": { @@ -53,5 +87,5 @@ null ] }, - "hash": "92ca921e97f450d289a9d99149b03067c7270886768deb35bf57037ec440b553" + "hash": "ea23eaaeaa326a6f655f933870c9156db4ffa15eaedf5a602333f43d8d6602ca" } diff --git a/.sqlx/query-eebbe5ef1108c876cbc497fdd8d67638e3754f6f9f6d19109b234fd0545d60b5.json b/.sqlx/query-eebbe5ef1108c876cbc497fdd8d67638e3754f6f9f6d19109b234fd0545d60b5.json deleted file mode 100644 index 2246270..0000000 --- a/.sqlx/query-eebbe5ef1108c876cbc497fdd8d67638e3754f6f9f6d19109b234fd0545d60b5.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH new_car AS (\n INSERT INTO car (event_id, driver, max_capacity, departure_time, return_time, comment)\n VALUES ($1, $2, $3, $4, $5, $6) RETURNING *\n )\n SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment,\n (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS \"driver!: UserData\",\n ARRAY_REMOVE(ARRAY_AGG(\n CASE WHEN riderUser.id IS NOT NULL\n THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email)\n END\n ), NULL) as \"riders!: Vec\"\n FROM car\n JOIN users driverUser ON car.driver = driverUser.id\n LEFT JOIN rider on car.id = rider.car_id\n LEFT JOIN users riderUser ON rider.rider = riderUser.id\n GROUP BY car.id, driverUser.id\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "event_id", - "type_info": "Int4" - }, - { - "ordinal": 2, - "name": "max_capacity", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "departure_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "return_time", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "comment", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "driver!: UserData", - "type_info": "Record" - }, - { - "ordinal": 7, - "name": "riders!: Vec", - "type_info": "RecordArray" - } - ], - "parameters": { - "Left": [ - "Int4", - "Varchar", - "Int4", - "Timestamptz", - "Timestamptz", - "Varchar" - ] - }, - "nullable": [ - false, - true, - false, - false, - false, - false, - null, - null - ] - }, - "hash": "eebbe5ef1108c876cbc497fdd8d67638e3754f6f9f6d19109b234fd0545d60b5" -} diff --git a/src/db/car.rs b/src/db/car.rs index 94b1119..c7c0fb3 100644 --- a/src/db/car.rs +++ b/src/db/car.rs @@ -94,10 +94,10 @@ impl Car { VALUES ($1, $2, $3, $4, $5, $6) RETURNING * ) SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment, - (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS "driver!: UserData", + ROW(driverUser.*)::users AS "driver!: UserData", ARRAY_REMOVE(ARRAY_AGG( CASE WHEN riderUser.id IS NOT NULL - THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email) + THEN ROW(riderUser.*)::users END ), NULL) as "riders!: Vec" FROM car @@ -138,10 +138,10 @@ impl Car { WHERE event_id = $5 AND id = $6 AND driver = $7 RETURNING * ) SELECT new_car.id, new_car.event_id, new_car.max_capacity, new_car.departure_time, new_car.return_time, new_car.comment, - (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS "driver!: UserData", + ROW(driverUser.*)::users AS "driver!: UserData", ARRAY_REMOVE(ARRAY_AGG( CASE WHEN riderUser.id IS NOT NULL - THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email) + THEN ROW(riderUser.*)::users END ), NULL) as "riders!: Vec" FROM new_car @@ -168,10 +168,10 @@ impl Car { query_as!( Car, r#"SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment, - (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS "driver!: UserData", + ROW(driverUser.*)::users AS "driver!: UserData", ARRAY_REMOVE(ARRAY_AGG( CASE WHEN riderUser.id IS NOT NULL - THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email) + THEN ROW(riderUser.*)::users END ), NULL) as "riders!: Vec" FROM car @@ -190,10 +190,10 @@ impl Car { query_as!( Car, r#"SELECT car.id, car.event_id, car.max_capacity, car.departure_time, car.return_time, car.comment, - (driverUser.id, driverUser.realm::text, driverUser.name, driverUser.email) AS "driver!: UserData", + ROW(driverUser.*)::users AS "driver!: UserData", ARRAY_REMOVE(ARRAY_AGG( CASE WHEN riderUser.id IS NOT NULL - THEN (riderUser.id, riderUser.realm::text, riderUser.name, riderUser.email) + THEN ROW(riderUser.*)::users END ), NULL) as "riders!: Vec" FROM car diff --git a/src/db/event.rs b/src/db/event.rs index f8875e2..73059c8 100644 --- a/src/db/event.rs +++ b/src/db/event.rs @@ -60,7 +60,7 @@ impl Event { INSERT INTO event (name, location, start_time, end_time, creator) VALUES ($1, $2, $3, $4, $5) RETURNING * ) SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time, - (users.id, users.realm, users.name, users.email) AS "creator!: UserData" + (users.id, users.realm, users.name, users.email)::users AS "creator!: UserData" FROM new_event LEFT JOIN users ON new_event.creator = users.id "#, data.name, data.location, data.start_time, data.end_time, creator_id @@ -90,8 +90,8 @@ impl Event { RETURNING * ) SELECT new_event.id, new_event.name, new_event.location, new_event.start_time, new_event.end_time, - (users.id, users.realm, users.name, users.email) AS "creator!: UserData" - FROM new_event LEFT JOIN users ON new_event.creator = users.id + ROW(users.*)::users AS "creator!: UserData" + FROM new_event JOIN users ON new_event.creator = users.id "#, data.name, data.location, @@ -112,7 +112,7 @@ impl Event { r#" SELECT event.id, event.name, event.location, event.start_time, event.end_time, - (users.id, users.realm::text, users.name, users.email) AS "creator!: UserData" + ROW(users.*)::users AS "creator!: UserData" FROM event JOIN users ON users.id = event.creator WHERE (end_time >= NOW() AND $1 = False) OR (end_time < NOW() AND $1) @@ -133,7 +133,7 @@ impl Event { r#" SELECT event.id, event.name, event.location, event.start_time, event.end_time, - (users.id, users.realm, users.name, users.email) AS "creator!: UserData" + ROW(users.*)::users AS "creator!: UserData" FROM event JOIN users ON users.id = event.creator WHERE event.id = $1 diff --git a/src/db/user.rs b/src/db/user.rs index a70510b..d45d1e0 100644 --- a/src/db/user.rs +++ b/src/db/user.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use sqlx::{query_as, Executor, Postgres}; use utoipa::ToSchema; -#[derive(Serialize, Deserialize, sqlx::Type)] +#[derive(Serialize, Deserialize, sqlx::Type, Clone, PartialEq)] #[sqlx(type_name = "user_realm", rename_all = "lowercase")] pub enum UserRealm { Csh, @@ -16,7 +16,7 @@ pub enum UserRealm { #[serde(rename_all = "camelCase")] pub struct UserData { pub id: String, - pub realm: String, + pub realm: UserRealm, pub name: String, pub email: String, } @@ -37,7 +37,7 @@ impl UserData { r#"INSERT INTO users (id, realm, name, email) VALUES ($1, $2, $3, $4) ON CONFLICT (id) DO UPDATE SET realm = EXCLUDED.realm, name = EXCLUDED.name, email = EXCLUDED.email - RETURNING id AS "id!", realm::text AS "realm!", name AS "name!", email AS "email!";"#, + RETURNING id AS "id!", realm AS "realm!: UserRealm", name AS "name!", email AS "email!";"#, id, realm as _, name, @@ -50,7 +50,7 @@ impl UserData { where C: Executor<'c, Database = Postgres>, { - query_as!(UserData, r#"SELECT id AS "id!", realm::text AS "realm!", name AS "name!", email AS "email!" FROM users WHERE LOWER(name) LIKE $1 OR LOWER(email) LIKE $1;"#, query.to_lowercase()) + query_as!(UserData, r#"SELECT id AS "id!", realm AS "realm!: UserRealm", name AS "name!", email AS "email!" FROM users WHERE LOWER(name) LIKE $1 OR LOWER(email) LIKE $1;"#, query.to_lowercase()) .fetch_all(conn) .await.map_err(|err| anyhow!("Failed to get users: {}", err)) } @@ -61,7 +61,7 @@ impl UserData { let data = query_as!( UserData, r#" - SELECT id AS "id!", realm::text AS "realm!", name AS "name!", email AS "email!" + SELECT id AS "id!", realm AS "realm!: UserRealm", name AS "name!", email AS "email!" FROM users WHERE id IN (SELECT UNNEST($1::VARCHAR[])) "#, &ids @@ -80,7 +80,7 @@ impl UserData { query_as!( UserData, r#" - SELECT users.id AS "id!", users.realm::text AS "realm!", users.name AS "name!", users.email AS "email!" + SELECT users.id AS "id!", users.realm AS "realm!: UserRealm", users.name AS "name!", users.email AS "email!" FROM users where id = $1; "#, id ).fetch_optional(conn).await diff --git a/src/worker.rs b/src/worker.rs index bd78fa1..af79572 100644 --- a/src/worker.rs +++ b/src/worker.rs @@ -9,7 +9,7 @@ use std::time::Duration; use crate::{ app::{RedisJob, SimpleRiderChange}, - db::user::UserData, + db::user::{UserData, UserRealm}, pings::PingClient, }; @@ -56,7 +56,7 @@ async fn get_driver(car_id: i32, db_pool: &Pool) -> Result { query_as!( UserData, r#" - SELECT users.id AS "id!", users.realm::text AS "realm!", users.name AS "name!", users.email AS "email!" + SELECT users.id AS "id!", users.realm AS "realm!: UserRealm", users.name AS "name!", users.email AS "email!" FROM car JOIN users ON car.driver = users.id WHERE car.id = $1; "#, car_id ).fetch_one(db_pool).await.map_err(|err| anyhow!("Failed to get driver: {}", err)) @@ -90,7 +90,7 @@ async fn work(job: &Item, db_pool: &Pool, pings: &PingClient) -> Resul msg: err.to_string(), should_retry: false, })?; - if driver.realm != "csh" { + if driver.realm != UserRealm::Csh { return Ok(()); } pings @@ -113,7 +113,7 @@ async fn work(job: &Item, db_pool: &Pool, pings: &PingClient) -> Resul msg: err.to_string(), should_retry: false, })?; - if driver.realm != "csh" { + if driver.realm != UserRealm::Csh { return Ok(()); } pings @@ -161,7 +161,7 @@ async fn work(job: &Item, db_pool: &Pool, pings: &PingClient) -> Resul msg: "User was missing from map.".to_string(), should_retry: false, })?; - if user.realm != "csh" { + if user.realm != UserRealm::Csh { continue; } pings @@ -181,7 +181,7 @@ async fn work(job: &Item, db_pool: &Pool, pings: &PingClient) -> Resul msg: "User was missing from map.".to_string(), should_retry: false, })?; - if user.realm != "csh" { + if user.realm != UserRealm::Csh { continue; } pings