chore: list animations
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
c25a8d633e
commit
c1b3625a14
@ -8,7 +8,7 @@ use rocket::{
|
|||||||
State,
|
State,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{DBPool, utils::{get_error_message, create_message}};
|
use crate::{DBPool, utils::{get_error_message, create_message, get_conn, prepare_statement}};
|
||||||
use crate::{
|
use crate::{
|
||||||
utils::{ApiResponse, ApiResponseActiveList},
|
utils::{ApiResponse, ApiResponseActiveList},
|
||||||
AReceiver, ASender, Action, DBConn, RenderMessage,
|
AReceiver, ASender, Action, DBConn, RenderMessage,
|
||||||
@ -100,6 +100,52 @@ impl Animation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[get("/animations")]
|
||||||
|
pub async fn get_animations(db: &State<DBPool>) -> String {
|
||||||
|
let conn = get_conn(db);
|
||||||
|
if let Err(e) = conn {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
let conn = conn.unwrap();
|
||||||
|
|
||||||
|
let stmt = prepare_statement(&conn, "select id,priority,name,repeat from animation;");
|
||||||
|
if let Err(e) = stmt {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
let mut stmt = stmt.unwrap();
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize)]
|
||||||
|
#[serde(crate = "rocket::serde")]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct Data {
|
||||||
|
id: u32,
|
||||||
|
priority: u32,
|
||||||
|
name: String,
|
||||||
|
repeat: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
let animations = stmt.query_map([], |row| {
|
||||||
|
let repeat: u32 = row.get(3)?;
|
||||||
|
Ok(Data {
|
||||||
|
id: row.get(0)?,
|
||||||
|
priority: row.get(1)?,
|
||||||
|
name: row.get(2)?,
|
||||||
|
repeat: 1 == repeat,
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
if animations.is_err() || animations.as_ref().ok().is_none() {
|
||||||
|
return json!(ApiResponse {code: 500, message: "Clould not get data of db".to_string()}).to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
let animations = animations.unwrap();
|
||||||
|
|
||||||
|
let data: Vec<Data> = animations.into_iter().map(|a| a.unwrap()).collect();
|
||||||
|
|
||||||
|
json!(data).to_string()
|
||||||
|
}
|
||||||
|
|
||||||
// Add animation
|
// Add animation
|
||||||
#[post("/animation", data = "<data>")]
|
#[post("/animation", data = "<data>")]
|
||||||
pub async fn animation(data: Json<Animation>, db: &State<DBPool>) -> String {
|
pub async fn animation(data: Json<Animation>, db: &State<DBPool>) -> String {
|
||||||
|
@ -2,7 +2,7 @@ use r2d2::PooledConnection;
|
|||||||
use r2d2_sqlite::{SqliteConnectionManager, rusqlite::Statement};
|
use r2d2_sqlite::{SqliteConnectionManager, rusqlite::Statement};
|
||||||
use rocket::{serde::{json::{Json, serde_json::json}, Deserialize, Serialize}, State};
|
use rocket::{serde::{json::{Json, serde_json::json}, Deserialize, Serialize}, State};
|
||||||
|
|
||||||
use crate::{utils::{ApiResponse, get_error_message}, Action, ASender};
|
use crate::{utils::{ApiResponse, get_error_message, Conn, get_conn, prepare_statement}, Action, ASender};
|
||||||
use crate::DBPool;
|
use crate::DBPool;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
#[derive(Debug, Deserialize, Serialize, Clone)]
|
||||||
@ -75,26 +75,6 @@ pub async fn configure(data: Json<LightConfigurationRequest>, db: &State<DBPool>
|
|||||||
json!(ApiResponse {code: 200, message: "Configuration was successful".to_string()}).to_string()
|
json!(ApiResponse {code: 200, message: "Configuration was successful".to_string()}).to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
type Conn = PooledConnection<SqliteConnectionManager>;
|
|
||||||
|
|
||||||
fn get_conn(db: &State<DBPool>) -> Result<Conn, String> {
|
|
||||||
let conn = db.get();
|
|
||||||
if let Ok(conn) = conn {
|
|
||||||
return Ok(conn);
|
|
||||||
}
|
|
||||||
Err(json!(ApiResponse {code: 500, message: "Clould not conncect to the db.".to_string()}).to_string())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn prepare_statement<'a>(conn: &'a Conn, stat: &str) -> Result<Statement<'a>, String> {
|
|
||||||
let stmt = conn.prepare(stat);
|
|
||||||
if stmt.is_err() || stmt.as_ref().ok().is_none() {
|
|
||||||
println!("stmt: {}", stat);
|
|
||||||
return Err(get_error_message("Could not construct statetment"));
|
|
||||||
}
|
|
||||||
let stmt: Statement<'a> = stmt.unwrap();
|
|
||||||
return Ok(stmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn is_configured(conn: &Conn) -> Result<bool, String> {
|
fn is_configured(conn: &Conn) -> Result<bool, String> {
|
||||||
let mut stmt = prepare_statement(conn, "SELECT configured from meta;")?;
|
let mut stmt = prepare_statement(conn, "SELECT configured from meta;")?;
|
||||||
|
|
||||||
|
27
src/utils.rs
27
src/utils.rs
@ -1,4 +1,8 @@
|
|||||||
use rocket::{serde::{Deserialize, Serialize, json::{self, serde_json::json}}, Responder};
|
use r2d2::{PooledConnection};
|
||||||
|
use r2d2_sqlite::{SqliteConnectionManager, rusqlite::Statement};
|
||||||
|
use rocket::{serde::{Deserialize, Serialize, json::{self, serde_json::json}}, Responder, State};
|
||||||
|
|
||||||
|
use crate::DBPool;
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
#[serde(crate="rocket::serde")]
|
#[serde(crate="rocket::serde")]
|
||||||
@ -25,3 +29,24 @@ pub fn create_message(code: u32, message: &str) -> String {
|
|||||||
pub fn get_error_message(message: &str) -> String {
|
pub fn get_error_message(message: &str) -> String {
|
||||||
return create_message(500, message);
|
return create_message(500, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Conn = PooledConnection<SqliteConnectionManager>;
|
||||||
|
|
||||||
|
pub fn get_conn(db: &State<DBPool>) -> Result<Conn, String> {
|
||||||
|
let conn = db.get();
|
||||||
|
if let Ok(conn) = conn {
|
||||||
|
return Ok(conn);
|
||||||
|
}
|
||||||
|
Err(json!(ApiResponse {code: 500, message: "Clould not conncect to the db.".to_string()}).to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn prepare_statement<'a>(conn: &'a Conn, stat: &str) -> Result<Statement<'a>, String> {
|
||||||
|
let stmt = conn.prepare(stat);
|
||||||
|
if stmt.is_err() || stmt.as_ref().ok().is_none() {
|
||||||
|
println!("stmt: {}", stat);
|
||||||
|
return Err(get_error_message("Could not construct statetment"));
|
||||||
|
}
|
||||||
|
let stmt: Statement<'a> = stmt.unwrap();
|
||||||
|
return Ok(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user