aboutsummaryrefslogtreecommitdiff
path: root/src/db.rs
blob: 4eea4c7d6fcaba4d34e1ee3f0ed1d09e23d2b584 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use rusqlite::{params, Connection, Result, Error as SQLError};

use crate::structures::*;

/// Create a new thread in the SQLite database.
pub fn new_thread(mut thread: Thread) -> Result<()> {
    // Open SQLite database file.
    let db = Connection::open("chan.db")?;

    // If the name field in the POST request is empty, user should be "anonymous".
    if thread.name == "" {
        thread.name = "Anonymous".to_owned();
    }

    // Add thread entry to database.
    db.execute(
        "INSERT INTO threads (board, name, comment) VALUES (?1, ?2, ?3)",
        params![thread.board, thread.name, thread.comment]
    )?;

    Ok(())
}

/// Get all threads from the SQLite databse.
pub fn _get_all_threads() -> Result<Vec<Thread>, SQLError> {
    // Open SQLite database file.
    let db = Connection::open("chan.db")?;

    // Get all entries from the thread table.
    let mut statement = db.prepare("SELECT board, name, comment FROM threads")?;
    let threads = statement.query_map(params![], |row| {
        Ok(Thread {
            board: row.get(0)?,
            name: row.get(1)?,
            comment: row.get(2)?
        })
    })?;
    threads.collect()
}

/// Get all boards from the SQLite databse.
pub fn get_boards() -> Result<Vec<Board>, SQLError> {
    // Open SQLite database file.
    let db = Connection::open("chan.db")?;

    // Get all entries from the thread table.
    let mut statement = db.prepare("SELECT tag, name, nsfw, disabled FROM boards")?;
    let boards = statement.query_map(params![], |row| {
        Ok(Board {
            tag: row.get(0)?,
            name: row.get(1)?,
            nsfw: row.get(2)?,
            disabled: row.get(3)?
        })
    })?;
    boards.collect()
}

/// Get all threads from a specific board within the SQLite databse.
pub fn get_threads(board: String) -> Result<Vec<Thread>, SQLError> {
    // Open SQLite database file.
    let db = Connection::open("chan.db")?;

    // Get all entries from the thread table.
    let mut statement = db.prepare("SELECT board, name, comment FROM threads WHERE board = (?)")?;
    let threads = statement.query_map(params![board], |row| {
        Ok(Thread {
            board: row.get(0)?,
            name: row.get(1)?,
            comment: row.get(2)?
        })
    })?;
    threads.collect()
}