From 25655b7bcb9d4eb10e92873402c9e0ca6acd62d3 Mon Sep 17 00:00:00 2001 From: Tobias Maier Date: Sun, 24 Sep 2023 15:04:44 +0000 Subject: [PATCH] fixes --- .devcontainer/docker-compose.yml | 3 +++ .gitea/workflows/release_actions.yaml | 1 + src/database.rs | 15 ++++++++++++++- src/main.rs | 16 +++++++++++++++- src/schemas.rs | 6 ++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflows/release_actions.yaml diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index a542de7..4b4f192 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -7,6 +7,8 @@ services: volumes: - ..:/workspace:cached command: sleep infinity + ports: + - 1234:8080 db: image: postgres @@ -16,6 +18,7 @@ services: POSTGRES_DB: iot ports: - 5432:5432 + restart: always command: ["postgres", "-c", "log_statement=all"] adminer: diff --git a/.gitea/workflows/release_actions.yaml b/.gitea/workflows/release_actions.yaml new file mode 100644 index 0000000..056c0f1 --- /dev/null +++ b/.gitea/workflows/release_actions.yaml @@ -0,0 +1 @@ +name: Pull Request Created Action \ No newline at end of file diff --git a/src/database.rs b/src/database.rs index e2d41f6..0268c42 100644 --- a/src/database.rs +++ b/src/database.rs @@ -4,7 +4,7 @@ use log::{error, info}; use sqlx::{migrate, pool, postgres::PgPoolOptions, query, query_as, PgPool, Pool, Postgres}; use thiserror::Error; -use crate::schemas::{TelemetryMessage, TelemetryMessageFromDevice, ValueMessageFromDevice, ValueMessage}; +use crate::schemas::{TelemetryMessage, TelemetryMessageFromDevice, ValueMessageFromDevice, ValueMessage, Device}; #[derive(Clone)] pub struct Database { @@ -140,4 +140,17 @@ impl Database { Ok(values) } + + pub async fn get_devices(&self) -> Result, DatabaseError> { + info!("Getting all devices"); + let devices = query_as!( + Device, + "SELECT id, display_name + FROM Devices;", + ) + .fetch_all(&self.conn_pool) + .await?; + + Ok(devices) + } } diff --git a/src/main.rs b/src/main.rs index 5a73ee6..75c7926 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,6 +84,19 @@ async fn get_value(device_id: web::Path, data: web::Data) -> i HttpResponse::Ok().json(messages) } +#[get("/device/")] +async fn get_devices(data: web::Data) -> impl Responder { + info!("GET - devices - Processing"); + let devices = match data.db.get_devices().await { + Ok(devs) => devs, + Err(e) => { + error!("Getting Devices from DB failed \n{}", e); + return HttpResponse::InternalServerError().finish(); + } + }; + HttpResponse::Ok().json(devices) +} + #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init(); @@ -100,8 +113,9 @@ async fn main() -> std::io::Result<()> { .service(get_telemetry) .service(receive_value) .service(get_value) + .service(get_devices) }) - .bind(("127.0.0.1", 8080))? + .bind(("0.0.0.0", 8080))? .run() .await } diff --git a/src/schemas.rs b/src/schemas.rs index 923682c..c3f578c 100644 --- a/src/schemas.rs +++ b/src/schemas.rs @@ -31,3 +31,9 @@ pub struct ValueMessage { pub value_id: i32, pub timestamp: NaiveDateTime, } + +#[derive(Deserialize, Debug, Serialize)] +pub struct Device { + pub display_name: Option, + pub id: String +} \ No newline at end of file