create db files
This commit is contained in:
parent
7ebbb211da
commit
afdd35e731
47
src/db.rs
Normal file
47
src/db.rs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
pub mod models;
|
||||||
|
pub mod schema;
|
||||||
|
use crate::Config;
|
||||||
|
|
||||||
|
use self::models::*;
|
||||||
|
|
||||||
|
use diesel::{prelude::*, r2d2::{ConnectionManager, Pool}};
|
||||||
|
|
||||||
|
pub fn establish_connection(cfg: Config) -> PgConnection {
|
||||||
|
PgConnection::establish(&cfg.db_url)
|
||||||
|
.unwrap_or_else(|_| panic!("Error connecting to {}", cfg.db_url))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct DB {
|
||||||
|
pool: Pool<ConnectionManager<PgConnection>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DB {
|
||||||
|
pub fn new<S: Into<String>>(db_url: S) -> Self{
|
||||||
|
let mg = diesel::r2d2::ConnectionManager::new(db_url);
|
||||||
|
let pool = diesel::r2d2::Pool::builder()
|
||||||
|
.max_size(15)
|
||||||
|
.build(mg)
|
||||||
|
.unwrap();
|
||||||
|
DB { pool }
|
||||||
|
}
|
||||||
|
pub fn make_admin(&mut self, userid: i64) {
|
||||||
|
use self::schema::users::dsl::*;
|
||||||
|
let connection = &mut self.pool.get().unwrap();
|
||||||
|
diesel::update(users).filter(id.eq(userid)).set(is_admin.eq(true)).execute(connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_or_init_user(&mut self, userid: i64) -> User {
|
||||||
|
use self::schema::users::dsl::*;
|
||||||
|
let connection = &mut self.pool.get().unwrap();
|
||||||
|
|
||||||
|
let user = users.filter(id.eq(userid)).first::<User>(connection).optional().unwrap();
|
||||||
|
|
||||||
|
match user {
|
||||||
|
Some(existing_user) => existing_user,
|
||||||
|
None => {
|
||||||
|
diesel::insert_into(users).values((id.eq(userid as i64), is_admin.eq(false))).get_result(connection).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/db/models.rs
Normal file
14
src/db/models.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Generated by diesel_ext
|
||||||
|
|
||||||
|
#![allow(unused)]
|
||||||
|
#![allow(clippy::all)]
|
||||||
|
|
||||||
|
|
||||||
|
use diesel::prelude::*;
|
||||||
|
#[derive(Queryable, Debug)]
|
||||||
|
#[diesel(table_name = users)]
|
||||||
|
pub struct User {
|
||||||
|
pub id: i64,
|
||||||
|
pub is_admin: bool,
|
||||||
|
}
|
||||||
|
|
||||||
8
src/db/schema.rs
Normal file
8
src/db/schema.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// @generated automatically by Diesel CLI.
|
||||||
|
|
||||||
|
diesel::table! {
|
||||||
|
users (id) {
|
||||||
|
id -> Int8,
|
||||||
|
is_admin -> Bool,
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user