Move shared API code to library project

This commit is contained in:
2025-09-08 17:03:35 +02:00
parent 05a0974ce8
commit 6f3e0629c5
12 changed files with 72 additions and 50 deletions

10
Cargo.lock generated
View File

@@ -294,6 +294,7 @@ dependencies = [
"rusqlite",
"serde",
"serde_json",
"shared_api_lib",
"tokio",
"warp",
]
@@ -1012,6 +1013,14 @@ dependencies = [
"digest",
]
[[package]]
name = "shared_api_lib"
version = "0.1.0"
dependencies = [
"chrono",
"log",
]
[[package]]
name = "shlex"
version = "1.3.0"
@@ -1060,6 +1069,7 @@ dependencies = [
"rusqlite",
"serde",
"serde_json",
"shared_api_lib",
"tokio",
"warp",
]

View File

@@ -1,7 +1,15 @@
[workspace]
resolver = "3"
members = [
"src/electricity_api"
, "src/solar_api"]
members = ["src/electricity_api", "src/shared_api_lib", "src/solar_api"]
[workspace.dependencies]
chrono = "0.4.41"
clap = "4.5.46"
colog = "1.3.0"
log = "0.4.27"
rusqlite = "0.37.0"
serde = "1.0.219"
serde_json = "1.0.143"
shared_api_lib = { path = "../shared_api_lib" }
tokio = "1"
warp = "0.4"

View File

