Skip to main content

shipd_core/db/
projects.rs

1use crate::models::Project;
2use rusqlite::Connection;
3
4pub fn create_project(conn: &Connection, name: &str, path: &str) -> Result<i64, rusqlite::Error> {
5    conn.execute(
6        "INSERT INTO projects (name, path) VALUES (?1, ?2)",
7        (name, path),
8    )?;
9
10    Ok(conn.last_insert_rowid())
11}
12
13pub fn get_project_by_path(
14    conn: &Connection,
15    path: &str,
16) -> Result<Option<Project>, rusqlite::Error> {
17    let mut stmt = conn.prepare(
18        "SELECT id, name, description, path, created_at, updated_at FROM projects WHERE path = ?1",
19    )?;
20
21    let mut rows = stmt.query_map((path,), |row| {
22        Ok(Project {
23            id: row.get(0)?,
24            name: row.get(1)?,
25            description: row.get(2)?,
26            path: row.get(3)?,
27            created_at: row.get(4)?,
28            updated_at: row.get(5)?,
29        })
30    })?;
31
32    match rows.next() {
33        Some(row) => Ok(Some(row?)),
34        None => Ok(None),
35    }
36}