Compare commits

..

3 Commits

Author SHA1 Message Date
Lukas Wölfer
3bfe779425 chore: bump version to 0.1.0
Some checks failed
Rust / build_and_test (push) Failing after 25s
2026-04-11 14:55:08 +02:00
Lukas Wölfer
395099d0ee chore: add static folder to build artifacts 2026-04-11 14:52:52 +02:00
Lukas Wölfer
b922a610e6 feat: usability 2026-04-11 14:48:43 +02:00
6 changed files with 61 additions and 34 deletions

View File

@@ -3,7 +3,7 @@ name: Release
on: on:
push: push:
tags: tags:
- 'v*.*.*' - "v*.*.*"
jobs: jobs:
build_release: build_release:
@@ -22,6 +22,11 @@ jobs:
- name: Build release - name: Build release
run: | run: |
cargo build --release cargo build --release
- name: Package frontend
run: |
zip -r static.zip static
- name: Generate a changelog - name: Generate a changelog
uses: orhun/git-cliff-action@v4 uses: orhun/git-cliff-action@v4
id: git-cliff id: git-cliff
@@ -31,8 +36,10 @@ jobs:
github_token: "" github_token: ""
env: env:
OUTPUT: CHANGELOG.md OUTPUT: CHANGELOG.md
- uses: akkuman/gitea-release-action@v1 - uses: akkuman/gitea-release-action@v1
with: with:
files: |- files: |-
target/release/weight_tracker target/release/weight_tracker
body: Release build for weight_tracker static.zip
body: ${{ steps.git-cliff.outputs.content }}

View File

@@ -14,7 +14,7 @@ if [ "${CONFIRM}" != "Y" ]; then
exit 1 exit 1
fi fi
git commit -am "chore: bump version to ${VERSION}" git commit --allow-empty -am "chore: bump version to ${VERSION}"
git tag -am "Version ${VERSION}" "${VERSION}" git tag -am "Version ${VERSION}" "${VERSION}"
echo Press Y to push commit and tag echo Press Y to push commit and tag

View File

@@ -20,6 +20,7 @@ pub struct IndexTemplate {
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct WeightForm { pub struct WeightForm {
date: String, date: String,
time: String,
weight: f64, weight: f64,
} }
@@ -149,8 +150,9 @@ pub async fn input_post(
Form(form): Form<WeightForm>, Form(form): Form<WeightForm>,
) -> Result<Html<String>, Redirect> { ) -> Result<Html<String>, Redirect> {
// Check if user is authenticated // Check if user is authenticated
// if let Some(user_id) = session.get::<String>("user_id") { if let Some(user_id) = session.get::<String>("user_id") {
super::models::insert_weight(&state.pool, "lukas", &form.date, form.weight) let datetime = format!("{}T{}", form.date, form.time);
super::models::insert_weight(&state.pool, &user_id, &datetime, form.weight)
.await .await
.unwrap(); .unwrap();
let weights = super::models::get_all_weights(&state.pool) let weights = super::models::get_all_weights(&state.pool)
@@ -160,12 +162,12 @@ pub async fn input_post(
for weight in weights { for weight in weights {
html.push_str(&format!( html.push_str(&format!(
"<p>{}: {} kg by {}</p>\n", "<p>{}: {} kg by {}</p>\n",
weight.date, weight.weight, "lukas" weight.date, weight.weight, &user_id
)); ));
} }
Ok(Html(html)) Ok(Html(html))
// } else { } else {
// // Redirect to login if not authenticated // Redirect to login if not authenticated
// Err(Redirect::to("/auth/login")) Err(Redirect::to("/auth/login"))
// } }
} }

View File

@@ -5,8 +5,6 @@ use weight_tracker::{AppState, config::Config, create_app};
#[tokio::main] #[tokio::main]
async fn 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| { let config = Config::load("config.toml").unwrap_or_else(|e| {
eprintln!("Failed to load configuration: {}", e); eprintln!("Failed to load configuration: {}", e);
eprintln!("Using default values. Set environment variables prefixed with WEIGHT_TRACKER_ to override."); eprintln!("Using default values. Set environment variables prefixed with WEIGHT_TRACKER_ to override.");

View File

@@ -1,10 +1,46 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Weight Tracker</title> <title>Weight Tracker</title>
<script src="https://unpkg.com/htmx.org@1.9.10"></script> <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"> <link rel="stylesheet" href="/static/css/style.css">
</head> </head>
<body> <body>
<h1>Weight Tracker</h1> <h1>Weight Tracker</h1>
<div id="weights"> <div id="weights">
@@ -12,16 +48,20 @@
<p>{{ weight.date }}: {{ weight.weight }} kg by {{ weight.user_id }}</p> <p>{{ weight.date }}: {{ weight.weight }} kg by {{ weight.user_id }}</p>
{% endfor %} {% endfor %}
</div> </div>
<button onclick="document.getElementById('inputDialog').showModal()">Add Weight</button> <button onclick="showInputDialog()">Add Weight</button>
<dialog id="inputDialog"> <dialog id="inputDialog">
<h1>Add Weight</h1> <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> <label for="date">Date:</label>
<input type="date" id="date" name="date" required><br> <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> <label for="weight">Weight (kg):</label>
<input type="number" step="0.1" id="weight" name="weight" required><br> <input type="number" step="0.1" id="weight" name="weight" required><br>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
</dialog> </dialog>
</body> </body>
</html> </html>

View File

@@ -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>