85 lines
2.5 KiB
Rust
85 lines
2.5 KiB
Rust
pub mod models;
|
|
pub mod schema;
|
|
|
|
use diesel::prelude::*;
|
|
use diesel::result::Error;
|
|
use models::{Event, NewEvent};
|
|
use std::vec::Vec;
|
|
use chrono::{Utc, DateTime};
|
|
|
|
/// 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::{events};
|
|
|
|
let connection = establish_connection(database_url);
|
|
|
|
events.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)
|
|
}
|
|
|
|
pub fn get_event_older_than(database_url: String, time: DateTime<Utc>) -> Result<Vec<Event>, Error> {
|
|
use schema::events::dsl::{events, event_time};
|
|
|
|
let connection = establish_connection(database_url);
|
|
|
|
events.filter(event_time.lt(time.naive_utc())).load(&connection)
|
|
}
|