+ pub fn create_recipe(&self, user_id: i64) -> Result<i64> {
+ let con = self.get()?;
+
+ // Verify if an empty recipe already exists. Returns its id if one exists.
+ match con
+ .query_row(
+ "SELECT [Recipe].[id] FROM [Recipe]
+ INNER JOIN [Image] ON [Image].[recipe_id] = [Recipe].[id]
+ INNER JOIN [Group] ON [Group].[recipe_id] = [Recipe].[id]
+ WHERE [Recipe].[user_id] = ?1
+ AND [Recipe].[estimate_time] = NULL
+ AND [Recipe].[description] = NULL",
+ [user_id],
+ |r| Ok(r.get::<&str, i64>("id")?),
+ )
+ .optional()?
+ {
+ Some(recipe_id) => Ok(recipe_id),
+ None => {
+ con.execute(
+ "INSERT INTO [Recipe] ([user_id], [title]) VALUES (?1, '')",
+ [user_id],
+ )?;
+ Ok(con.last_insert_rowid())
+ }
+ }
+ }
+
+ pub fn set_recipe_title(&self, recipe_id: i64, title: &str) -> Result<()> {
+ let con = self.get()?;
+ con.execute(
+ "UPDATE [Recipe] SET [title] = ?2 WHERE [id] = ?1",
+ params![recipe_id, title],
+ )
+ .map(|_n| ())
+ .map_err(DBError::from)
+ }
+
+ pub fn set_recipe_description(&self, recipe_id: i64, description: &str) -> Result<()> {
+ let con = self.get()?;
+ con.execute(
+ "UPDATE [Recipe] SET [description] = ?2 WHERE [id] = ?1",
+ params![recipe_id, description],
+ )
+ .map(|_n| ())
+ .map_err(DBError::from)
+ }
+