HypeBot/src/database/mod.rs

76 lines
2.2 KiB
Rust

pub mod models;
pub mod schema;
use diesel::prelude::*;
use diesel::result::Error;
use models::{Event, NewEvent};
use std::vec::Vec;
/// Establish a connection to the database
pub fn establish_connection(database_url: String) -> MysqlConnection {
MysqlConnection::establish(&database_url)
.unwrap_or_else(|_| panic!("Error connecting to {}", database_url))
}
/// Insert an event into the database
pub fn insert_event(database_url: String, new_event: &NewEvent) -> Result<Event, Error> {
use schema::events::dsl::{events, id};
let connection = establish_connection(database_url);
diesel::insert_into(events)
.values(new_event)
.execute(&connection)
.expect("Error saving event");
events.order(id).first(&connection)
}
/// Remove event
pub fn remove_event(database_url: String, event_id: i32) -> Result<usize, Error> {
use schema::events::dsl::{events, id};
let connection = establish_connection(database_url);
diesel::delete(events.filter(id.eq(event_id))).execute(&connection)
}
/// Get an event by name
pub fn get_event_by_name(database_url: String, name: String) -> Result<Event, Error> {
use schema::events::dsl::{event_name, events};
let connection = establish_connection(database_url);
events
.filter(event_name.eq(&name))
.get_result::<Event>(&connection)
}
/// Get event by its message id
pub fn get_event_by_msg_id(database_url: String, msg_id: String) -> Result<Event, Error> {
use schema::events::dsl::{events, message_id};
let connection = establish_connection(database_url);
events
.filter(message_id.eq(&msg_id))
.get_result::<Event>(&connection)
}
/// Get all events
pub fn get_all_events(database_url: String) -> Result<Vec<Event>, Error> {
use schema::events::dsl::{event_time, events};
let connection = establish_connection(database_url);
events.order(event_time).load(&connection)
}
/// Get event with id
pub fn get_event_by_id(database_url: String, event_id: i32) -> Result<Event, Error> {
use schema::events::dsl::{events, id};
let connection = establish_connection(database_url);
events.filter(id.eq(event_id)).first::<Event>(&connection)
}