diff --git a/.sqlx/query-160ba7ba8bd514083af2a982dca1a0f1bc85e5b73d81a12b67d6c2b0d90e5740.json b/.sqlx/query-160ba7ba8bd514083af2a982dca1a0f1bc85e5b73d81a12b67d6c2b0d90e5740.json new file mode 100644 index 0000000..ebf59e0 --- /dev/null +++ b/.sqlx/query-160ba7ba8bd514083af2a982dca1a0f1bc85e5b73d81a12b67d6c2b0d90e5740.json @@ -0,0 +1,85 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n ARRAY_AGG(ROW(\n languages.id,\n languages.label,\n languages.code\n )::user_language_type),\n ARRAY[]::user_language_type[]\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n WHERE user_settings.id = $1\n GROUP BY user_settings.id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "user_id", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "last_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "first_name", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "source", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "allowed_langs!: Vec", + "type_info": { + "Custom": { + "name": "user_language_type[]", + "kind": { + "Array": { + "Custom": { + "name": "user_language_type", + "kind": { + "Composite": [ + [ + "id", + "Int4" + ], + [ + "label", + "Varchar" + ], + [ + "code", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + null + ] + }, + "hash": "160ba7ba8bd514083af2a982dca1a0f1bc85e5b73d81a12b67d6c2b0d90e5740" +} diff --git a/.sqlx/query-30aefca980d6708fa760e7cb4196224c1c597c70e57ec71e6deb4556385d355d.json b/.sqlx/query-30aefca980d6708fa760e7cb4196224c1c597c70e57ec71e6deb4556385d355d.json new file mode 100644 index 0000000..299faba --- /dev/null +++ b/.sqlx/query-30aefca980d6708fa760e7cb4196224c1c597c70e57ec71e6deb4556385d355d.json @@ -0,0 +1,86 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n ARRAY_AGG(ROW(\n languages.id,\n languages.label,\n languages.code\n )::user_language_type),\n ARRAY[]::user_language_type[]\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n GROUP BY user_settings.id\n ORDER BY user_settings.id ASC\n OFFSET $1\n LIMIT $2\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "user_id", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "last_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "first_name", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "source", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "allowed_langs!: Vec", + "type_info": { + "Custom": { + "name": "user_language_type[]", + "kind": { + "Array": { + "Custom": { + "name": "user_language_type", + "kind": { + "Composite": [ + [ + "id", + "Int4" + ], + [ + "label", + "Varchar" + ], + [ + "code", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + null + ] + }, + "hash": "30aefca980d6708fa760e7cb4196224c1c597c70e57ec71e6deb4556385d355d" +} diff --git a/.sqlx/query-60a9a7320f1dc54783c6c02f0d56636865da20efa773cb3d9f2b78fb38416800.json b/.sqlx/query-60a9a7320f1dc54783c6c02f0d56636865da20efa773cb3d9f2b78fb38416800.json deleted file mode 100644 index 5a9d3e0..0000000 --- a/.sqlx/query-60a9a7320f1dc54783c6c02f0d56636865da20efa773cb3d9f2b78fb38416800.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n JSON_AGG(JSON_BUILD_OBJECT(\n 'id', languages.id,\n 'label', languages.label,\n 'code', languages.code\n )),\n '[]'::JSON\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n GROUP BY user_settings.id\n ORDER BY user_settings.id ASC\n OFFSET $1\n LIMIT $2\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "user_id", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "last_name", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "first_name", - "type_info": "Varchar" - }, - { - "ordinal": 4, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "source", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "allowed_langs!: Vec", - "type_info": "Json" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - null - ] - }, - "hash": "60a9a7320f1dc54783c6c02f0d56636865da20efa773cb3d9f2b78fb38416800" -} diff --git a/.sqlx/query-cc20029c1ac8cde73bd2a08d2a17740a08c54cf2af13fea288593a94343a71fe.json b/.sqlx/query-cc20029c1ac8cde73bd2a08d2a17740a08c54cf2af13fea288593a94343a71fe.json new file mode 100644 index 0000000..b97584b --- /dev/null +++ b/.sqlx/query-cc20029c1ac8cde73bd2a08d2a17740a08c54cf2af13fea288593a94343a71fe.json @@ -0,0 +1,85 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n ARRAY_AGG(ROW(\n languages.id,\n languages.label,\n languages.code\n )::user_language_type),\n ARRAY[]::user_language_type[]\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n WHERE user_settings.user_id = $1\n GROUP BY user_settings.id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "user_id", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "last_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "first_name", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "source", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "allowed_langs!: Vec", + "type_info": { + "Custom": { + "name": "user_language_type[]", + "kind": { + "Array": { + "Custom": { + "name": "user_language_type", + "kind": { + "Composite": [ + [ + "id", + "Int4" + ], + [ + "label", + "Varchar" + ], + [ + "code", + "Varchar" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + null + ] + }, + "hash": "cc20029c1ac8cde73bd2a08d2a17740a08c54cf2af13fea288593a94343a71fe" +} diff --git a/.sqlx/query-d798dbf83070efc88e92b05c2e879d2bc1327b1eadc6576063129e9b35340743.json b/.sqlx/query-d798dbf83070efc88e92b05c2e879d2bc1327b1eadc6576063129e9b35340743.json deleted file mode 100644 index fc01be6..0000000 --- a/.sqlx/query-d798dbf83070efc88e92b05c2e879d2bc1327b1eadc6576063129e9b35340743.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n JSON_AGG(JSON_BUILD_OBJECT(\n 'id', languages.id,\n 'label', languages.label,\n 'code', languages.code\n )),\n '[]'::JSON\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n WHERE user_settings.id = $1\n GROUP BY user_settings.id\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "user_id", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "last_name", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "first_name", - "type_info": "Varchar" - }, - { - "ordinal": 4, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "source", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "allowed_langs!: Vec", - "type_info": "Json" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - null - ] - }, - "hash": "d798dbf83070efc88e92b05c2e879d2bc1327b1eadc6576063129e9b35340743" -} diff --git a/.sqlx/query-e8525be82859dfef8591206896d88e268c502709b8f6f1a558ff9834d11e951b.json b/.sqlx/query-e8525be82859dfef8591206896d88e268c502709b8f6f1a558ff9834d11e951b.json deleted file mode 100644 index 18b8b1f..0000000 --- a/.sqlx/query-e8525be82859dfef8591206896d88e268c502709b8f6f1a558ff9834d11e951b.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n user_settings.id,\n user_settings.user_id,\n user_settings.last_name,\n user_settings.first_name,\n user_settings.username,\n user_settings.source,\n COALESCE(\n JSON_AGG(JSON_BUILD_OBJECT(\n 'id', languages.id,\n 'label', languages.label,\n 'code', languages.code\n )),\n '[]'::JSON\n ) AS \"allowed_langs!: Vec\"\n FROM user_settings\n LEFT JOIN users_languages ON user_settings.id = users_languages.user\n LEFT JOIN languages ON users_languages.language = languages.id\n WHERE user_settings.user_id = $1\n GROUP BY user_settings.id\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "user_id", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "last_name", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "first_name", - "type_info": "Varchar" - }, - { - "ordinal": 4, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "source", - "type_info": "Varchar" - }, - { - "ordinal": 6, - "name": "allowed_langs!: Vec", - "type_info": "Json" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - null - ] - }, - "hash": "e8525be82859dfef8591206896d88e268c502709b8f6f1a558ff9834d11e951b" -} diff --git a/src/views/users/mod.rs b/src/views/users/mod.rs index 0ae9d92..b29816d 100644 --- a/src/views/users/mod.rs +++ b/src/views/users/mod.rs @@ -39,12 +39,12 @@ async fn get_users(pagination: Query, db: Database) -> impl IntoResp user_settings.username, user_settings.source, COALESCE( - JSON_AGG(JSON_BUILD_OBJECT( - 'id', languages.id, - 'label', languages.label, - 'code', languages.code - )), - '[]'::JSON + ARRAY_AGG(ROW( + languages.id, + languages.label, + languages.code + )::user_language_type), + ARRAY[]::user_language_type[] ) AS "allowed_langs!: Vec" FROM user_settings LEFT JOIN users_languages ON user_settings.id = users_languages.user @@ -76,12 +76,12 @@ async fn get_user(Path(user_id): Path, db: Database) -> impl IntoResponse { user_settings.username, user_settings.source, COALESCE( - JSON_AGG(JSON_BUILD_OBJECT( - 'id', languages.id, - 'label', languages.label, - 'code', languages.code - )), - '[]'::JSON + ARRAY_AGG(ROW( + languages.id, + languages.label, + languages.code + )::user_language_type), + ARRAY[]::user_language_type[] ) AS "allowed_langs!: Vec" FROM user_settings LEFT JOIN users_languages ON user_settings.id = users_languages.user @@ -138,12 +138,12 @@ async fn create_or_update_user( user_settings.username, user_settings.source, COALESCE( - JSON_AGG(JSON_BUILD_OBJECT( - 'id', languages.id, - 'label', languages.label, - 'code', languages.code - )), - '[]'::JSON + ARRAY_AGG(ROW( + languages.id, + languages.label, + languages.code + )::user_language_type), + ARRAY[]::user_language_type[] ) AS "allowed_langs!: Vec" FROM user_settings LEFT JOIN users_languages ON user_settings.id = users_languages.user diff --git a/src/views/users/serializers.rs b/src/views/users/serializers.rs index 97dd719..beb81fd 100644 --- a/src/views/users/serializers.rs +++ b/src/views/users/serializers.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; #[derive(sqlx::FromRow, sqlx::Type, Serialize)] +#[sqlx(type_name = "user_language_type")] pub struct UserLanguage { pub id: i32, pub label: String,