Skip to main content

Database

Trait Database 

Source
pub trait Database {
    // Required methods
    fn add_note<'life0, 'async_trait>(
        &'life0 self,
        note: CreateNote,
    ) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn get_note<'life0, 'async_trait>(
        &'life0 self,
        id: i64,
    ) -> Pin<Box<dyn Future<Output = Result<Option<Note>, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn list_notes<'life0, 'async_trait>(
        &'life0 self,
        query: NoteQuery,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn count_notes<'life0, 'async_trait>(
        &'life0 self,
        query: NoteQuery,
    ) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn update_note<'life0, 'async_trait>(
        &'life0 self,
        id: i64,
        update: UpdateNote,
    ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn delete_note<'life0, 'async_trait>(
        &'life0 self,
        id: i64,
    ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn list_tags<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<TagCount>, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn grep<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        pattern: &'life1 str,
        tags: Option<&'life2 [String]>,
        case_sensitive: bool,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
}
Expand description

Database abstraction that works for both SQLite and D1.

Uses async_trait with ?Send bound for WASM compatibility. The ?Send is critical - WASM is single-threaded and JS values aren’t Send.

Required Methods§

Source

fn add_note<'life0, 'async_trait>( &'life0 self, note: CreateNote, ) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Add a new note and return its ID.

Source

fn get_note<'life0, 'async_trait>( &'life0 self, id: i64, ) -> Pin<Box<dyn Future<Output = Result<Option<Note>, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a note by ID.

Source

fn list_notes<'life0, 'async_trait>( &'life0 self, query: NoteQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List notes matching the query.

Source

fn count_notes<'life0, 'async_trait>( &'life0 self, query: NoteQuery, ) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Count notes matching the query (ignores limit).

Source

fn update_note<'life0, 'async_trait>( &'life0 self, id: i64, update: UpdateNote, ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Update an existing note.

Source

fn delete_note<'life0, 'async_trait>( &'life0 self, id: i64, ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete a note by ID. Returns true if deleted, false if not found.

Source

fn list_tags<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<TagCount>, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all tags with their note counts.

Source

fn grep<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, pattern: &'life1 str, tags: Option<&'life2 [String]>, case_sensitive: bool, ) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Search notes by pattern (regex) in title and body.

Implementors§