Now using macaddr datatype and added test for adding devices and displaynames
All checks were successful
Build Project / test (push) Successful in 6m32s

This commit is contained in:
2025-01-04 17:06:13 +00:00
parent 1466075b7b
commit f76f248446
9 changed files with 174 additions and 28 deletions

View File

@@ -1,12 +1,15 @@
use std::{env, process};
use crate::schemas::{TelemetryMessageFromDevice, ValueMessageFromDevice};
use actix_web::{get, http::StatusCode, post, web, App, HttpResponse, HttpServer, Responder};
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use database::Database;
use log::{debug, error, info};
use log::{error, info};
use sqlx::types::mac_address::MacAddress;
use util::parse_mac_address;
mod database;
mod schemas;
mod util;
struct AppState {
db: Database,
@@ -19,7 +22,11 @@ async fn receive_telemetry(
telemetry_message: web::Json<TelemetryMessageFromDevice>,
) -> impl Responder {
info!("POST - telementry - Processing device id {}", device_id);
match data.db.create_device_if_not_exists(&device_id).await {
let Ok(mac_converted) = parse_mac_address(&device_id) else {
return HttpResponse::InternalServerError();
};
let mac_converted = MacAddress::from(mac_converted);
match data.db.create_device_if_not_exists(&mac_converted).await {
Ok(_) => {}
Err(e) => {
error!("Error creating new device: {}", e);
@@ -27,7 +34,7 @@ async fn receive_telemetry(
}
};
match data.db.add_telemetry(&telemetry_message, &device_id).await {
match data.db.add_telemetry(&telemetry_message, &mac_converted).await {
Ok(_) => HttpResponse::Created(),
Err(e) => {
error!("adding Telemetry message to DB failed \n{}", e);
@@ -39,7 +46,11 @@ async fn receive_telemetry(
#[get("/telemetry/{device_id}")]
async fn get_telemetry(device_id: web::Path<String>, data: web::Data<AppState>) -> impl Responder {
info!("GET - telementry - Processing device id {}", device_id);
let messages = match data.db.get_telemetry_for_id(&device_id).await {
let Ok(mac_converted) = parse_mac_address(&device_id) else {
return HttpResponse::InternalServerError().finish();
};
let mac_converted = MacAddress::from(mac_converted);
let messages = match data.db.get_telemetry_for_id(&mac_converted).await {
Ok(msgs) => msgs,
Err(e) => {
error!("Getting Telemetry Messages from DB failed \n{}", e);
@@ -56,7 +67,11 @@ async fn receive_value(
value_message: web::Json<ValueMessageFromDevice>,
) -> impl Responder {
info!("POST - value - Processing device id {}", device_id);
match data.db.create_device_if_not_exists(&device_id).await {
let Ok(mac_converted) = parse_mac_address(&device_id) else {
return HttpResponse::InternalServerError();
};
let mac_converted = MacAddress::from(mac_converted);
match data.db.create_device_if_not_exists(&mac_converted).await {
Ok(_) => {}
Err(e) => {
error!("Error creating new device: {}", e);
@@ -64,7 +79,7 @@ async fn receive_value(
}
};
match data.db.add_value(&value_message, &device_id).await {
match data.db.add_value(&value_message, &mac_converted).await {
Ok(_) => HttpResponse::Created(),
Err(e) => {
error!("adding Telemetry message to DB failed \n{}", e);
@@ -76,7 +91,11 @@ async fn receive_value(
#[get("/value/{device_id}")]
async fn get_value(device_id: web::Path<String>, data: web::Data<AppState>) -> impl Responder {
info!("GET - value - Processing device id {}", device_id);
let messages = match data.db.get_values_for_id(&device_id).await {
let Ok(mac_converted) = parse_mac_address(&device_id) else {
return HttpResponse::InternalServerError().finish();
};
let mac_converted = MacAddress::from(mac_converted);
let messages = match data.db.get_values_for_id(&mac_converted).await {
Ok(msgs) => msgs,
Err(e) => {
error!("Getting Values from DB failed \n{}", e);
@@ -108,7 +127,7 @@ async fn main() -> std::io::Result<()> {
let db_url = match env::var("DATABASE_URL") {
Ok(url) => url,
Err(e) => {
error!("Failed reading DATABASE_URL");
error!("Failed reading DATABASE_URL: {e}");
process::exit(1);
}
};