feat: usability
This commit is contained in:
@@ -20,6 +20,7 @@ pub struct IndexTemplate {
|
||||
#[derive(Deserialize)]
|
||||
pub struct WeightForm {
|
||||
date: String,
|
||||
time: String,
|
||||
weight: f64,
|
||||
}
|
||||
|
||||
@@ -149,8 +150,9 @@ pub async fn input_post(
|
||||
Form(form): Form<WeightForm>,
|
||||
) -> Result<Html<String>, Redirect> {
|
||||
// Check if user is authenticated
|
||||
// if let Some(user_id) = session.get::<String>("user_id") {
|
||||
super::models::insert_weight(&state.pool, "lukas", &form.date, form.weight)
|
||||
if let Some(user_id) = session.get::<String>("user_id") {
|
||||
let datetime = format!("{}T{}", form.date, form.time);
|
||||
super::models::insert_weight(&state.pool, &user_id, &datetime, form.weight)
|
||||
.await
|
||||
.unwrap();
|
||||
let weights = super::models::get_all_weights(&state.pool)
|
||||
@@ -160,12 +162,12 @@ pub async fn input_post(
|
||||
for weight in weights {
|
||||
html.push_str(&format!(
|
||||
"<p>{}: {} kg by {}</p>\n",
|
||||
weight.date, weight.weight, "lukas"
|
||||
weight.date, weight.weight, &user_id
|
||||
));
|
||||
}
|
||||
Ok(Html(html))
|
||||
// } else {
|
||||
// // Redirect to login if not authenticated
|
||||
// Err(Redirect::to("/auth/login"))
|
||||
// }
|
||||
} else {
|
||||
// Redirect to login if not authenticated
|
||||
Err(Redirect::to("/auth/login"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ use weight_tracker::{AppState, config::Config, create_app};
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// Load configuration from config.toml or environment variables
|
||||
// config-rs automatically merges file + environment + defaults
|
||||
let config = Config::load("config.toml").unwrap_or_else(|e| {
|
||||
eprintln!("Failed to load configuration: {}", e);
|
||||
eprintln!("Using default values. Set environment variables prefixed with WEIGHT_TRACKER_ to override.");
|
||||
|
||||
@@ -1,10 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Weight Tracker</title>
|
||||
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
|
||||
|
||||
<script>
|
||||
function fillCurrentDateTime() {
|
||||
// Fill date and time with current values
|
||||
const now = new Date();
|
||||
|
||||
// Format date as YYYY-MM-DD
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
document.getElementById('date').value = `${year}-${month}-${day}`;
|
||||
|
||||
// Format time as HH:MM
|
||||
const hours = String(now.getHours()).padStart(2, '0');
|
||||
const minutes = String(now.getMinutes()).padStart(2, '0');
|
||||
document.getElementById('time').value = `${hours}:${minutes}`;
|
||||
|
||||
// Fill weight with the latest weight from the list
|
||||
const weightElements = document.querySelectorAll('#weights p');
|
||||
if (weightElements.length > 0) {
|
||||
const latestWeightText = weightElements[0].textContent;
|
||||
// Extract weight value from format "YYYY-MM-DD: XX.X kg by username"
|
||||
const match = latestWeightText.match(/(\d+\.?\d*)\s*kg/);
|
||||
if (match) {
|
||||
document.getElementById('weight').value = match[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showInputDialog() {
|
||||
fillCurrentDateTime();
|
||||
document.getElementById('inputDialog').showModal();
|
||||
}
|
||||
</script>
|
||||
<link rel="stylesheet" href="/static/css/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Weight Tracker</h1>
|
||||
<div id="weights">
|
||||
@@ -12,16 +48,20 @@
|
||||
<p>{{ weight.date }}: {{ weight.weight }} kg by {{ weight.user_id }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<button onclick="document.getElementById('inputDialog').showModal()">Add Weight</button>
|
||||
<button onclick="showInputDialog()">Add Weight</button>
|
||||
<dialog id="inputDialog">
|
||||
<h1>Add Weight</h1>
|
||||
<form hx-post="/input" hx-target="#weights" hx-swap="innerHTML" hx-on:htmx:after-request="document.getElementById('inputDialog').close()">
|
||||
<form hx-post="/input" hx-target="#weights" hx-swap="innerHTML"
|
||||
hx-on:htmx:after-request="document.getElementById('inputDialog').close()">
|
||||
<label for="date">Date:</label>
|
||||
<input type="date" id="date" name="date" required><br>
|
||||
<label for="time">Time:</label>
|
||||
<input type="time" id="time" name="time" required><br>
|
||||
<label for="weight">Weight (kg):</label>
|
||||
<input type="number" step="0.1" id="weight" name="weight" required><br>
|
||||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
</dialog>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Add Weight</title>
|
||||
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
|
||||
<link rel="stylesheet" href="/static/css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Add Weight</h1>
|
||||
<form hx-post="/input" hx-target="#result" hx-swap="innerHTML">
|
||||
<label for="date">Date:</label>
|
||||
<input type="date" id="date" name="date" required><br>
|
||||
<label for="weight">Weight (kg):</label>
|
||||
<input type="number" step="0.1" id="weight" name="weight" required><br>
|
||||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
<div id="result"></div>
|
||||
<a href="/">Back to Tracker</a>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user