hvmd 0.1.0

productivity tool for those who need it the most
Documentation
use std::process::exit;

use sea_orm::ActiveValue::Set;
use sea_orm::{ActiveModelTrait, EntityTrait};
use uuid::Uuid;

use crate::db::db;

use super::model::{ActiveModel, Entity as Asset, Model};
use super::{CreateAsset, EditAsset};

pub async fn insert(create_asset: CreateAsset) -> String {
	let db = &db().await;
	let asset: ActiveModel = ActiveModel {
		id: Set(Uuid::new_v4()),
		title: Set(create_asset.title),
		description: Set(create_asset.description),
		amount: Set(create_asset.amount.unwrap_or_default()),
		..Default::default()
	};

	match asset.insert(db).await {
		Ok(row) => row.id.to_string(),
		Err(e) => {
			eprintln!("{}", e);
			exit(1);
		}
	}
}

pub async fn update(edit_asset: EditAsset) -> String {
	let db = &db().await;
	match Asset::find_by_id(edit_asset.id).one(db).await {
		Ok(row) => match row {
			Some(row) => {
				let mut asset: super::model::ActiveModel = row.into();

				if let Some(title) = edit_asset.title {
					asset.title = Set(title);
				}
				if let Some(description) = edit_asset.description {
					asset.description = Set(Some(description));
				}
				if let Some(amount) = edit_asset.amount {
					asset.amount = Set(amount);
				}

				match asset.update(db).await {
					Ok(new_row) => new_row.id.to_string(),
					Err(e) => {
						eprintln!("{}", e);
						exit(1);
					}
				}
			}
			None => {
				eprintln!("could not find asset of #{}", edit_asset.id);
				exit(1);
			}
		},
		Err(e) => {
			eprintln!("{}", e);
			exit(1);
		}
	}
}

pub async fn get(id: Uuid) -> Option<Model> {
	match Asset::find_by_id(id).one(&db().await).await {
		Ok(asset) => asset,
		Err(e) => {
			eprintln!("{}", e);
			exit(1);
		}
	}
}

pub async fn list() -> Vec<Model> {
	match Asset::find().all(&db().await).await {
		Ok(assets) => assets,
		Err(e) => {
			eprintln!("{}", e);
			exit(1);
		}
	}
}