From dc7c87613a0dee3732f0e1b53e5cc0edaef2f765 Mon Sep 17 00:00:00 2001 From: schn33fuchs Date: Wed, 13 May 2026 22:01:39 +0200 Subject: [PATCH] Funny counter --- backend/src/main.rs | 32 ++++++++++++++++++++++++++++---- backend/src/router.rs | 7 +++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 04c0dd9..689ca38 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -9,19 +9,43 @@ mod models; /// Axum router configuration with all routes and middleware mod router; -use std::sync::Arc; +use std::sync::{ + Arc, + atomic::{AtomicI64, Ordering}, +}; -use axum::http::{ - HeaderValue, Method, - header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE}, +use axum::{ + Json, + http::{ + HeaderValue, Method, StatusCode, + header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE}, + }, }; use dotenv::dotenv; use router::create_router; +use serde::Serialize; use sqlx::{PgPool, postgres::PgPoolOptions}; use tower_http::cors::CorsLayer; use crate::env::Env; +static EASY_FIX_COUNT: AtomicI64 = AtomicI64::new(0); + +#[derive(Serialize)] +struct CounterResp { + value: i64, +} + +async fn get_count() -> Json { + let v = EASY_FIX_COUNT.load(Ordering::SeqCst); + Json(CounterResp { value: v }) +} + +async fn increment() -> Result, StatusCode> { + let new = EASY_FIX_COUNT.fetch_add(1, Ordering::SeqCst) + 1; + Ok(Json(CounterResp { value: new })) +} + /// Shared application state passed to all route handlers. /// /// Contains the database connection pool and environment configuration. diff --git a/backend/src/router.rs b/backend/src/router.rs index bc41ba5..d00131c 100644 --- a/backend/src/router.rs +++ b/backend/src/router.rs @@ -8,13 +8,15 @@ use axum::{ use crate::{ AppState, cookie::validation::{validate_admin, validate_token}, + get_count, handlers::{ auth::{ - check_admin_exists, create_user, delete_user, get_current_user, get_user_by_id, get_users, login, logout, - setup_initial_admin, update_user, + check_admin_exists, create_user, delete_user, get_current_user, get_user_by_id, + get_users, login, logout, setup_initial_admin, update_user, }, ticket::{create_ticket, delete_ticket, edit_ticket, get_ticket_by_id, get_tickets}, }, + increment, }; /// Creates the complete router with all API endpoints. @@ -73,6 +75,7 @@ pub fn create_router(state: Arc) -> Router { .route("/api/tickets/create", post(create_ticket)) .route("/api/logout", get(logout)) .route("/api/users/current", get(get_current_user)) + .route("/api/count", get(get_count).post(increment)) .layer(middleware::from_fn_with_state( state.clone(), validate_token,