rearrange mod file structure

This commit is contained in:
mykola2312 2024-03-02 02:10:11 +02:00
parent e8245413ab
commit b70bdde318
7 changed files with 60 additions and 39 deletions

View file

@ -2,4 +2,4 @@
fn main() {
// trigger recompilation when a new migration is added
println!("cargo:rerun-if-changed=migrations");
}
}

View file

@ -1,4 +1,2 @@
pub mod bot;
pub mod log;
pub mod sanitize;
pub mod util;

View file

@ -1,6 +1,5 @@
use anyhow;
use sqlx::migrate::MigrateDatabase;
use sqlx::{Sqlite, SqlitePool};
use sqlx::SqlitePool;
use std::env;
use std::fmt;
use std::str;
@ -13,9 +12,6 @@ use teloxide::types::InputFile;
use teloxide::{prelude::*, update_listeners::Polling, utils::command::BotCommands};
use tracing::{event, Level};
use super::log::log_init;
use super::util::make_database_url;
use crate::dl::delete_if_exists;
use crate::dl::download;
@ -38,19 +34,10 @@ where
.expect(format!("env '{}' parse error", name).as_str())
}
pub async fn bot_main() -> anyhow::Result<()> {
log_init();
pub async fn bot_main(db: SqlitePool) -> anyhow::Result<()> {
event!(Level::INFO, "start");
let db_url = make_database_url();
if !Sqlite::database_exists(&db_url).await.unwrap_or(false) {
Sqlite::create_database(&db_url)
.await
.expect("failed to create database");
}
let db = SqlitePool::connect(&db_url).await?;
sqlx::migrate!().run(&db).await?;
// db_init
let bot = Bot::new(env::var("BOT_TOKEN")?);
let listener = Polling::builder(bot.clone())
@ -104,29 +91,33 @@ struct DbUser {
pub first_name: String,
pub last_name: Option<String>,
pub can_download: i64,
pub is_admin: i64
pub is_admin: i64,
}
async fn cmd_test(bot: Bot, msg: Message, db: SqlitePool) -> HandlerResult {
bot.send_message(msg.chat.id, "test response").await?;
let user = msg.from().unwrap();
let conn = db.acquire().await?;
sqlx::query("INSERT OR IGNORE user
(tg_id, user_name, first_name, last_name, can_download, is_admin)
VALUES ($1, $2, $3, $4, $5, $6);")
.bind(user.id.0 as i64)
.bind(&user.username)
.bind(&user.first_name)
.bind(&user.last_name)
.bind(0)
.bind(0)
.execute(&db).await.expect("insert");
let db_user = sqlx::query_as!(DbUser,
"SELECT * FROM user WHERE id = 1 LIMIT 1;")
.fetch_one(&db).await.expect("fetch_one");
sqlx::query(
"INSERT OR IGNORE INTO user
(tg_id, username, first_name, last_name, can_download, is_admin)
VALUES ($1, $2, $3, $4, $5, $6);",
)
.bind(user.id.0 as i64)
.bind(&user.username)
.bind(&user.first_name)
.bind(&user.last_name)
.bind(0)
.bind(0)
.execute(&db)
.await
.expect("insert");
let db_user = sqlx::query_as!(DbUser, "SELECT * FROM user WHERE id = 1 LIMIT 1;")
.fetch_one(&db)
.await
.expect("fetch_one");
dbg!(db_user);
Ok(())
}

18
src/db.rs Normal file
View file

@ -0,0 +1,18 @@
use sqlx::migrate::MigrateDatabase;
use sqlx::{Sqlite, SqlitePool};
use super::util::make_database_url;
pub async fn db_init() -> SqlitePool {
let db_url = make_database_url();
if !Sqlite::database_exists(&db_url).await.unwrap_or(false) {
Sqlite::create_database(&db_url)
.await
.expect("failed to create database");
}
let db = SqlitePool::connect(&db_url).await.unwrap();
sqlx::migrate!().run(&db).await.unwrap();
db
}

View file

@ -1,14 +1,18 @@
use std::io;
use tracing::{level_filters::LevelFilter, Subscriber};
//use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::{fmt, layer::SubscriberExt, layer::Filter, prelude::*};
use tracing_subscriber::{fmt, layer::Filter, layer::SubscriberExt, prelude::*};
//use super::util::VAR_LOG;
// A layer filter to prevent polling timeout errors from clogging logs
struct TeloxideNoiseFilter {}
impl<S: Subscriber> Filter<S> for TeloxideNoiseFilter {
fn enabled(&self, meta: &tracing::Metadata<'_>, _: &tracing_subscriber::layer::Context<'_,S>) -> bool {
fn enabled(
&self,
meta: &tracing::Metadata<'_>,
_: &tracing_subscriber::layer::Context<'_, S>,
) -> bool {
if let Some(module_path) = meta.module_path() {
if module_path == "teloxide::error_handlers" {
false
@ -21,7 +25,6 @@ impl<S: Subscriber> Filter<S> for TeloxideNoiseFilter {
}
}
#[cfg(debug_assertions)]
const LOG_LEVEL: LevelFilter = LevelFilter::DEBUG;

View file

@ -5,10 +5,21 @@ use bot::bot::bot_main;
mod dl;
mod util;
mod log;
use log::log_init;
mod db;
use db::db_init;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenv().ok();
bot_main().await?;
log_init();
let db = db_init().await;
bot_main(db).await?;
Ok(())
}