mirror of
https://github.com/flibusta-apps/services_manager_server.git
synced 2025-12-06 04:25:38 +01:00
This commit is contained in:
@@ -1,2 +0,0 @@
|
||||
[alias]
|
||||
prisma = "run -p prisma-cli --"
|
||||
58
.sqlx/query-0137a8e4f27051dfccfb79da48211f5bb0fd54079f082b337b0eff84add7432d.json
generated
Normal file
58
.sqlx/query-0137a8e4f27051dfccfb79da48211f5bb0fd54079f082b337b0eff84add7432d.json
generated
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT * FROM services WHERE id = $1\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Int4"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "0137a8e4f27051dfccfb79da48211f5bb0fd54079f082b337b0eff84add7432d"
|
||||
}
|
||||
62
.sqlx/query-0b3d1cf81684128484ac99bcc2259773a5e8fc6f2499f3fa7c085fc4d21e0d91.json
generated
Normal file
62
.sqlx/query-0b3d1cf81684128484ac99bcc2259773a5e8fc6f2499f3fa7c085fc4d21e0d91.json
generated
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO services (token, \"user\", status, cache, username) VALUES ($1, $2, $3, $4, $5) RETURNING *\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Int8",
|
||||
"Varchar",
|
||||
"Varchar",
|
||||
"Varchar"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "0b3d1cf81684128484ac99bcc2259773a5e8fc6f2499f3fa7c085fc4d21e0d91"
|
||||
}
|
||||
22
.sqlx/query-84f0d257d3e3a033848820a88875e9f19e6e41ec0b4a518dbe8150410b0e6191.json
generated
Normal file
22
.sqlx/query-84f0d257d3e3a033848820a88875e9f19e6e41ec0b4a518dbe8150410b0e6191.json
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT COUNT(*) FROM services WHERE \"user\" = $1\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "count",
|
||||
"type_info": "Int8"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Int8"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
null
|
||||
]
|
||||
},
|
||||
"hash": "84f0d257d3e3a033848820a88875e9f19e6e41ec0b4a518dbe8150410b0e6191"
|
||||
}
|
||||
56
.sqlx/query-9978e9199895c9fc8fe8f7fcfc30ff8d2a2d586e116a5b94f8e40e7c2971a110.json
generated
Normal file
56
.sqlx/query-9978e9199895c9fc8fe8f7fcfc30ff8d2a2d586e116a5b94f8e40e7c2971a110.json
generated
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT * FROM services\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": []
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "9978e9199895c9fc8fe8f7fcfc30ff8d2a2d586e116a5b94f8e40e7c2971a110"
|
||||
}
|
||||
58
.sqlx/query-bece50bc2ce198404dbdea3c980e5a1d3940f74007ecf6ebfd48b7a240001747.json
generated
Normal file
58
.sqlx/query-bece50bc2ce198404dbdea3c980e5a1d3940f74007ecf6ebfd48b7a240001747.json
generated
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n DELETE FROM services WHERE id = $1 RETURNING *\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Int4"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "bece50bc2ce198404dbdea3c980e5a1d3940f74007ecf6ebfd48b7a240001747"
|
||||
}
|
||||
59
.sqlx/query-df547cbddb771167af7188799cbdfc473065768ec9e1b7791b2a2cb03ddc07b9.json
generated
Normal file
59
.sqlx/query-df547cbddb771167af7188799cbdfc473065768ec9e1b7791b2a2cb03ddc07b9.json
generated
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n UPDATE services SET cache = $1 WHERE id = $2 RETURNING *\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Int4"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "df547cbddb771167af7188799cbdfc473065768ec9e1b7791b2a2cb03ddc07b9"
|
||||
}
|
||||
59
.sqlx/query-ed40414712a25612c336364c52181f98531a801fbe8bdd885683f56c291e3337.json
generated
Normal file
59
.sqlx/query-ed40414712a25612c336364c52181f98531a801fbe8bdd885683f56c291e3337.json
generated
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n UPDATE services SET status = $1 WHERE id = $2 RETURNING *\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "id",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "token",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "user",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "status",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 4,
|
||||
"name": "created_time",
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "cache",
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "username",
|
||||
"type_info": "Varchar"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Int4"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "ed40414712a25612c336364c52181f98531a801fbe8bdd885683f56c291e3337"
|
||||
}
|
||||
3409
Cargo.lock
generated
3409
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
29
Cargo.toml
29
Cargo.toml
@@ -3,26 +3,21 @@ name = "services_manager_server"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
"prisma-cli"
|
||||
]
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
once_cell = "1.20.1"
|
||||
once_cell = "1.20.2"
|
||||
|
||||
prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.10", default-features = false, features = ["postgresql"] }
|
||||
serde = { version = "1.0.210", features = ["derive"] }
|
||||
serde = { version = "1.0.216", features = ["derive"] }
|
||||
|
||||
tokio = { version = "1.40.0", features = ["full"] }
|
||||
axum = { version = "0.7.7", features = ["json"] }
|
||||
tokio = { version = "1.42.0", features = ["full"] }
|
||||
axum = { version = "0.7.9", features = ["json"] }
|
||||
axum-prometheus = "0.7.0"
|
||||
chrono = "0.4.38"
|
||||
sentry = { version = "0.34.0", features = ["debug-images"] }
|
||||
chrono = { version = "0.4.39", features = ["serde"] }
|
||||
sentry = { version = "0.35.0", features = ["debug-images"] }
|
||||
|
||||
tracing = "0.1.40"
|
||||
tracing-subscriber = { version = "0.3.18", features = ["env-filter"]}
|
||||
sentry-tracing = "0.34.0"
|
||||
tower-http = { version = "0.6.1", features = ["trace"] }
|
||||
tracing = "0.1.41"
|
||||
tracing-subscriber = { version = "0.3.19", features = ["env-filter"]}
|
||||
sentry-tracing = "0.35.0"
|
||||
tower-http = { version = "0.6.2", features = ["trace"] }
|
||||
|
||||
sqlx = { version = "0.8.2", features = ["runtime-tokio", "postgres", "macros", "chrono"] }
|
||||
|
||||
3
prisma-cli/.gitignore
vendored
3
prisma-cli/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
node_modules
|
||||
# Keep environment variables out of version control
|
||||
.env
|
||||
3195
prisma-cli/Cargo.lock
generated
3195
prisma-cli/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
[package]
|
||||
name = "prisma-cli"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.10", default-features = false, features = ["postgresql"] }
|
||||
@@ -1,3 +0,0 @@
|
||||
fn main() {
|
||||
prisma_client_rust_cli::run();
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
generator client {
|
||||
provider = "cargo prisma"
|
||||
output = "../src/prisma.rs"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model Service {
|
||||
id Int @id @default(autoincrement())
|
||||
token String @unique @db.VarChar(128)
|
||||
user BigInt
|
||||
status String @db.VarChar(12)
|
||||
created_time DateTime @db.Timestamptz(6)
|
||||
cache String @db.VarChar(12)
|
||||
username String @db.VarChar(64)
|
||||
|
||||
@@map("services")
|
||||
}
|
||||
14
src/db.rs
14
src/db.rs
@@ -1,8 +1,10 @@
|
||||
use crate::{config::CONFIG, prisma::PrismaClient};
|
||||
use crate::config::CONFIG;
|
||||
|
||||
pub async fn get_prisma_client() -> PrismaClient {
|
||||
use sqlx::{postgres::PgPoolOptions, PgPool};
|
||||
|
||||
pub async fn get_pg_pool() -> PgPool {
|
||||
let database_url: String = format!(
|
||||
"postgresql://{}:{}@{}:{}/{}?connection_limit=1",
|
||||
"postgresql://{}:{}@{}:{}/{}",
|
||||
CONFIG.postgres_user,
|
||||
CONFIG.postgres_password,
|
||||
CONFIG.postgres_host,
|
||||
@@ -10,9 +12,9 @@ pub async fn get_prisma_client() -> PrismaClient {
|
||||
CONFIG.postgres_db
|
||||
);
|
||||
|
||||
PrismaClient::_builder()
|
||||
.with_url(database_url)
|
||||
.build()
|
||||
PgPoolOptions::new()
|
||||
.max_connections(1)
|
||||
.connect(&database_url)
|
||||
.await
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
pub mod config;
|
||||
pub mod db;
|
||||
pub mod prisma;
|
||||
pub mod views;
|
||||
|
||||
use sentry::{integrations::debug_images::DebugImagesIntegration, types::Dsn, ClientOptions};
|
||||
|
||||
1572
src/prisma.rs
1572
src/prisma.rs
File diff suppressed because one or more lines are too long
160
src/views.rs
160
src/views.rs
@@ -7,40 +7,54 @@ use axum::{
|
||||
Extension, Json, Router,
|
||||
};
|
||||
use axum_prometheus::PrometheusMetricLayer;
|
||||
use serde::Deserialize;
|
||||
use std::sync::Arc;
|
||||
use chrono::DateTime;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use tower_http::trace::{self, TraceLayer};
|
||||
use tracing::Level;
|
||||
|
||||
use crate::{
|
||||
config::CONFIG,
|
||||
db::get_prisma_client,
|
||||
prisma::{service, PrismaClient},
|
||||
};
|
||||
use crate::{config::CONFIG, db::get_pg_pool};
|
||||
|
||||
pub type Database = Extension<Arc<PrismaClient>>;
|
||||
pub type Database = Extension<PgPool>;
|
||||
|
||||
const BOTS_COUNT_LIMIT: i64 = 5;
|
||||
|
||||
#[derive(sqlx::FromRow, Serialize)]
|
||||
pub struct Service {
|
||||
pub id: i32,
|
||||
pub token: String,
|
||||
pub user: i64,
|
||||
pub status: String,
|
||||
pub created_time: DateTime<chrono::Local>,
|
||||
pub cache: String,
|
||||
pub username: String,
|
||||
}
|
||||
|
||||
async fn get_services(db: Database) -> impl IntoResponse {
|
||||
let services = db
|
||||
.service()
|
||||
.find_many(vec![])
|
||||
.order_by(service::id::order(prisma_client_rust::Direction::Asc))
|
||||
.exec()
|
||||
.await
|
||||
.unwrap();
|
||||
let services = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
SELECT * FROM services
|
||||
"#
|
||||
)
|
||||
.fetch_all(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
Json(services).into_response()
|
||||
}
|
||||
|
||||
async fn get_service(Path(id): Path<i32>, db: Database) -> impl IntoResponse {
|
||||
let service = db
|
||||
.service()
|
||||
.find_unique(service::id::equals(id))
|
||||
.exec()
|
||||
.await
|
||||
.unwrap();
|
||||
let service = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
SELECT * FROM services WHERE id = $1
|
||||
"#,
|
||||
id
|
||||
)
|
||||
.fetch_optional(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match service {
|
||||
Some(v) => Json(v).into_response(),
|
||||
@@ -49,19 +63,19 @@ async fn get_service(Path(id): Path<i32>, db: Database) -> impl IntoResponse {
|
||||
}
|
||||
|
||||
async fn delete_service(Path(id): Path<i32>, db: Database) -> impl IntoResponse {
|
||||
let service = db
|
||||
.service()
|
||||
.find_unique(service::id::equals(id))
|
||||
.exec()
|
||||
.await
|
||||
.unwrap();
|
||||
let service = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
DELETE FROM services WHERE id = $1 RETURNING *
|
||||
"#,
|
||||
id
|
||||
)
|
||||
.fetch_optional(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match service {
|
||||
Some(v) => {
|
||||
let _ = db.service().delete(service::id::equals(id)).exec().await;
|
||||
|
||||
Json(v).into_response()
|
||||
}
|
||||
Some(v) => Json(v).into_response(),
|
||||
None => StatusCode::NOT_FOUND.into_response(),
|
||||
}
|
||||
}
|
||||
@@ -84,29 +98,33 @@ async fn create_service(db: Database, Json(data): Json<CreateServiceData>) -> im
|
||||
username,
|
||||
} = data;
|
||||
|
||||
let exist_count = db
|
||||
.service()
|
||||
.count(vec![service::user::equals(user)])
|
||||
.exec()
|
||||
.await
|
||||
.unwrap();
|
||||
let exist_count = sqlx::query_scalar!(
|
||||
r#"
|
||||
SELECT COUNT(*) FROM services WHERE "user" = $1
|
||||
"#,
|
||||
user
|
||||
)
|
||||
.fetch_one(&db.0)
|
||||
.await
|
||||
.unwrap_or(Some(0))
|
||||
.unwrap();
|
||||
|
||||
if exist_count >= BOTS_COUNT_LIMIT {
|
||||
return StatusCode::PAYMENT_REQUIRED.into_response();
|
||||
};
|
||||
|
||||
let service = db
|
||||
.service()
|
||||
.create(
|
||||
token,
|
||||
user,
|
||||
status,
|
||||
chrono::offset::Local::now().into(),
|
||||
cache,
|
||||
username,
|
||||
vec![],
|
||||
)
|
||||
.exec()
|
||||
let service = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
INSERT INTO services (token, "user", status, cache, username) VALUES ($1, $2, $3, $4, $5) RETURNING *
|
||||
"#,
|
||||
token,
|
||||
user,
|
||||
status,
|
||||
cache,
|
||||
username
|
||||
)
|
||||
.fetch_one(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@@ -118,15 +136,21 @@ async fn update_state(
|
||||
db: Database,
|
||||
Json(state): Json<String>,
|
||||
) -> impl IntoResponse {
|
||||
let service = db
|
||||
.service()
|
||||
.update(service::id::equals(id), vec![service::status::set(state)])
|
||||
.exec()
|
||||
.await;
|
||||
let service = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
UPDATE services SET status = $1 WHERE id = $2 RETURNING *
|
||||
"#,
|
||||
state,
|
||||
id
|
||||
)
|
||||
.fetch_optional(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match service {
|
||||
Ok(v) => Json(v).into_response(),
|
||||
Err(_) => StatusCode::NOT_FOUND.into_response(),
|
||||
Some(v) => Json(v).into_response(),
|
||||
None => StatusCode::NOT_FOUND.into_response(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,15 +159,21 @@ async fn update_cache(
|
||||
db: Database,
|
||||
Json(cache): Json<String>,
|
||||
) -> impl IntoResponse {
|
||||
let service = db
|
||||
.service()
|
||||
.update(service::id::equals(id), vec![service::cache::set(cache)])
|
||||
.exec()
|
||||
.await;
|
||||
let service = sqlx::query_as!(
|
||||
Service,
|
||||
r#"
|
||||
UPDATE services SET cache = $1 WHERE id = $2 RETURNING *
|
||||
"#,
|
||||
cache,
|
||||
id
|
||||
)
|
||||
.fetch_optional(&db.0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match service {
|
||||
Ok(v) => Json(v).into_response(),
|
||||
Err(_) => StatusCode::NOT_FOUND.into_response(),
|
||||
Some(v) => Json(v).into_response(),
|
||||
None => StatusCode::NOT_FOUND.into_response(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +199,7 @@ async fn auth(req: Request<axum::body::Body>, next: Next) -> Result<Response, St
|
||||
}
|
||||
|
||||
pub async fn get_router() -> Router {
|
||||
let client = Arc::new(get_prisma_client().await);
|
||||
let client = get_pg_pool().await;
|
||||
|
||||
let (prometheus_layer, metric_handle) = PrometheusMetricLayer::pair();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user