chore: rename server crate to application

This commit is contained in:
Jon Seager 2025-11-25 21:40:39 +00:00
parent 7df6cbcc51
commit e79db7c1d3
No known key found for this signature in database
15 changed files with 50 additions and 43 deletions

View file

@ -5,9 +5,9 @@ use axum::{
}; };
use tower_cookies::Cookies; use tower_cookies::Cookies;
use crate::application::server::AppState;
use crate::domain::users::User; use crate::domain::users::User;
use crate::infrastructure::auth::hash_token; use crate::infrastructure::auth::hash_token;
use crate::server::server::AppState;
const SESSION_COOKIE_NAME: &str = "brewlog_session"; const SESSION_COOKIE_NAME: &str = "brewlog_session";

View file

@ -8,10 +8,10 @@ use serde::Deserialize;
use tower_cookies::{Cookie, Cookies}; use tower_cookies::{Cookie, Cookies};
use tracing::{error, warn}; use tracing::{error, warn};
use crate::application::routes::render_html;
use crate::application::server::AppState;
use crate::domain::sessions::NewSession; use crate::domain::sessions::NewSession;
use crate::infrastructure::auth::{generate_session_token, hash_token, verify_password}; use crate::infrastructure::auth::{generate_session_token, hash_token, verify_password};
use crate::server::routes::render_html;
use crate::server::server::AppState;
const SESSION_COOKIE_NAME: &str = "brewlog_session"; const SESSION_COOKIE_NAME: &str = "brewlog_session";

View file

@ -13,7 +13,7 @@ use tower::ServiceBuilder;
use tower_cookies::CookieManagerLayer; use tower_cookies::CookieManagerLayer;
use tracing::error; use tracing::error;
use crate::server::server::AppState; use crate::application::server::AppState;
use crate::presentation::templates::render_template; use crate::presentation::templates::render_template;

View file

