docs: Add comprehensive rustdoc to src/db.rs structs and functions

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-10 11:03:17 -03:00
parent cb716c161c
commit 67a61093d5

View File

@@ -9,6 +9,8 @@ use std::collections::HashMap;
use std::path::PathBuf; use std::path::PathBuf;
use std::rc::Rc; use std::rc::Rc;
/// Database schema migrations for the Keep application
lazy_static! { lazy_static! {
static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![ static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![
M::up( M::up(
@@ -38,27 +40,48 @@ lazy_static! {
]); ]);
} }
/// Represents an item stored in the database
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item { pub struct Item {
/// Unique identifier for the item, None for new items
pub id: Option<i64>, pub id: Option<i64>,
/// Timestamp when the item was created
pub ts: DateTime<Utc>, pub ts: DateTime<Utc>,
/// Size of the item content in bytes, None if not set
pub size: Option<i64>, pub size: Option<i64>,
/// Compression algorithm used for the item content
pub compression: String, pub compression: String,
} }
/// Represents a tag associated with an item
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Tag { pub struct Tag {
/// ID of the item this tag belongs to
pub id: i64, pub id: i64,
/// Name of the tag
pub name: String, pub name: String,
} }
/// Represents metadata associated with an item
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Meta { pub struct Meta {
/// ID of the item this metadata belongs to
pub id: i64, pub id: i64,
/// Name of the metadata field
pub name: String, pub name: String,
/// Value of the metadata field
pub value: String, pub value: String,
} }
/// Opens a database connection and ensures the schema is up to date
///
/// # Arguments
///
/// * `path` - Path to the SQLite database file
///
/// # Returns
///
/// * `Result<Connection, Error>` - A SQLite connection on success, or an error if opening or migration fails
pub fn open(path: PathBuf) -> Result<Connection, Error> { pub fn open(path: PathBuf) -> Result<Connection, Error> {
debug!("DB: Opening file: {:?}", path); debug!("DB: Opening file: {:?}", path);
let mut conn = Connection::open_with_flags( let mut conn = Connection::open_with_flags(
@@ -79,6 +102,16 @@ pub fn open(path: PathBuf) -> Result<Connection, Error> {
Ok(conn) Ok(conn)
} }
/// Inserts a new item into the database
///
/// # Arguments
///
/// * `conn` - Database connection
/// * `item` - Item to insert
///
/// # Returns
///
/// * `Result<i64>` - The ID of the newly inserted item on success, or an error if insertion fails
pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> { pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> {
debug!("DB: Inserting item: {:?}", item); debug!("DB: Inserting item: {:?}", item);
conn.execute( conn.execute(
@@ -88,6 +121,16 @@ pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> {
Ok(conn.last_insert_rowid()) Ok(conn.last_insert_rowid())
} }
/// Creates a new item in the database with the current timestamp
///
/// # Arguments
///
/// * `conn` - Database connection
/// * `compression_type` - Compression type to use for the item
///
/// # Returns
///
/// * `Result<Item>` - The created item with its ID set, or an error if creation fails
pub fn create_item(conn: &Connection, compression_type: crate::compression_engine::CompressionType) -> Result<Item> { pub fn create_item(conn: &Connection, compression_type: crate::compression_engine::CompressionType) -> Result<Item> {
let item = Item { let item = Item {
id: None, id: None,
@@ -102,6 +145,17 @@ pub fn create_item(conn: &Connection, compression_type: crate::compression_engin
}) })
} }
/// Adds a tag to an item
///
/// # Arguments
///
/// * `conn` - Database connection
/// * `item_id` - ID of the item to tag
/// * `tag_name` - Name of the tag to add
///
/// # Returns
///
/// * `Result<()>` - Success or error if the operation fails
pub fn add_tag(conn: &Connection, item_id: i64, tag_name: &str) -> Result<()> { pub fn add_tag(conn: &Connection, item_id: i64, tag_name: &str) -> Result<()> {
let tag = Tag { let tag = Tag {
id: item_id, id: item_id,
@@ -110,6 +164,18 @@ pub fn add_tag(conn: &Connection, item_id: i64, tag_name: &str) -> Result<()> {
insert_tag(conn, tag) insert_tag(conn, tag)
} }
/// Adds metadata to an item
///
/// # Arguments
///
/// * `conn` - Database connection
/// * `item_id` - ID of the item
/// * `name` - Name of the metadata field
/// * `value` - Value of the metadata field
///
/// # Returns
///
/// * `Result<()>` - Success or error if the operation fails
pub fn add_meta(conn: &Connection, item_id: i64, name: &str, value: &str) -> Result<()> { pub fn add_meta(conn: &Connection, item_id: i64, name: &str, value: &str) -> Result<()> {
let meta = Meta { let meta = Meta {
id: item_id, id: item_id,