mirror of
https://github.com/n08i40k/schedule-parser-rusted.git
synced 2025-12-06 17:57:47 +03:00
refactor(android)!: remove FCM support
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
mod set_token;
|
||||
mod update_callback;
|
||||
|
||||
pub use set_token::*;
|
||||
pub use update_callback::*;
|
||||
@@ -1,94 +0,0 @@
|
||||
use crate::database;
|
||||
use crate::database::models::FCM;
|
||||
use crate::extractors::authorized_user::UserExtractor;
|
||||
use crate::extractors::base::AsyncExtractor;
|
||||
use crate::state::AppState;
|
||||
use actix_web::{HttpResponse, Responder, patch, web};
|
||||
use diesel::{RunQueryDsl, SaveChangesDsl};
|
||||
use firebase_messaging_rs::topic::TopicManagementSupport;
|
||||
use serde::Deserialize;
|
||||
use std::ops::DerefMut;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Params {
|
||||
pub token: String,
|
||||
}
|
||||
|
||||
async fn get_fcm(
|
||||
app_state: &web::Data<AppState>,
|
||||
user_data: &UserExtractor<true>,
|
||||
token: String,
|
||||
) -> Result<FCM, diesel::result::Error> {
|
||||
match user_data.fcm() {
|
||||
Some(fcm) => {
|
||||
let mut fcm = fcm.clone();
|
||||
fcm.token = token;
|
||||
|
||||
Ok(fcm)
|
||||
}
|
||||
None => {
|
||||
let fcm = FCM {
|
||||
user_id: user_data.user().id.clone(),
|
||||
token,
|
||||
topics: vec![],
|
||||
};
|
||||
|
||||
match diesel::insert_into(database::schema::fcm::table)
|
||||
.values(&fcm)
|
||||
.execute(app_state.get_database().await.deref_mut())
|
||||
{
|
||||
Ok(_) => Ok(fcm),
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[utoipa::path(responses((status = OK)))]
|
||||
#[patch("/set-token")]
|
||||
pub async fn set_token(
|
||||
app_state: web::Data<AppState>,
|
||||
web::Query(params): web::Query<Params>,
|
||||
user_data: AsyncExtractor<UserExtractor<true>>,
|
||||
) -> impl Responder {
|
||||
let user_data = user_data.into_inner();
|
||||
|
||||
// If token not changes - exit.
|
||||
if let Some(fcm) = user_data.fcm() {
|
||||
if fcm.token == params.token {
|
||||
return HttpResponse::Ok();
|
||||
}
|
||||
}
|
||||
|
||||
let fcm = get_fcm(&app_state, &user_data, params.token.clone()).await;
|
||||
if let Err(e) = fcm {
|
||||
eprintln!("Failed to get FCM: {e}");
|
||||
return HttpResponse::Ok();
|
||||
}
|
||||
|
||||
let mut fcm = fcm.ok().unwrap();
|
||||
|
||||
// Add default topics.
|
||||
if !fcm.topics.contains(&Some("common".to_string())) {
|
||||
fcm.topics.push(Some("common".to_string()));
|
||||
}
|
||||
|
||||
fcm.save_changes::<FCM>(app_state.get_database().await.deref_mut())
|
||||
.unwrap();
|
||||
|
||||
let fcm_client = app_state.get_fcm_client().await.unwrap();
|
||||
|
||||
for topic in fcm.topics.clone() {
|
||||
if let Some(topic) = topic {
|
||||
if let Err(error) = fcm_client
|
||||
.register_token_to_topic(&*topic, &*fcm.token)
|
||||
.await
|
||||
{
|
||||
eprintln!("Failed to subscribe token to topic: {:?}", error);
|
||||
return HttpResponse::Ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HttpResponse::Ok()
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
use crate::database::driver::users::UserSave;
|
||||
use crate::database::models::User;
|
||||
use crate::extractors::base::AsyncExtractor;
|
||||
use crate::state::AppState;
|
||||
use actix_web::{HttpResponse, Responder, post, web};
|
||||
|
||||
#[utoipa::path(responses(
|
||||
(status = OK),
|
||||
(status = INTERNAL_SERVER_ERROR)
|
||||
))]
|
||||
#[post("/update-callback/{version}")]
|
||||
async fn update_callback(
|
||||
app_state: web::Data<AppState>,
|
||||
version: web::Path<String>,
|
||||
user: AsyncExtractor<User>,
|
||||
) -> impl Responder {
|
||||
let mut user = user.into_inner();
|
||||
|
||||
user.android_version = Some(version.into_inner());
|
||||
|
||||
user.save(&app_state).await.unwrap();
|
||||
|
||||
HttpResponse::Ok()
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
pub mod auth;
|
||||
pub mod fcm;
|
||||
pub mod flow;
|
||||
pub mod schedule;
|
||||
mod schema;
|
||||
|
||||
@@ -131,7 +131,7 @@ pub mod user {
|
||||
use serde::Serialize;
|
||||
|
||||
//noinspection SpellCheckingInspection
|
||||
/// Используется для скрытия чувствительных полей, таких как хеш пароля или FCM
|
||||
/// Используется для скрытия чувствительных полей, таких как хеш пароля
|
||||
#[derive(Serialize, utoipa::ToSchema, ResponderJson, OkResponse)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct UserResponse {
|
||||
|
||||
Reference in New Issue
Block a user