@ -3,6 +3,13 @@ use axum::extract::{Path, Query, State};
use axum::http::{HeaderMap, StatusCode}; use axum::http::{HeaderMap, StatusCode};
use axum::response::{Html, IntoResponse, Redirect, Response}; use axum::response::{Html, IntoResponse, Redirect, Response};
use crate::application::auth::AuthenticatedUser;
use crate::application::errors::{ApiError, AppError, map_app_error};
use crate::application::routes::render_html;
use crate::application::routes::support::{
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request,
};
use crate::application::server::AppState;
use crate::domain::ids::RoasterId; use crate::domain::ids::RoasterId;
use crate::domain::listing::{ListRequest, SortDirection}; use crate::domain::listing::{ListRequest, SortDirection};
use crate::domain::roasters::{NewRoaster, Roaster, RoasterSortKey, UpdateRoaster}; use crate::domain::roasters::{NewRoaster, Roaster, RoasterSortKey, UpdateRoaster};
@ -10,13 +17,6 @@ use crate::presentation::templates::{
RoasterDetailTemplate, RoasterListTemplate, RoastersTemplate, RoasterDetailTemplate, RoasterListTemplate, RoastersTemplate,
}; };
use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterView}; use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterView};
use crate::server::auth::AuthenticatedUser;
use crate::server::errors::{ApiError, AppError, map_app_error};
use crate::server::routes::render_html;
use crate::server::routes::support::{
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request,
};
use crate::server::server::AppState;
const ROASTER_PAGE_PATH: &str = "/roasters"; const ROASTER_PAGE_PATH: &str = "/roasters";
const ROASTER_FRAGMENT_PATH: &str = "/roasters#roaster-list"; const ROASTER_FRAGMENT_PATH: &str = "/roasters#roaster-list";
@ -31,7 +31,7 @@ async fn load_roaster_page(
.await .await
.map_err(AppError::from)?; .map_err(AppError::from)?;
Ok(crate::server::routes::support::build_page_view( Ok(crate::application::routes::support::build_page_view(
page, page,
request, request,
RoasterView::from, RoasterView::from,
@ -49,7 +49,8 @@ pub(crate) async fn roasters_page(
let request = query.into_request::<RoasterSortKey>(); let request = query.into_request::<RoasterSortKey>();
if is_datastar_request(&headers) { if is_datastar_request(&headers) {
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
return render_roaster_list_fragment(state, request, is_authenticated) return render_roaster_list_fragment(state, request, is_authenticated)
.await .await
.map_err(map_app_error); .map_err(map_app_error);
@ -59,7 +60,8 @@ pub(crate) async fn roasters_page(
.await .await
.map_err(map_app_error)?; .map_err(map_app_error)?;
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
let template = RoastersTemplate { let template = RoastersTemplate {
nav_active: "roasters", nav_active: "roasters",
@ -88,7 +90,8 @@ pub(crate) async fn roaster_page(
.map_err(|err| map_app_error(AppError::from(err)))?; .map_err(|err| map_app_error(AppError::from(err)))?;
let roaster_view = RoasterView::from(roaster); let roaster_view = RoasterView::from(roaster);
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
let template = RoasterDetailTemplate { let template = RoasterDetailTemplate {
nav_active: "roasters", nav_active: "roasters",
@ -208,5 +211,5 @@ async fn render_roaster_list_fragment(
navigator, navigator,
}; };
crate::server::routes::support::render_fragment(template, "#roaster-list") crate::application::routes::support::render_fragment(template, "#roaster-list")
} }

View file

@ -4,19 +4,19 @@ use axum::http::{HeaderMap, StatusCode};
use axum::response::{Html, IntoResponse, Redirect, Response}; use axum::response::{Html, IntoResponse, Redirect, Response};
use serde::Deserialize; use serde::Deserialize;
use crate::application::auth::AuthenticatedUser;
use crate::application::errors::{ApiError, AppError, map_app_error};
use crate::application::routes::render_html;
use crate::application::routes::support::{
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request,
};
use crate::application::server::AppState;
use crate::domain::ids::{RoastId, RoasterId}; use crate::domain::ids::{RoastId, RoasterId};
use crate::domain::listing::{ListRequest, SortDirection}; use crate::domain::listing::{ListRequest, SortDirection};
use crate::domain::roasters::RoasterSortKey; use crate::domain::roasters::RoasterSortKey;
use crate::domain::roasts::{NewRoast, Roast, RoastSortKey, RoastWithRoaster}; use crate::domain::roasts::{NewRoast, Roast, RoastSortKey, RoastWithRoaster};
use crate::presentation::templates::{RoastDetailTemplate, RoastListTemplate, RoastsTemplate}; use crate::presentation::templates::{RoastDetailTemplate, RoastListTemplate, RoastsTemplate};
use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterOptionView}; use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterOptionView};
use crate::server::auth::AuthenticatedUser;
use crate::server::errors::{ApiError, AppError, map_app_error};
use crate::server::routes::render_html;
use crate::server::routes::support::{
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request,
};
use crate::server::server::AppState;
const ROAST_PAGE_PATH: &str = "/roasts"; const ROAST_PAGE_PATH: &str = "/roasts";
const ROAST_FRAGMENT_PATH: &str = "/roasts#roast-list"; const ROAST_FRAGMENT_PATH: &str = "/roasts#roast-list";
@ -31,7 +31,7 @@ async fn load_roast_page(
.await .await
.map_err(AppError::from)?; .map_err(AppError::from)?;
Ok(crate::server::routes::support::build_page_view( Ok(crate::application::routes::support::build_page_view(
page, page,
request, request,
RoastView::from_list_item, RoastView::from_list_item,
@ -49,7 +49,8 @@ pub(crate) async fn roasts_page(
let request = query.into_request::<RoastSortKey>(); let request = query.into_request::<RoastSortKey>();
if is_datastar_request(&headers) { if is_datastar_request(&headers) {
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
return render_roast_list_fragment(state, request, is_authenticated) return render_roast_list_fragment(state, request, is_authenticated)
.await .await
.map_err(map_app_error); .map_err(map_app_error);
@ -67,7 +68,8 @@ pub(crate) async fn roasts_page(
.await .await
.map_err(map_app_error)?; .map_err(map_app_error)?;
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
let template = RoastsTemplate { let template = RoastsTemplate {
nav_active: "roasts", nav_active: "roasts",
@ -97,7 +99,8 @@ pub(crate) async fn roast_page(
.await .await
.map_err(|err| map_app_error(AppError::from(err)))?; .map_err(|err| map_app_error(AppError::from(err)))?;
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
let template = RoastDetailTemplate { let template = RoastDetailTemplate {
nav_active: "roasts", nav_active: "roasts",
@ -277,5 +280,5 @@ async fn render_roast_list_fragment(
navigator, navigator,
}; };
crate::server::routes::support::render_fragment(template, "#roast-list") crate::application::routes::support::render_fragment(template, "#roast-list")
} }

View file

@ -5,11 +5,11 @@ use axum::http::{HeaderMap, HeaderValue, header::CONTENT_TYPE};
use axum::response::{Html, IntoResponse, Response}; use axum::response::{Html, IntoResponse, Response};
use serde::Deserialize; use serde::Deserialize;
use crate::application::errors::{ApiError, AppError};
use crate::domain::listing::{ use crate::domain::listing::{
DEFAULT_PAGE_SIZE, ListRequest, Page, PageSize, SortDirection, SortKey, DEFAULT_PAGE_SIZE, ListRequest, Page, PageSize, SortDirection, SortKey,
}; };
use crate::presentation::views::{ListNavigator, Paginated}; use crate::presentation::views::{ListNavigator, Paginated};
use crate::server::errors::{ApiError, AppError};
#[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum PayloadSource { pub enum PayloadSource {

View file

@ -3,14 +3,14 @@ use axum::http::HeaderMap;
use axum::http::StatusCode; use axum::http::StatusCode;
use axum::response::{IntoResponse, Response}; use axum::response::{IntoResponse, Response};
use crate::application::errors::{AppError, map_app_error};
use crate::application::routes::render_html;
use crate::application::routes::support::{ListQuery, is_datastar_request, normalize_request};
use crate::application::server::AppState;
use crate::domain::listing::ListRequest; use crate::domain::listing::ListRequest;
use crate::domain::timeline::{TimelineEvent, TimelineSortKey}; use crate::domain::timeline::{TimelineEvent, TimelineSortKey};
use crate::presentation::templates::{TimelineChunkTemplate, TimelineTemplate}; use crate::presentation::templates::{TimelineChunkTemplate, TimelineTemplate};
use crate::presentation::views::{ListNavigator, Paginated, TimelineEventView, TimelineMonthView}; use crate::presentation::views::{ListNavigator, Paginated, TimelineEventView, TimelineMonthView};
use crate::server::errors::{AppError, map_app_error};
use crate::server::routes::render_html;
use crate::server::routes::support::{ListQuery, is_datastar_request, normalize_request};
use crate::server::server::AppState;
const TIMELINE_PAGE_PATH: &str = "/timeline"; const TIMELINE_PAGE_PATH: &str = "/timeline";
const TIMELINE_FRAGMENT_PATH: &str = "/timeline"; const TIMELINE_FRAGMENT_PATH: &str = "/timeline";
@ -33,7 +33,8 @@ pub(crate) async fn timeline_page(
.await .await
.map_err(map_app_error)?; .map_err(map_app_error)?;
let is_authenticated = crate::server::routes::auth::is_authenticated(&state, &cookies).await; let is_authenticated =
crate::application::routes::auth::is_authenticated(&state, &cookies).await;
let template = TimelineTemplate { let template = TimelineTemplate {
nav_active: "timeline", nav_active: "timeline",
@ -63,7 +64,7 @@ async fn render_timeline_chunk(
months: data.months, months: data.months,
}; };
crate::server::routes::support::render_fragment(template, "#timeline-loader") crate::application::routes::support::render_fragment(template, "#timeline-loader")
} }
struct TimelinePageData { struct TimelinePageData {

View file

@ -4,11 +4,11 @@ use axum::http::StatusCode;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::application::auth::AuthenticatedUser;
use crate::application::server::AppState;
use crate::domain::ids::{TokenId, UserId}; use crate::domain::ids::{TokenId, UserId};
use crate::domain::tokens::{NewToken, Token}; use crate::domain::tokens::{NewToken, Token};
use crate::infrastructure::auth::{generate_token, hash_token, verify_password}; use crate::infrastructure::auth::{generate_token, hash_token, verify_password};
use crate::server::auth::AuthenticatedUser;
use crate::server::server::AppState;
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct CreateTokenRequest { pub struct CreateTokenRequest {

View file

@ -7,6 +7,7 @@ use tokio::net::TcpListener;
use tokio::signal; use tokio::signal;
use tracing::info; use tracing::info;
use crate::application::routes::app_router;
use crate::domain::repositories::{ use crate::domain::repositories::{
RoastRepository, RoasterRepository, SessionRepository, TimelineEventRepository, RoastRepository, RoasterRepository, SessionRepository, TimelineEventRepository,
TokenRepository, UserRepository, TokenRepository, UserRepository,
@ -20,7 +21,6 @@ use crate::infrastructure::repositories::sessions::SqlSessionRepository;
use crate::infrastructure::repositories::timeline_events::SqlTimelineEventRepository; use crate::infrastructure::repositories::timeline_events::SqlTimelineEventRepository;
use crate::infrastructure::repositories::tokens::SqlTokenRepository; use crate::infrastructure::repositories::tokens::SqlTokenRepository;
use crate::infrastructure::repositories::users::SqlUserRepository; use crate::infrastructure::repositories::users::SqlUserRepository;
use crate::server::routes::app_router;
pub struct ServerConfig { pub struct ServerConfig {
pub bind_address: SocketAddr, pub bind_address: SocketAddr,

View file

@ -5,7 +5,7 @@ pub mod tokens;
use anyhow::{Context, Result, anyhow}; use anyhow::{Context, Result, anyhow};
use reqwest::{Client, Url}; use reqwest::{Client, Url};
use crate::server::errors::ErrorResponse; use crate::application::errors::ErrorResponse;
pub struct BrewlogClient { pub struct BrewlogClient {
base_url: Url, base_url: Url,

View file

@ -1,6 +1,6 @@
pub mod application;
pub mod cli; pub mod cli;
pub mod client; pub mod client;
pub mod domain; pub mod domain;
pub mod infrastructure; pub mod infrastructure;
pub mod presentation; pub mod presentation;
pub mod server;

View file

@ -1,7 +1,7 @@
use anyhow::Result; use anyhow::Result;
use brewlog::application::{ServerConfig, serve};
use brewlog::cli::{Cli, Commands, ServeCommand, roasters, roasts, tokens}; use brewlog::cli::{Cli, Commands, ServeCommand, roasters, roasts, tokens};
use brewlog::client::BrewlogClient; use brewlog::client::BrewlogClient;
use brewlog::server::{ServerConfig, serve};
use clap::Parser; use clap::Parser;
use tracing_subscriber::{EnvFilter, fmt, prelude::*}; use tracing_subscriber::{EnvFilter, fmt, prelude::*};

View file

@ -1,5 +1,7 @@
use std::sync::Arc; use std::sync::Arc;
use brewlog::application::routes::app_router;
use brewlog::application::server::AppState;
use brewlog::domain::repositories::{ use brewlog::domain::repositories::{
RoastRepository, RoasterRepository, SessionRepository, TimelineEventRepository, RoastRepository, RoasterRepository, SessionRepository, TimelineEventRepository,
TokenRepository, UserRepository, TokenRepository, UserRepository,
@ -14,8 +16,6 @@ use brewlog::infrastructure::repositories::sessions::SqlSessionRepository;
use brewlog::infrastructure::repositories::timeline_events::SqlTimelineEventRepository; use brewlog::infrastructure::repositories::timeline_events::SqlTimelineEventRepository;
use brewlog::infrastructure::repositories::tokens::SqlTokenRepository; use brewlog::infrastructure::repositories::tokens::SqlTokenRepository;
use brewlog::infrastructure::repositories::users::SqlUserRepository; use brewlog::infrastructure::repositories::users::SqlUserRepository;
use brewlog::server::routes::app_router;
use brewlog::server::server::AppState;
use reqwest::Client; use reqwest::Client;
use tokio::net::TcpListener; use tokio::net::TcpListener;