@@ -4,12 +4,13 @@ version = "0.1.0"
edition = "2024"
[dependencies]
chrono = "0.4.41"
clap = { version = "4.5.46", features = ["derive"] }
colog = "1.3.0"
log = "0.4.27"
rusqlite = { version = "0.37.0", features = ["bundled"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.143"
tokio = { version = "1", features = ["full"] }
warp = { version = "0.4", features = ["server"] }
chrono = { workspace = true }
clap = { workspace = true, features = ["derive"] }
colog = { workspace = true }
log = { workspace = true }
rusqlite = { workspace = true, features = ["bundled"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
shared_api_lib = { path = "../shared_api_lib" }
tokio = { workspace = true, features = ["full"] }
warp = { workspace = true, features = ["server"] }

View File

@@ -1,14 +0,0 @@
use chrono::NaiveDate;
pub fn try_parse_query_date(value: Option<&String>) -> Option<NaiveDate> {
match value {
Some(string_value) => match chrono::NaiveDate::parse_from_str(string_value, "%Y-%m-%d") {
Ok(date) => Some(date),
Err(error) => {
log::error!("Failed to parse date {} with error {}", string_value, error);
return None;
}
},
_ => None,
}
}

View File

@@ -4,7 +4,6 @@ use warp::Filter;
use warp::http::Response;
mod database;
mod helpers;
#[tokio::main]
async fn main() {
@@ -55,7 +54,7 @@ async fn serve(configuration: &std::sync::Arc<CommandLineArgs>) {
.body(String::from("Forbidden"));
}
match helpers::try_parse_query_date(query.get("date")) {
match shared_api_lib::query_helpers::try_parse_query_date(query.get("date")) {
Some(date) => {
let json = get_day_power_json(&date, &configuration.database_path);
return Response::builder()
@@ -92,14 +91,16 @@ async fn serve(configuration: &std::sync::Arc<CommandLineArgs>) {
.body(String::from("Forbidden"));
}
let maybe_start = helpers::try_parse_query_date(query.get("start"));
let maybe_start =
shared_api_lib::query_helpers::try_parse_query_date(query.get("start"));
if maybe_start.is_none() {
return Response::builder()
.status(400)
.body(String::from("Unsupported \"start\" param in query."));
}
let maybe_stop = helpers::try_parse_query_date(query.get("stop"));
let maybe_stop =
shared_api_lib::query_helpers::try_parse_query_date(query.get("stop"));
if maybe_stop.is_none() {
return Response::builder()
.status(400)

View File

@@ -0,0 +1,8 @@
[package]
name = "shared_api_lib"
version = "0.1.0"
edition = "2024"
[dependencies]
chrono = { workspace = true }
log = { workspace = true }

View File

@@ -0,0 +1,2 @@
pub mod query_helpers;
pub mod year_month;

View File

@@ -4,12 +4,13 @@ version = "0.1.0"
edition = "2024"
[dependencies]
chrono = "0.4.41"
clap = { version = "4.5.46", features = ["derive"] }
colog = "1.3.0"
log = "0.4.27"
rusqlite = { version = "0.37.0", features = ["bundled"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.143"
tokio = { version = "1", features = ["full"] }
warp = { version = "0.4", features = ["server"] }
chrono = { workspace = true }
clap = { workspace = true, features = ["derive"] }
colog = { workspace = true }
log = { workspace = true }
rusqlite = { workspace = true, features = ["bundled"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
shared_api_lib = { path = "../shared_api_lib" }
tokio = { workspace = true, features = ["full"] }
warp = { workspace = true, features = ["server"] }

View File

@@ -1,4 +1,4 @@
use crate::year_month::YearMonth;
use shared_api_lib::year_month::YearMonth;
pub fn get_day_solar_entities(date: &chrono::NaiveDate, database_path: &str) -> DayEntities {
let mut result = DayEntities {

View File

@@ -1,13 +1,10 @@
use chrono;
use clap::Parser;
use std::collections::HashMap;
use warp::Filter;
use warp::http::Response;
use crate::year_month::YearMonth;
mod database;
mod query_helpers;
mod year_month;
#[tokio::main]
async fn main() {
@@ -38,7 +35,7 @@ async fn serve(configuration: &std::sync::Arc<CommandLineArgs>) {
}))
.map(
|query: HashMap<String, String>, configuration: std::sync::Arc<CommandLineArgs>| {
match query_helpers::try_parse_query_date(query.get("date")) {
match shared_api_lib::query_helpers::try_parse_query_date(query.get("date")) {
Some(date) => {
let json = get_day_solar_json(&date, &configuration.database_path);
return Response::builder()
@@ -61,14 +58,16 @@ async fn serve(configuration: &std::sync::Arc<CommandLineArgs>) {
}))
.map(
|query: HashMap<String, String>, configuration: std::sync::Arc<CommandLineArgs>| {
let maybe_start = query_helpers::try_parse_query_date(query.get("start"));
let maybe_start =
shared_api_lib::query_helpers::try_parse_query_date(query.get("start"));
if maybe_start.is_none() {
return Response::builder()
.status(400)
.body(String::from("Unsupported \"start\" param in query."));
}
let maybe_stop = query_helpers::try_parse_query_date(query.get("stop"));
let maybe_stop =
shared_api_lib::query_helpers::try_parse_query_date(query.get("stop"));
if maybe_stop.is_none() {
return Response::builder()
.status(400)
@@ -108,14 +107,16 @@ async fn serve(configuration: &std::sync::Arc<CommandLineArgs>) {
}))
.map(
|query: HashMap<String, String>, configuration: std::sync::Arc<CommandLineArgs>| {
let maybe_start = query_helpers::try_parse_query_month_year(query.get("start"));
let maybe_start =
shared_api_lib::query_helpers::try_parse_query_month_year(query.get("start"));
if maybe_start.is_none() {
return Response::builder()
.status(400)
.body(String::from("Unsupported \"start\" param in query."));
}
let maybe_stop = query_helpers::try_parse_query_month_year(query.get("stop"));
let maybe_stop =
shared_api_lib::query_helpers::try_parse_query_month_year(query.get("stop"));
if maybe_stop.is_none() {
return Response::builder()
.status(400)
@@ -239,7 +240,11 @@ struct DaysResponseItem {
zever_total_watts: i32,
}
fn get_months_solar_json(start: &YearMonth, stop: &YearMonth, database_path: &str) -> String {
fn get_months_solar_json(
start: &shared_api_lib::year_month::YearMonth,
stop: &shared_api_lib::year_month::YearMonth,
database_path: &str,
) -> String {
let summaries = database::get_month_solar_summaries(&start, &stop, &database_path);
let mut response_model = MonthsResponse {
month_logs: Vec::new(),