term_keep 1.2.1

Terminal-based Google Keep clone. Can be used as a note taking / To-Do list app on a server.
Documentation
use crate::models::template::Template;
use crate::models::traits::RequireId;
use crate::services;
use crate::util::cli::{self, get_text_input};
use anyhow::Result;
use colored::Colorize;

pub fn show_all() {
  let templates = services::templates::find_all();

  println!("{} template(s)", templates.len().to_string().bold());
  println!();

  for template in templates {
    println!("{}", template.name);
  }
}

fn edit(template: &Template) -> Result<()> {
  let (content, _) = get_text_input(&template.content)?;

  if content == template.content {
    println!("{}", cli::color_secondary("Not changed"));
  } else {
    services::templates::update(template.require_id(), &content)?;
  }
  Ok(())
}

fn create(name: &str) -> Result<()> {
  let (content, _) = get_text_input("")?;
  services::templates::create(name, &content)?;
  println!("{}", cli::color_primary("Created a new template"));
  Ok(())
}

pub fn upsert(name: &str) -> Result<()> {
  let template = services::templates::find_one(name);

  template.map_or_else(|_| create(name), |t| edit(&t))
}

pub fn remove(name: &str) -> Result<()> {
  let template = services::templates::find_one(name)?;
  services::templates::remove(template.require_id())?;
  Ok(())
}