mirror of
https://github.com/flibusta-apps/users_settings_server.git
synced 2025-12-06 06:35:39 +01:00
Fix
This commit is contained in:
@@ -9,7 +9,7 @@ use std::net::SocketAddr;
|
|||||||
|
|
||||||
|
|
||||||
async fn start_app() {
|
async fn start_app() {
|
||||||
let app = views::get_router();
|
let app = views::get_router().await;
|
||||||
|
|
||||||
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));
|
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
use axum::{Router, response::IntoResponse, routing::{get, post}, extract::Path, Json, http::StatusCode};
|
use axum::{Router, response::IntoResponse, routing::{get, post}, extract::Path, Json, http::StatusCode};
|
||||||
use chrono::Duration;
|
use chrono::Duration;
|
||||||
|
|
||||||
use crate::{prisma::chat_donate_notifications, db::get_prisma_client};
|
use crate::prisma::chat_donate_notifications;
|
||||||
|
|
||||||
|
use super::Database;
|
||||||
|
|
||||||
|
|
||||||
async fn is_need_send(
|
async fn is_need_send(
|
||||||
Path(chat_id): Path<i64>
|
Path(chat_id): Path<i64>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
const NOTIFICATION_DELTA_DAYS: i64 = 60;
|
const NOTIFICATION_DELTA_DAYS: i64 = 60;
|
||||||
|
|
||||||
let client = get_prisma_client().await;
|
let notification = db.chat_donate_notifications()
|
||||||
|
|
||||||
let notification = client.chat_donate_notifications()
|
|
||||||
.find_unique(chat_donate_notifications::chat_id::equals(chat_id))
|
.find_unique(chat_donate_notifications::chat_id::equals(chat_id))
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
@@ -31,11 +32,10 @@ async fn is_need_send(
|
|||||||
|
|
||||||
|
|
||||||
async fn mark_sended(
|
async fn mark_sended(
|
||||||
Path(chat_id): Path<i64>
|
Path(chat_id): Path<i64>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let client = get_prisma_client().await;
|
let _ = db.chat_donate_notifications()
|
||||||
|
|
||||||
let _ = client.chat_donate_notifications()
|
|
||||||
.upsert(
|
.upsert(
|
||||||
chat_donate_notifications::chat_id::equals(chat_id),
|
chat_donate_notifications::chat_id::equals(chat_id),
|
||||||
chat_donate_notifications::create(
|
chat_donate_notifications::create(
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
use axum::{Router, response::IntoResponse, routing::get, Json, extract::Path, http::StatusCode};
|
use axum::{Router, response::IntoResponse, routing::get, Json, extract::Path, http::StatusCode};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::{prisma::language, db::get_prisma_client};
|
use crate::prisma::language;
|
||||||
|
use super::Database;
|
||||||
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
@@ -25,10 +26,10 @@ impl From<language::Data> for LanguageDetail {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn get_languages() -> impl IntoResponse {
|
async fn get_languages(
|
||||||
let client = get_prisma_client().await;
|
db: Database
|
||||||
|
) -> impl IntoResponse {
|
||||||
let languages: Vec<LanguageDetail> = client.language()
|
let languages: Vec<LanguageDetail> = db.language()
|
||||||
.find_many(vec![])
|
.find_many(vec![])
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
@@ -42,11 +43,10 @@ async fn get_languages() -> impl IntoResponse {
|
|||||||
|
|
||||||
|
|
||||||
async fn get_language_by_code(
|
async fn get_language_by_code(
|
||||||
Path(code): Path<String>
|
Path(code): Path<String>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let client = get_prisma_client().await;
|
let language = db.language()
|
||||||
|
|
||||||
let language = client.language()
|
|
||||||
.find_unique(language::code::equals(code))
|
.find_unique(language::code::equals(code))
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
use axum::{Router, response::Response, http::{StatusCode, self, Request}, middleware::{Next, self}};
|
use axum::{Router, response::Response, http::{StatusCode, self, Request}, middleware::{Next, self}, Extension};
|
||||||
use tower_http::trace::{TraceLayer, self};
|
use tower_http::trace::{TraceLayer, self};
|
||||||
use tracing::Level;
|
use tracing::Level;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::config::CONFIG;
|
use crate::{config::CONFIG, db::get_prisma_client, prisma::PrismaClient};
|
||||||
|
|
||||||
pub mod users;
|
pub mod users;
|
||||||
pub mod pagination;
|
pub mod pagination;
|
||||||
@@ -10,6 +11,9 @@ pub mod languages;
|
|||||||
pub mod donate_notifications;
|
pub mod donate_notifications;
|
||||||
|
|
||||||
|
|
||||||
|
pub type Database = Extension<Arc<PrismaClient>>;
|
||||||
|
|
||||||
|
|
||||||
async fn auth<B>(req: Request<B>, next: Next<B>) -> Result<Response, StatusCode> {
|
async fn auth<B>(req: Request<B>, next: Next<B>) -> Result<Response, StatusCode> {
|
||||||
let auth_header = req.headers()
|
let auth_header = req.headers()
|
||||||
.get(http::header::AUTHORIZATION)
|
.get(http::header::AUTHORIZATION)
|
||||||
@@ -29,7 +33,9 @@ async fn auth<B>(req: Request<B>, next: Next<B>) -> Result<Response, StatusCode>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn get_router() -> Router {
|
pub async fn get_router() -> Router {
|
||||||
|
let client = Arc::new(get_prisma_client().await);
|
||||||
|
|
||||||
Router::new()
|
Router::new()
|
||||||
.nest("/users/", users::get_router())
|
.nest("/users/", users::get_router())
|
||||||
.nest("/languages/", languages::get_router())
|
.nest("/languages/", languages::get_router())
|
||||||
@@ -42,4 +48,5 @@ pub fn get_router() -> Router {
|
|||||||
.on_response(trace::DefaultOnResponse::new()
|
.on_response(trace::DefaultOnResponse::new()
|
||||||
.level(Level::INFO)),
|
.level(Level::INFO)),
|
||||||
)
|
)
|
||||||
|
.layer(Extension(client))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,27 +2,26 @@ pub mod serializers;
|
|||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
||||||
use axum::{Router, response::IntoResponse, routing::{get, post}, extract::{Query, Path, self}, Json, http::StatusCode};
|
use axum::{Router, response::IntoResponse, routing::{get, post}, extract::{Query, Path, self}, Json, http::StatusCode};
|
||||||
use crate::{prisma::{user_settings, language_to_user, user_activity}, db::get_prisma_client};
|
use crate::prisma::{user_settings, language_to_user, user_activity};
|
||||||
|
|
||||||
use self::{serializers::{UserDetail, CreateOrUpdateUserData}, utils::update_languages};
|
use self::{serializers::{UserDetail, CreateOrUpdateUserData}, utils::update_languages};
|
||||||
|
|
||||||
use super::pagination::{Pagination, Page};
|
use super::{pagination::{Pagination, Page}, Database};
|
||||||
|
|
||||||
|
|
||||||
async fn get_users(
|
async fn get_users(
|
||||||
pagination: Query<Pagination>
|
pagination: Query<Pagination>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let pagination: Pagination = pagination.0;
|
let pagination: Pagination = pagination.0;
|
||||||
|
|
||||||
let client = get_prisma_client().await;
|
let users_count = db.user_settings()
|
||||||
|
|
||||||
let users_count = client.user_settings()
|
|
||||||
.count(vec![])
|
.count(vec![])
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let users: Vec<UserDetail> = client.user_settings()
|
let users: Vec<UserDetail> = db.user_settings()
|
||||||
.find_many(vec![])
|
.find_many(vec![])
|
||||||
.with(
|
.with(
|
||||||
user_settings::languages::fetch(vec![])
|
user_settings::languages::fetch(vec![])
|
||||||
@@ -49,11 +48,10 @@ async fn get_users(
|
|||||||
|
|
||||||
|
|
||||||
async fn get_user(
|
async fn get_user(
|
||||||
Path(user_id): Path<i64>
|
Path(user_id): Path<i64>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let client = get_prisma_client().await;
|
let user = db.user_settings()
|
||||||
|
|
||||||
let user = client.user_settings()
|
|
||||||
.find_unique(user_settings::user_id::equals(user_id))
|
.find_unique(user_settings::user_id::equals(user_id))
|
||||||
.with(
|
.with(
|
||||||
user_settings::languages::fetch(vec![])
|
user_settings::languages::fetch(vec![])
|
||||||
@@ -74,11 +72,10 @@ async fn get_user(
|
|||||||
|
|
||||||
|
|
||||||
async fn create_or_update_user(
|
async fn create_or_update_user(
|
||||||
extract::Json(data): extract::Json<CreateOrUpdateUserData>
|
db: Database,
|
||||||
|
extract::Json(data): extract::Json<CreateOrUpdateUserData>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let client = get_prisma_client().await;
|
let user = db.user_settings()
|
||||||
|
|
||||||
let user = client.user_settings()
|
|
||||||
.upsert(
|
.upsert(
|
||||||
user_settings::user_id::equals(data.user_id),
|
user_settings::user_id::equals(data.user_id),
|
||||||
user_settings::create(
|
user_settings::create(
|
||||||
@@ -107,9 +104,9 @@ async fn create_or_update_user(
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let user_id = user.id;
|
let user_id = user.id;
|
||||||
update_languages(user, data.allowed_langs).await;
|
update_languages(user, data.allowed_langs, db.clone()).await;
|
||||||
|
|
||||||
let user = client.user_settings()
|
let user = db.user_settings()
|
||||||
.find_unique(user_settings::id::equals(user_id))
|
.find_unique(user_settings::id::equals(user_id))
|
||||||
.with(
|
.with(
|
||||||
user_settings::languages::fetch(vec![])
|
user_settings::languages::fetch(vec![])
|
||||||
@@ -128,10 +125,9 @@ async fn create_or_update_user(
|
|||||||
|
|
||||||
async fn update_activity(
|
async fn update_activity(
|
||||||
Path(user_id): Path<i64>,
|
Path(user_id): Path<i64>,
|
||||||
|
db: Database
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let client = get_prisma_client().await;
|
let user = db.user_settings()
|
||||||
|
|
||||||
let user = client.user_settings()
|
|
||||||
.find_unique(user_settings::user_id::equals(user_id))
|
.find_unique(user_settings::user_id::equals(user_id))
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
@@ -142,7 +138,7 @@ async fn update_activity(
|
|||||||
None => return StatusCode::NOT_FOUND.into_response(),
|
None => return StatusCode::NOT_FOUND.into_response(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let _ = client.user_activity()
|
let _ = db.user_activity()
|
||||||
.upsert(
|
.upsert(
|
||||||
user_activity::user_id::equals(user.id),
|
user_activity::user_id::equals(user.id),
|
||||||
user_activity::create(
|
user_activity::create(
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use crate::{prisma::{user_settings, language, language_to_user}, db::get_prisma_client};
|
use crate::{prisma::{user_settings, language, language_to_user}, views::Database};
|
||||||
|
|
||||||
|
|
||||||
pub async fn update_languages(
|
pub async fn update_languages(
|
||||||
user: user_settings::Data,
|
user: user_settings::Data,
|
||||||
new_langs: Vec<String>
|
new_langs: Vec<String>,
|
||||||
|
db: Database
|
||||||
) {
|
) {
|
||||||
let client = get_prisma_client().await;
|
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
{
|
{
|
||||||
let need_delete: Vec<_> = user.languages().unwrap()
|
let need_delete: Vec<_> = user.languages().unwrap()
|
||||||
@@ -21,7 +20,7 @@ pub async fn update_languages(
|
|||||||
.map(|(id, _)| id)
|
.map(|(id, _)| id)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let _ = client.language_to_user()
|
let _ = db.language_to_user()
|
||||||
.delete_many(
|
.delete_many(
|
||||||
vec![language_to_user::id::in_vec(need_delete)]
|
vec![language_to_user::id::in_vec(need_delete)]
|
||||||
)
|
)
|
||||||
@@ -31,7 +30,7 @@ pub async fn update_languages(
|
|||||||
|
|
||||||
// Create
|
// Create
|
||||||
{
|
{
|
||||||
let languages: HashMap<_, _> = client.language()
|
let languages: HashMap<_, _> = db.language()
|
||||||
.find_many(vec![])
|
.find_many(vec![])
|
||||||
.exec()
|
.exec()
|
||||||
.await
|
.await
|
||||||
@@ -51,7 +50,7 @@ pub async fn update_languages(
|
|||||||
.map(|code| *languages.get(&code).unwrap())
|
.map(|code| *languages.get(&code).unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let _ = client.language_to_user()
|
let _ = db.language_to_user()
|
||||||
.create_many(
|
.create_many(
|
||||||
need_create
|
need_create
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
Reference in New Issue
Block a user