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() {
|
||||
let app = views::get_router();
|
||||
let app = views::get_router().await;
|
||||
|
||||
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 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(
|
||||
Path(chat_id): Path<i64>
|
||||
Path(chat_id): Path<i64>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
const NOTIFICATION_DELTA_DAYS: i64 = 60;
|
||||
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let notification = client.chat_donate_notifications()
|
||||
let notification = db.chat_donate_notifications()
|
||||
.find_unique(chat_donate_notifications::chat_id::equals(chat_id))
|
||||
.exec()
|
||||
.await
|
||||
@@ -31,11 +32,10 @@ async fn is_need_send(
|
||||
|
||||
|
||||
async fn mark_sended(
|
||||
Path(chat_id): Path<i64>
|
||||
Path(chat_id): Path<i64>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let _ = client.chat_donate_notifications()
|
||||
let _ = db.chat_donate_notifications()
|
||||
.upsert(
|
||||
chat_donate_notifications::chat_id::equals(chat_id),
|
||||
chat_donate_notifications::create(
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use axum::{Router, response::IntoResponse, routing::get, Json, extract::Path, http::StatusCode};
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::{prisma::language, db::get_prisma_client};
|
||||
use crate::prisma::language;
|
||||
use super::Database;
|
||||
|
||||
|
||||
#[derive(Serialize)]
|
||||
@@ -25,10 +26,10 @@ impl From<language::Data> for LanguageDetail {
|
||||
}
|
||||
|
||||
|
||||
async fn get_languages() -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let languages: Vec<LanguageDetail> = client.language()
|
||||
async fn get_languages(
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let languages: Vec<LanguageDetail> = db.language()
|
||||
.find_many(vec![])
|
||||
.exec()
|
||||
.await
|
||||
@@ -42,11 +43,10 @@ async fn get_languages() -> impl IntoResponse {
|
||||
|
||||
|
||||
async fn get_language_by_code(
|
||||
Path(code): Path<String>
|
||||
Path(code): Path<String>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let language = client.language()
|
||||
let language = db.language()
|
||||
.find_unique(language::code::equals(code))
|
||||
.exec()
|
||||
.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 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 pagination;
|
||||
@@ -10,6 +11,9 @@ pub mod languages;
|
||||
pub mod donate_notifications;
|
||||
|
||||
|
||||
pub type Database = Extension<Arc<PrismaClient>>;
|
||||
|
||||
|
||||
async fn auth<B>(req: Request<B>, next: Next<B>) -> Result<Response, StatusCode> {
|
||||
let auth_header = req.headers()
|
||||
.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()
|
||||
.nest("/users/", users::get_router())
|
||||
.nest("/languages/", languages::get_router())
|
||||
@@ -42,4 +48,5 @@ pub fn get_router() -> Router {
|
||||
.on_response(trace::DefaultOnResponse::new()
|
||||
.level(Level::INFO)),
|
||||
)
|
||||
.layer(Extension(client))
|
||||
}
|
||||
|
||||
@@ -2,27 +2,26 @@ pub mod serializers;
|
||||
pub mod utils;
|
||||
|
||||
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 super::pagination::{Pagination, Page};
|
||||
use super::{pagination::{Pagination, Page}, Database};
|
||||
|
||||
|
||||
async fn get_users(
|
||||
pagination: Query<Pagination>
|
||||
pagination: Query<Pagination>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let pagination: Pagination = pagination.0;
|
||||
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let users_count = client.user_settings()
|
||||
let users_count = db.user_settings()
|
||||
.count(vec![])
|
||||
.exec()
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let users: Vec<UserDetail> = client.user_settings()
|
||||
let users: Vec<UserDetail> = db.user_settings()
|
||||
.find_many(vec![])
|
||||
.with(
|
||||
user_settings::languages::fetch(vec![])
|
||||
@@ -49,11 +48,10 @@ async fn get_users(
|
||||
|
||||
|
||||
async fn get_user(
|
||||
Path(user_id): Path<i64>
|
||||
Path(user_id): Path<i64>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let user = client.user_settings()
|
||||
let user = db.user_settings()
|
||||
.find_unique(user_settings::user_id::equals(user_id))
|
||||
.with(
|
||||
user_settings::languages::fetch(vec![])
|
||||
@@ -74,11 +72,10 @@ async fn get_user(
|
||||
|
||||
|
||||
async fn create_or_update_user(
|
||||
extract::Json(data): extract::Json<CreateOrUpdateUserData>
|
||||
db: Database,
|
||||
extract::Json(data): extract::Json<CreateOrUpdateUserData>,
|
||||
) -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let user = client.user_settings()
|
||||
let user = db.user_settings()
|
||||
.upsert(
|
||||
user_settings::user_id::equals(data.user_id),
|
||||
user_settings::create(
|
||||
@@ -107,9 +104,9 @@ async fn create_or_update_user(
|
||||
.unwrap();
|
||||
|
||||
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))
|
||||
.with(
|
||||
user_settings::languages::fetch(vec![])
|
||||
@@ -128,10 +125,9 @@ async fn create_or_update_user(
|
||||
|
||||
async fn update_activity(
|
||||
Path(user_id): Path<i64>,
|
||||
db: Database
|
||||
) -> impl IntoResponse {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
let user = client.user_settings()
|
||||
let user = db.user_settings()
|
||||
.find_unique(user_settings::user_id::equals(user_id))
|
||||
.exec()
|
||||
.await
|
||||
@@ -142,7 +138,7 @@ async fn update_activity(
|
||||
None => return StatusCode::NOT_FOUND.into_response(),
|
||||
};
|
||||
|
||||
let _ = client.user_activity()
|
||||
let _ = db.user_activity()
|
||||
.upsert(
|
||||
user_activity::user_id::equals(user.id),
|
||||
user_activity::create(
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
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(
|
||||
user: user_settings::Data,
|
||||
new_langs: Vec<String>
|
||||
new_langs: Vec<String>,
|
||||
db: Database
|
||||
) {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
// Delete
|
||||
{
|
||||
let need_delete: Vec<_> = user.languages().unwrap()
|
||||
@@ -21,7 +20,7 @@ pub async fn update_languages(
|
||||
.map(|(id, _)| id)
|
||||
.collect();
|
||||
|
||||
let _ = client.language_to_user()
|
||||
let _ = db.language_to_user()
|
||||
.delete_many(
|
||||
vec![language_to_user::id::in_vec(need_delete)]
|
||||
)
|
||||
@@ -31,7 +30,7 @@ pub async fn update_languages(
|
||||
|
||||
// Create
|
||||
{
|
||||
let languages: HashMap<_, _> = client.language()
|
||||
let languages: HashMap<_, _> = db.language()
|
||||
.find_many(vec![])
|
||||
.exec()
|
||||
.await
|
||||
@@ -51,7 +50,7 @@ pub async fn update_languages(
|
||||
.map(|code| *languages.get(&code).unwrap())
|
||||
.collect();
|
||||
|
||||
let _ = client.language_to_user()
|
||||
let _ = db.language_to_user()
|
||||
.create_many(
|
||||
need_create
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user