63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
#[macro_use]
|
|
extern crate diesel;
|
|
extern crate dotenv;
|
|
|
|
pub mod schema;
|
|
pub mod models;
|
|
|
|
mod recipe;
|
|
mod importer;
|
|
|
|
use diesel::prelude::*;
|
|
use dotenv::dotenv;
|
|
use std::env;
|
|
use crate::models::{Recipe, NewRecipe};
|
|
|
|
pub fn establish_connection() -> SqliteConnection {
|
|
dotenv().ok();
|
|
|
|
let db_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set !");
|
|
SqliteConnection::establish(&db_url)
|
|
.expect(&format!("Error connecting to {}", db_url))
|
|
}
|
|
|
|
|
|
pub mod ingredients {
|
|
use crate::models::{Ingredient, NewIngredient};
|
|
use super::{SqliteConnection, schema};
|
|
use super::diesel::prelude::*;
|
|
|
|
pub fn find(conn: &SqliteConnection, name: &str) -> Option<Ingredient> {
|
|
use self::schema::ingredients::dsl::*;
|
|
|
|
let results = ingredients.filter(alias.like(name))
|
|
.limit(1)
|
|
.load::<Ingredient>(conn)
|
|
.expect("Error finding ingredient");
|
|
|
|
if !results.is_empty() {
|
|
Some(results.into_iter().nth(0).unwrap())
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
|
|
pub fn create(conn: &SqliteConnection, name: &str) -> usize {
|
|
use self::schema::ingredients;
|
|
|
|
diesel::insert_into(ingredients::table)
|
|
.values(&NewIngredient { alias: name })
|
|
.execute(conn)
|
|
.expect("Error inserting ingredient")
|
|
}
|
|
}
|
|
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
#[test]
|
|
fn it_works() {
|
|
assert_eq!(2 + 2, 4);
|
|
}
|
|
}
|