Реформат путей к эндпоинтам.

Добавлен экстрактор пользователя с дополнительными полями.

Добавлена связь таблиц User и FCM.

Завершена реализация авторизации с помощью VK ID.

Добавлен эндпоинт fcm/update-callback/{version}.
This commit is contained in:
2025-04-14 22:04:41 +04:00
parent 680419ea78
commit 5b6f5c830f
27 changed files with 406 additions and 106 deletions

View File

@@ -2,7 +2,7 @@ pub mod users {
use crate::database::models::User;
use crate::database::schema::users::dsl::users;
use crate::database::schema::users::dsl::*;
use diesel::{ExpressionMethods, QueryResult, insert_into};
use diesel::{insert_into, ExpressionMethods, QueryResult};
use diesel::{PgConnection, SelectableHelper};
use diesel::{QueryDsl, RunQueryDsl};
use std::ops::DerefMut;
@@ -31,10 +31,7 @@ pub mod users {
.first(con)
}
pub fn get_by_vk_id(
connection: &Mutex<PgConnection>,
_vk_id: i32,
) -> QueryResult<User> {
pub fn get_by_vk_id(connection: &Mutex<PgConnection>, _vk_id: i32) -> QueryResult<User> {
let mut lock = connection.lock().unwrap();
let con = lock.deref_mut();
@@ -89,7 +86,7 @@ pub mod users {
Err(_) => false,
}
}
#[cfg(test)]
pub fn insert_or_ignore(connection: &Mutex<PgConnection>, user: &User) -> QueryResult<usize> {
let mut lock = connection.lock().unwrap();
@@ -101,3 +98,21 @@ pub mod users {
.execute(con)
}
}
pub mod fcm {
use crate::database::models::{User, FCM};
use diesel::QueryDsl;
use diesel::RunQueryDsl;
use diesel::{BelongingToDsl, PgConnection, QueryResult, SelectableHelper};
use std::ops::DerefMut;
use std::sync::Mutex;
pub fn from_user(connection: &Mutex<PgConnection>, user: &User) -> QueryResult<FCM> {
let mut lock = connection.lock().unwrap();
let con = lock.deref_mut();
FCM::belonging_to(&user)
.select(FCM::as_select())
.get_result(con)
}
}

View File

@@ -1,16 +1,11 @@
use actix_macros::ResponderJson;
use diesel::QueryId;
use diesel::prelude::*;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(
diesel_derive_enum::DbEnum,
Serialize,
Deserialize,
Debug,
Clone,
Copy,
PartialEq,
utoipa::ToSchema,
Copy, Clone, PartialEq, Debug, Serialize, Deserialize, diesel_derive_enum::DbEnum, ToSchema,
)]
#[ExistingTypePath = "crate::database::schema::sql_types::UserRole"]
#[DbValueStyle = "UPPERCASE"]
@@ -25,11 +20,12 @@ pub enum UserRole {
Identifiable,
AsChangeset,
Queryable,
QueryId,
Selectable,
Serialize,
Insertable,
Debug,
utoipa::ToSchema,
ToSchema,
ResponderJson,
)]
#[diesel(table_name = crate::database::schema::users)]
@@ -59,3 +55,29 @@ pub struct User {
/// Версия установленного приложения Polytechnic+
pub version: String,
}
#[derive(
Debug,
Serialize,
Identifiable,
Queryable,
Selectable,
Insertable,
AsChangeset,
Associations,
ToSchema,
ResponderJson,
)]
#[diesel(belongs_to(User))]
#[diesel(table_name = crate::database::schema::fcm)]
#[diesel(primary_key(user_id))]
pub struct FCM {
/// UUID аккаунта.
pub user_id: String,
/// FCM токен.
pub token: String,
/// Список топиков, на которые подписан пользователь.
pub topics: Vec<Option<String>>,
}

View File

@@ -10,7 +10,7 @@ diesel::table! {
fcm (user_id) {
user_id -> Text,
token -> Text,
topics -> Nullable<Array<Nullable<Text>>>,
topics -> Array<Nullable<Text>>,
}
}