From edc00217923d837705ab27fb0a1ff97fa148be2c Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Sun, 8 Feb 2026 18:16:16 +0000 Subject: [PATCH] refactor: split large directories into coffee/auth/analytics subdirs - Restructure domain/, repositories/, and routes/api/ into themed subdirectories: coffee/, auth/, analytics/ (and system/ for routes) - Convert super:: relative imports to crate:: absolute paths - Promote macro visibility from pub(super) to pub(crate) - Add pub use re-exports for backward-compatible import paths --- src/application/routes/api/analytics/mod.rs | 1 + .../routes/api/{ => analytics}/stats.rs | 0 src/application/routes/api/auth/mod.rs | 2 ++ .../routes/api/{ => auth}/tokens.rs | 0 .../routes/api/{ => auth}/webauthn.rs | 0 .../routes/api/{ => coffee}/bags.rs | 2 +- .../routes/api/{ => coffee}/brews.rs | 2 +- .../routes/api/{ => coffee}/cafes.rs | 4 ++- .../routes/api/{ => coffee}/checkin.rs | 0 .../routes/api/{ => coffee}/cups.rs | 6 ++--- .../routes/api/{ => coffee}/gear.rs | 4 ++- src/application/routes/api/coffee/mod.rs | 9 +++++++ .../routes/api/{ => coffee}/roasters.rs | 4 ++- .../routes/api/{ => coffee}/roasts.rs | 6 ++--- .../routes/api/{ => coffee}/scan.rs | 2 +- src/application/routes/api/macros.rs | 8 +++--- src/application/routes/api/mod.rs | 26 ++++++++----------- .../routes/api/{ => system}/admin.rs | 0 .../routes/api/{ => system}/backup.rs | 0 src/application/routes/api/system/mod.rs | 2 ++ src/domain/{ => analytics}/ai_usage.rs | 0 src/domain/{ => analytics}/country_stats.rs | 2 +- src/domain/analytics/mod.rs | 4 +++ src/domain/{ => analytics}/stats.rs | 2 +- src/domain/{ => analytics}/timeline.rs | 0 src/domain/auth/mod.rs | 5 ++++ src/domain/{ => auth}/passkey_credentials.rs | 0 src/domain/{ => auth}/registration_tokens.rs | 0 src/domain/{ => auth}/sessions.rs | 0 src/domain/{ => auth}/tokens.rs | 0 src/domain/{ => auth}/users.rs | 0 src/domain/{ => coffee}/bags.rs | 6 ++--- src/domain/{ => coffee}/brews.rs | 6 ++--- src/domain/{ => coffee}/cafes.rs | 0 src/domain/{ => coffee}/cups.rs | 4 +-- src/domain/{ => coffee}/gear.rs | 4 +-- src/domain/coffee/mod.rs | 7 +++++ src/domain/{ => coffee}/roasters.rs | 0 src/domain/{ => coffee}/roasts.rs | 0 src/domain/mod.rs | 23 +++++----------- .../repositories/{ => analytics}/ai_usage.rs | 0 .../repositories/analytics/mod.rs | 3 +++ .../repositories/{ => analytics}/stats.rs | 0 .../{ => analytics}/timeline_events.rs | 0 src/infrastructure/repositories/auth/mod.rs | 5 ++++ .../{ => auth}/passkey_credentials.rs | 0 .../{ => auth}/registration_tokens.rs | 0 .../repositories/{ => auth}/sessions.rs | 0 .../repositories/{ => auth}/tokens.rs | 0 .../repositories/{ => auth}/users.rs | 0 .../repositories/{ => coffee}/bags.rs | 2 +- .../repositories/{ => coffee}/brews.rs | 0 .../repositories/{ => coffee}/cafes.rs | 2 +- .../repositories/{ => coffee}/cups.rs | 0 .../repositories/{ => coffee}/gear.rs | 2 +- src/infrastructure/repositories/coffee/mod.rs | 7 +++++ .../repositories/{ => coffee}/roasters.rs | 2 +- .../repositories/{ => coffee}/roasts.rs | 2 +- src/infrastructure/repositories/macros.rs | 2 +- src/infrastructure/repositories/mod.rs | 25 +++++++----------- 60 files changed, 112 insertions(+), 81 deletions(-) create mode 100644 src/application/routes/api/analytics/mod.rs rename src/application/routes/api/{ => analytics}/stats.rs (100%) create mode 100644 src/application/routes/api/auth/mod.rs rename src/application/routes/api/{ => auth}/tokens.rs (100%) rename src/application/routes/api/{ => auth}/webauthn.rs (100%) rename src/application/routes/api/{ => coffee}/bags.rs (98%) rename src/application/routes/api/{ => coffee}/brews.rs (99%) rename src/application/routes/api/{ => coffee}/cafes.rs (98%) rename src/application/routes/api/{ => coffee}/checkin.rs (100%) rename src/application/routes/api/{ => coffee}/cups.rs (98%) rename src/application/routes/api/{ => coffee}/gear.rs (97%) create mode 100644 src/application/routes/api/coffee/mod.rs rename src/application/routes/api/{ => coffee}/roasters.rs (98%) rename src/application/routes/api/{ => coffee}/roasts.rs (99%) rename src/application/routes/api/{ => coffee}/scan.rs (99%) rename src/application/routes/api/{ => system}/admin.rs (100%) rename src/application/routes/api/{ => system}/backup.rs (100%) create mode 100644 src/application/routes/api/system/mod.rs rename src/domain/{ => analytics}/ai_usage.rs (100%) rename src/domain/{ => analytics}/country_stats.rs (95%) create mode 100644 src/domain/analytics/mod.rs rename src/domain/{ => analytics}/stats.rs (97%) rename src/domain/{ => analytics}/timeline.rs (100%) create mode 100644 src/domain/auth/mod.rs rename src/domain/{ => auth}/passkey_credentials.rs (100%) rename src/domain/{ => auth}/registration_tokens.rs (100%) rename src/domain/{ => auth}/sessions.rs (100%) rename src/domain/{ => auth}/tokens.rs (100%) rename src/domain/{ => auth}/users.rs (100%) rename src/domain/{ => coffee}/bags.rs (96%) rename src/domain/{ => coffee}/brews.rs (97%) rename src/domain/{ => coffee}/cafes.rs (100%) rename src/domain/{ => coffee}/cups.rs (97%) rename src/domain/{ => coffee}/gear.rs (98%) create mode 100644 src/domain/coffee/mod.rs rename src/domain/{ => coffee}/roasters.rs (100%) rename src/domain/{ => coffee}/roasts.rs (100%) rename src/infrastructure/repositories/{ => analytics}/ai_usage.rs (100%) create mode 100644 src/infrastructure/repositories/analytics/mod.rs rename src/infrastructure/repositories/{ => analytics}/stats.rs (100%) rename src/infrastructure/repositories/{ => analytics}/timeline_events.rs (100%) create mode 100644 src/infrastructure/repositories/auth/mod.rs rename src/infrastructure/repositories/{ => auth}/passkey_credentials.rs (100%) rename src/infrastructure/repositories/{ => auth}/registration_tokens.rs (100%) rename src/infrastructure/repositories/{ => auth}/sessions.rs (100%) rename src/infrastructure/repositories/{ => auth}/tokens.rs (100%) rename src/infrastructure/repositories/{ => auth}/users.rs (100%) rename src/infrastructure/repositories/{ => coffee}/bags.rs (99%) rename src/infrastructure/repositories/{ => coffee}/brews.rs (100%) rename src/infrastructure/repositories/{ => coffee}/cafes.rs (99%) rename src/infrastructure/repositories/{ => coffee}/cups.rs (100%) rename src/infrastructure/repositories/{ => coffee}/gear.rs (98%) create mode 100644 src/infrastructure/repositories/coffee/mod.rs rename src/infrastructure/repositories/{ => coffee}/roasters.rs (99%) rename src/infrastructure/repositories/{ => coffee}/roasts.rs (99%) diff --git a/src/application/routes/api/analytics/mod.rs b/src/application/routes/api/analytics/mod.rs new file mode 100644 index 0000000..b3ca0d2 --- /dev/null +++ b/src/application/routes/api/analytics/mod.rs @@ -0,0 +1 @@ +pub(crate) mod stats; diff --git a/src/application/routes/api/stats.rs b/src/application/routes/api/analytics/stats.rs similarity index 100% rename from src/application/routes/api/stats.rs rename to src/application/routes/api/analytics/stats.rs diff --git a/src/application/routes/api/auth/mod.rs b/src/application/routes/api/auth/mod.rs new file mode 100644 index 0000000..211564b --- /dev/null +++ b/src/application/routes/api/auth/mod.rs @@ -0,0 +1,2 @@ +pub(crate) mod tokens; +pub(crate) mod webauthn; diff --git a/src/application/routes/api/tokens.rs b/src/application/routes/api/auth/tokens.rs similarity index 100% rename from src/application/routes/api/tokens.rs rename to src/application/routes/api/auth/tokens.rs diff --git a/src/application/routes/api/webauthn.rs b/src/application/routes/api/auth/webauthn.rs similarity index 100% rename from src/application/routes/api/webauthn.rs rename to src/application/routes/api/auth/webauthn.rs diff --git a/src/application/routes/api/bags.rs b/src/application/routes/api/coffee/bags.rs similarity index 98% rename from src/application/routes/api/bags.rs rename to src/application/routes/api/coffee/bags.rs index 86f5695..f7d3eff 100644 --- a/src/application/routes/api/bags.rs +++ b/src/application/routes/api/coffee/bags.rs @@ -6,9 +6,9 @@ use chrono::{DateTime, Utc}; use serde::Deserialize; use tracing::info; -use super::macros::{define_delete_handler, define_enriched_get_handler}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{define_delete_handler, define_enriched_get_handler}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/brews.rs b/src/application/routes/api/coffee/brews.rs similarity index 99% rename from src/application/routes/api/brews.rs rename to src/application/routes/api/coffee/brews.rs index 238a9d4..37b4e8b 100644 --- a/src/application/routes/api/brews.rs +++ b/src/application/routes/api/coffee/brews.rs @@ -6,9 +6,9 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Deserializer}; use tracing::info; -use super::macros::{define_delete_handler, define_enriched_get_handler}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{define_delete_handler, define_enriched_get_handler}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/cafes.rs b/src/application/routes/api/coffee/cafes.rs similarity index 98% rename from src/application/routes/api/cafes.rs rename to src/application/routes/api/coffee/cafes.rs index bd843e4..b38ce38 100644 --- a/src/application/routes/api/cafes.rs +++ b/src/application/routes/api/coffee/cafes.rs @@ -4,9 +4,11 @@ use axum::http::{HeaderMap, StatusCode}; use axum::response::{IntoResponse, Redirect, Response}; use serde::Deserialize; -use super::macros::{define_delete_handler, define_get_handler, define_list_fragment_renderer}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{ + define_delete_handler, define_get_handler, define_list_fragment_renderer, +}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/checkin.rs b/src/application/routes/api/coffee/checkin.rs similarity index 100% rename from src/application/routes/api/checkin.rs rename to src/application/routes/api/coffee/checkin.rs diff --git a/src/application/routes/api/cups.rs b/src/application/routes/api/coffee/cups.rs similarity index 98% rename from src/application/routes/api/cups.rs rename to src/application/routes/api/coffee/cups.rs index 0626999..759edcf 100644 --- a/src/application/routes/api/cups.rs +++ b/src/application/routes/api/coffee/cups.rs @@ -3,11 +3,11 @@ use axum::extract::{Query, State}; use axum::http::{HeaderMap, StatusCode}; use axum::response::{IntoResponse, Redirect, Response}; -use super::macros::{ - define_delete_handler, define_enriched_get_handler, define_list_fragment_renderer, -}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{ + define_delete_handler, define_enriched_get_handler, define_list_fragment_renderer, +}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/gear.rs b/src/application/routes/api/coffee/gear.rs similarity index 97% rename from src/application/routes/api/gear.rs rename to src/application/routes/api/coffee/gear.rs index e1901af..e0e4a3a 100644 --- a/src/application/routes/api/gear.rs +++ b/src/application/routes/api/coffee/gear.rs @@ -8,9 +8,11 @@ use chrono::{DateTime, Utc}; use serde::Deserialize; use tracing::info; -use super::macros::{define_delete_handler, define_get_handler, define_list_fragment_renderer}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{ + define_delete_handler, define_get_handler, define_list_fragment_renderer, +}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/coffee/mod.rs b/src/application/routes/api/coffee/mod.rs new file mode 100644 index 0000000..4763926 --- /dev/null +++ b/src/application/routes/api/coffee/mod.rs @@ -0,0 +1,9 @@ +pub(crate) mod bags; +pub(crate) mod brews; +pub(crate) mod cafes; +pub(crate) mod checkin; +pub(crate) mod cups; +pub(crate) mod gear; +pub(crate) mod roasters; +pub(crate) mod roasts; +pub(crate) mod scan; diff --git a/src/application/routes/api/roasters.rs b/src/application/routes/api/coffee/roasters.rs similarity index 98% rename from src/application/routes/api/roasters.rs rename to src/application/routes/api/coffee/roasters.rs index 7e6eee1..275fb89 100644 --- a/src/application/routes/api/roasters.rs +++ b/src/application/routes/api/coffee/roasters.rs @@ -3,9 +3,11 @@ use axum::extract::{Path, Query, State}; use axum::http::{HeaderMap, StatusCode}; use axum::response::{IntoResponse, Redirect, Response}; -use super::macros::{define_delete_handler, define_get_handler, define_list_fragment_renderer}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{ + define_delete_handler, define_get_handler, define_list_fragment_renderer, +}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/roasts.rs b/src/application/routes/api/coffee/roasts.rs similarity index 99% rename from src/application/routes/api/roasts.rs rename to src/application/routes/api/coffee/roasts.rs index f49acb3..0156c62 100644 --- a/src/application/routes/api/roasts.rs +++ b/src/application/routes/api/coffee/roasts.rs @@ -5,11 +5,11 @@ use axum::response::{IntoResponse, Redirect, Response}; use chrono::{DateTime, Utc}; use serde::Deserialize; -use super::macros::{ - define_delete_handler, define_enriched_get_handler, define_list_fragment_renderer, -}; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::macros::{ + define_delete_handler, define_enriched_get_handler, define_list_fragment_renderer, +}; use crate::application::routes::support::{ FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, }; diff --git a/src/application/routes/api/scan.rs b/src/application/routes/api/coffee/scan.rs similarity index 99% rename from src/application/routes/api/scan.rs rename to src/application/routes/api/coffee/scan.rs index 1a10d46..52e7ffd 100644 --- a/src/application/routes/api/scan.rs +++ b/src/application/routes/api/coffee/scan.rs @@ -5,9 +5,9 @@ use axum::response::{IntoResponse, Response}; use serde::{Deserialize, Serialize}; use tracing::info; -use super::roasts::TastingNotesInput; use crate::application::auth::AuthenticatedUser; use crate::application::errors::{ApiError, AppError}; +use crate::application::routes::api::roasts::TastingNotesInput; use crate::application::routes::support::{FlexiblePayload, is_datastar_request}; use crate::application::state::AppState; use crate::domain::bags::NewBag; diff --git a/src/application/routes/api/macros.rs b/src/application/routes/api/macros.rs index dec5fef..04ef3cb 100644 --- a/src/application/routes/api/macros.rs +++ b/src/application/routes/api/macros.rs @@ -169,7 +169,7 @@ macro_rules! define_list_fragment_renderer { }; } -pub(super) use define_delete_handler; -pub(super) use define_enriched_get_handler; -pub(super) use define_get_handler; -pub(super) use define_list_fragment_renderer; +pub(crate) use define_delete_handler; +pub(crate) use define_enriched_get_handler; +pub(crate) use define_get_handler; +pub(crate) use define_list_fragment_renderer; diff --git a/src/application/routes/api/mod.rs b/src/application/routes/api/mod.rs index b2f49c9..d9a8e29 100644 --- a/src/application/routes/api/mod.rs +++ b/src/application/routes/api/mod.rs @@ -1,18 +1,14 @@ -pub(crate) mod admin; -pub(crate) mod backup; -pub(crate) mod bags; -pub(crate) mod brews; -pub(crate) mod cafes; -pub(crate) mod checkin; -pub(crate) mod cups; -pub(crate) mod gear; -mod macros; -pub(crate) mod roasters; -pub(crate) mod roasts; -pub(crate) mod scan; -pub(crate) mod stats; -pub(crate) mod tokens; -pub(crate) mod webauthn; +pub(crate) mod analytics; +pub(crate) mod auth; +pub(crate) mod coffee; +pub(crate) mod macros; +pub(crate) mod system; + +// Re-exports for backward compatibility +pub(crate) use analytics::stats; +pub(crate) use auth::{tokens, webauthn}; +pub(crate) use coffee::{bags, brews, cafes, checkin, cups, gear, roasters, roasts, scan}; +pub(crate) use system::{admin, backup}; use axum::extract::DefaultBodyLimit; use axum::routing::{get, post}; diff --git a/src/application/routes/api/admin.rs b/src/application/routes/api/system/admin.rs similarity index 100% rename from src/application/routes/api/admin.rs rename to src/application/routes/api/system/admin.rs diff --git a/src/application/routes/api/backup.rs b/src/application/routes/api/system/backup.rs similarity index 100% rename from src/application/routes/api/backup.rs rename to src/application/routes/api/system/backup.rs diff --git a/src/application/routes/api/system/mod.rs b/src/application/routes/api/system/mod.rs new file mode 100644 index 0000000..e8355e8 --- /dev/null +++ b/src/application/routes/api/system/mod.rs @@ -0,0 +1,2 @@ +pub(crate) mod admin; +pub(crate) mod backup; diff --git a/src/domain/ai_usage.rs b/src/domain/analytics/ai_usage.rs similarity index 100% rename from src/domain/ai_usage.rs rename to src/domain/analytics/ai_usage.rs diff --git a/src/domain/country_stats.rs b/src/domain/analytics/country_stats.rs similarity index 95% rename from src/domain/country_stats.rs rename to src/domain/analytics/country_stats.rs index 7a41abb..71cba57 100644 --- a/src/domain/country_stats.rs +++ b/src/domain/analytics/country_stats.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::countries::{country_to_iso, iso_to_flag_emoji}; +use crate::domain::countries::{country_to_iso, iso_to_flag_emoji}; /// A single country's count for geographic statistics. #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/domain/analytics/mod.rs b/src/domain/analytics/mod.rs new file mode 100644 index 0000000..16b4ee2 --- /dev/null +++ b/src/domain/analytics/mod.rs @@ -0,0 +1,4 @@ +pub mod ai_usage; +pub mod country_stats; +pub mod stats; +pub mod timeline; diff --git a/src/domain/stats.rs b/src/domain/analytics/stats.rs similarity index 97% rename from src/domain/stats.rs rename to src/domain/analytics/stats.rs index d6aab35..889d1f0 100644 --- a/src/domain/stats.rs +++ b/src/domain/analytics/stats.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::country_stats::GeoStats; +use crate::domain::country_stats::GeoStats; /// Summary statistics for roasts: origins, flavours, and roasters. #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/domain/timeline.rs b/src/domain/analytics/timeline.rs similarity index 100% rename from src/domain/timeline.rs rename to src/domain/analytics/timeline.rs diff --git a/src/domain/auth/mod.rs b/src/domain/auth/mod.rs new file mode 100644 index 0000000..aea2c8a --- /dev/null +++ b/src/domain/auth/mod.rs @@ -0,0 +1,5 @@ +pub mod passkey_credentials; +pub mod registration_tokens; +pub mod sessions; +pub mod tokens; +pub mod users; diff --git a/src/domain/passkey_credentials.rs b/src/domain/auth/passkey_credentials.rs similarity index 100% rename from src/domain/passkey_credentials.rs rename to src/domain/auth/passkey_credentials.rs diff --git a/src/domain/registration_tokens.rs b/src/domain/auth/registration_tokens.rs similarity index 100% rename from src/domain/registration_tokens.rs rename to src/domain/auth/registration_tokens.rs diff --git a/src/domain/sessions.rs b/src/domain/auth/sessions.rs similarity index 100% rename from src/domain/sessions.rs rename to src/domain/auth/sessions.rs diff --git a/src/domain/tokens.rs b/src/domain/auth/tokens.rs similarity index 100% rename from src/domain/tokens.rs rename to src/domain/auth/tokens.rs diff --git a/src/domain/users.rs b/src/domain/auth/users.rs similarity index 100% rename from src/domain/users.rs rename to src/domain/auth/users.rs diff --git a/src/domain/bags.rs b/src/domain/coffee/bags.rs similarity index 96% rename from src/domain/bags.rs rename to src/domain/coffee/bags.rs index e8eed91..57c54b2 100644 --- a/src/domain/bags.rs +++ b/src/domain/coffee/bags.rs @@ -1,8 +1,8 @@ use chrono::{DateTime, NaiveDate, Utc}; use serde::{Deserialize, Serialize}; -use super::ids::{BagId, RoastId}; -use super::listing::{SortDirection, SortKey}; +use crate::domain::ids::{BagId, RoastId}; +use crate::domain::listing::{SortDirection, SortKey}; use crate::domain::roasters::Roaster; use crate::domain::roasts::Roast; use crate::domain::timeline::{NewTimelineEvent, TimelineEventDetail}; @@ -154,7 +154,7 @@ pub fn bag_timeline_event( }, TimelineEventDetail { label: "Amount".to_string(), - value: super::formatting::format_weight(bag.amount), + value: crate::domain::formatting::format_weight(bag.amount), }, ], tasting_notes: vec![], diff --git a/src/domain/brews.rs b/src/domain/coffee/brews.rs similarity index 97% rename from src/domain/brews.rs rename to src/domain/coffee/brews.rs index 30dc4f2..cad700e 100644 --- a/src/domain/brews.rs +++ b/src/domain/coffee/brews.rs @@ -1,8 +1,8 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use super::ids::{BagId, BrewId, GearId}; -use super::listing::{SortDirection, SortKey}; +use crate::domain::ids::{BagId, BrewId, GearId}; +use crate::domain::listing::{SortDirection, SortKey}; use crate::domain::timeline::{NewTimelineEvent, TimelineBrewData, TimelineEventDetail}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] @@ -119,7 +119,7 @@ impl BrewWithDetails { }, TimelineEventDetail { label: "Coffee".to_string(), - value: super::formatting::format_weight(self.brew.coffee_weight), + value: crate::domain::formatting::format_weight(self.brew.coffee_weight), }, TimelineEventDetail { label: "Water".to_string(), diff --git a/src/domain/cafes.rs b/src/domain/coffee/cafes.rs similarity index 100% rename from src/domain/cafes.rs rename to src/domain/coffee/cafes.rs diff --git a/src/domain/cups.rs b/src/domain/coffee/cups.rs similarity index 97% rename from src/domain/cups.rs rename to src/domain/coffee/cups.rs index fa63383..f7d51e9 100644 --- a/src/domain/cups.rs +++ b/src/domain/coffee/cups.rs @@ -1,8 +1,8 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use super::ids::{CafeId, CupId, RoastId}; -use super::listing::{SortDirection, SortKey}; +use crate::domain::ids::{CafeId, CupId, RoastId}; +use crate::domain::listing::{SortDirection, SortKey}; use crate::domain::timeline::{NewTimelineEvent, TimelineEventDetail}; #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/domain/gear.rs b/src/domain/coffee/gear.rs similarity index 98% rename from src/domain/gear.rs rename to src/domain/coffee/gear.rs index e18dbbc..0e02fc6 100644 --- a/src/domain/gear.rs +++ b/src/domain/coffee/gear.rs @@ -3,8 +3,8 @@ use std::str::FromStr; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use super::ids::GearId; -use super::listing::{SortDirection, SortKey}; +use crate::domain::ids::GearId; +use crate::domain::listing::{SortDirection, SortKey}; use crate::domain::timeline::{NewTimelineEvent, TimelineEventDetail}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Serialize, Deserialize)] diff --git a/src/domain/coffee/mod.rs b/src/domain/coffee/mod.rs new file mode 100644 index 0000000..f3ebe50 --- /dev/null +++ b/src/domain/coffee/mod.rs @@ -0,0 +1,7 @@ +pub mod bags; +pub mod brews; +pub mod cafes; +pub mod cups; +pub mod gear; +pub mod roasters; +pub mod roasts; diff --git a/src/domain/roasters.rs b/src/domain/coffee/roasters.rs similarity index 100% rename from src/domain/roasters.rs rename to src/domain/coffee/roasters.rs diff --git a/src/domain/roasts.rs b/src/domain/coffee/roasts.rs similarity index 100% rename from src/domain/roasts.rs rename to src/domain/coffee/roasts.rs diff --git a/src/domain/mod.rs b/src/domain/mod.rs index 7884bbc..47b6cb6 100644 --- a/src/domain/mod.rs +++ b/src/domain/mod.rs @@ -1,24 +1,15 @@ -pub mod ai_usage; -pub mod bags; -pub mod brews; -pub mod cafes; +pub mod analytics; +pub mod auth; +pub mod coffee; pub mod countries; -pub mod country_stats; -pub mod cups; pub mod errors; pub mod formatting; -pub mod gear; pub mod ids; pub mod listing; -pub mod passkey_credentials; -pub mod registration_tokens; pub mod repositories; -pub mod roasters; -pub mod roasts; -pub mod sessions; -pub mod stats; -pub mod timeline; -pub mod tokens; -pub mod users; +// Re-exports for backward compatibility +pub use analytics::{ai_usage, country_stats, stats, timeline}; +pub use auth::{passkey_credentials, registration_tokens, sessions, tokens, users}; +pub use coffee::{bags, brews, cafes, cups, gear, roasters, roasts}; pub use errors::RepositoryError; diff --git a/src/infrastructure/repositories/ai_usage.rs b/src/infrastructure/repositories/analytics/ai_usage.rs similarity index 100% rename from src/infrastructure/repositories/ai_usage.rs rename to src/infrastructure/repositories/analytics/ai_usage.rs diff --git a/src/infrastructure/repositories/analytics/mod.rs b/src/infrastructure/repositories/analytics/mod.rs new file mode 100644 index 0000000..69f8be3 --- /dev/null +++ b/src/infrastructure/repositories/analytics/mod.rs @@ -0,0 +1,3 @@ +pub mod ai_usage; +pub mod stats; +pub mod timeline_events; diff --git a/src/infrastructure/repositories/stats.rs b/src/infrastructure/repositories/analytics/stats.rs similarity index 100% rename from src/infrastructure/repositories/stats.rs rename to src/infrastructure/repositories/analytics/stats.rs diff --git a/src/infrastructure/repositories/timeline_events.rs b/src/infrastructure/repositories/analytics/timeline_events.rs similarity index 100% rename from src/infrastructure/repositories/timeline_events.rs rename to src/infrastructure/repositories/analytics/timeline_events.rs diff --git a/src/infrastructure/repositories/auth/mod.rs b/src/infrastructure/repositories/auth/mod.rs new file mode 100644 index 0000000..aea2c8a --- /dev/null +++ b/src/infrastructure/repositories/auth/mod.rs @@ -0,0 +1,5 @@ +pub mod passkey_credentials; +pub mod registration_tokens; +pub mod sessions; +pub mod tokens; +pub mod users; diff --git a/src/infrastructure/repositories/passkey_credentials.rs b/src/infrastructure/repositories/auth/passkey_credentials.rs similarity index 100% rename from src/infrastructure/repositories/passkey_credentials.rs rename to src/infrastructure/repositories/auth/passkey_credentials.rs diff --git a/src/infrastructure/repositories/registration_tokens.rs b/src/infrastructure/repositories/auth/registration_tokens.rs similarity index 100% rename from src/infrastructure/repositories/registration_tokens.rs rename to src/infrastructure/repositories/auth/registration_tokens.rs diff --git a/src/infrastructure/repositories/sessions.rs b/src/infrastructure/repositories/auth/sessions.rs similarity index 100% rename from src/infrastructure/repositories/sessions.rs rename to src/infrastructure/repositories/auth/sessions.rs diff --git a/src/infrastructure/repositories/tokens.rs b/src/infrastructure/repositories/auth/tokens.rs similarity index 100% rename from src/infrastructure/repositories/tokens.rs rename to src/infrastructure/repositories/auth/tokens.rs diff --git a/src/infrastructure/repositories/users.rs b/src/infrastructure/repositories/auth/users.rs similarity index 100% rename from src/infrastructure/repositories/users.rs rename to src/infrastructure/repositories/auth/users.rs diff --git a/src/infrastructure/repositories/bags.rs b/src/infrastructure/repositories/coffee/bags.rs similarity index 99% rename from src/infrastructure/repositories/bags.rs rename to src/infrastructure/repositories/coffee/bags.rs index 2b12c4d..5625c53 100644 --- a/src/infrastructure/repositories/bags.rs +++ b/src/infrastructure/repositories/coffee/bags.rs @@ -2,13 +2,13 @@ use async_trait::async_trait; use chrono::{DateTime, NaiveDate, Utc}; use sqlx::{QueryBuilder, query_as}; -use super::macros::push_update_field; use crate::domain::RepositoryError; use crate::domain::bags::{Bag, BagFilter, BagSortKey, BagWithRoast, NewBag, UpdateBag}; use crate::domain::ids::{BagId, RoastId}; use crate::domain::listing::{ListRequest, Page, SortDirection}; use crate::domain::repositories::BagRepository; use crate::infrastructure::database::DatabasePool; +use crate::infrastructure::repositories::macros::push_update_field; const BASE_SELECT: &str = r" SELECT diff --git a/src/infrastructure/repositories/brews.rs b/src/infrastructure/repositories/coffee/brews.rs similarity index 100% rename from src/infrastructure/repositories/brews.rs rename to src/infrastructure/repositories/coffee/brews.rs diff --git a/src/infrastructure/repositories/cafes.rs b/src/infrastructure/repositories/coffee/cafes.rs similarity index 99% rename from src/infrastructure/repositories/cafes.rs rename to src/infrastructure/repositories/coffee/cafes.rs index 34d999b..14a6060 100644 --- a/src/infrastructure/repositories/cafes.rs +++ b/src/infrastructure/repositories/coffee/cafes.rs @@ -2,13 +2,13 @@ use async_trait::async_trait; use chrono::{DateTime, Utc}; use sqlx::{QueryBuilder, query, query_as}; -use super::macros::push_update_field; use crate::domain::RepositoryError; use crate::domain::cafes::{Cafe, CafeSortKey, NewCafe, UpdateCafe}; use crate::domain::ids::CafeId; use crate::domain::listing::{ListRequest, Page, SortDirection}; use crate::domain::repositories::CafeRepository; use crate::infrastructure::database::DatabasePool; +use crate::infrastructure::repositories::macros::push_update_field; #[derive(Clone)] pub struct SqlCafeRepository { diff --git a/src/infrastructure/repositories/cups.rs b/src/infrastructure/repositories/coffee/cups.rs similarity index 100% rename from src/infrastructure/repositories/cups.rs rename to src/infrastructure/repositories/coffee/cups.rs diff --git a/src/infrastructure/repositories/gear.rs b/src/infrastructure/repositories/coffee/gear.rs similarity index 98% rename from src/infrastructure/repositories/gear.rs rename to src/infrastructure/repositories/coffee/gear.rs index 7e9d364..cecd883 100644 --- a/src/infrastructure/repositories/gear.rs +++ b/src/infrastructure/repositories/coffee/gear.rs @@ -4,13 +4,13 @@ use async_trait::async_trait; use chrono::{DateTime, Utc}; use sqlx::{QueryBuilder, query_as}; -use super::macros::push_update_field; use crate::domain::RepositoryError; use crate::domain::gear::{Gear, GearCategory, GearFilter, GearSortKey, NewGear, UpdateGear}; use crate::domain::ids::GearId; use crate::domain::listing::{ListRequest, Page, SortDirection}; use crate::domain::repositories::GearRepository; use crate::infrastructure::database::DatabasePool; +use crate::infrastructure::repositories::macros::push_update_field; #[derive(Clone)] pub struct SqlGearRepository { diff --git a/src/infrastructure/repositories/coffee/mod.rs b/src/infrastructure/repositories/coffee/mod.rs new file mode 100644 index 0000000..f3ebe50 --- /dev/null +++ b/src/infrastructure/repositories/coffee/mod.rs @@ -0,0 +1,7 @@ +pub mod bags; +pub mod brews; +pub mod cafes; +pub mod cups; +pub mod gear; +pub mod roasters; +pub mod roasts; diff --git a/src/infrastructure/repositories/roasters.rs b/src/infrastructure/repositories/coffee/roasters.rs similarity index 99% rename from src/infrastructure/repositories/roasters.rs rename to src/infrastructure/repositories/coffee/roasters.rs index 471ed51..81baece 100644 --- a/src/infrastructure/repositories/roasters.rs +++ b/src/infrastructure/repositories/coffee/roasters.rs @@ -2,13 +2,13 @@ use async_trait::async_trait; use chrono::{DateTime, Utc}; use sqlx::{QueryBuilder, query, query_as}; -use super::macros::push_update_field; use crate::domain::RepositoryError; use crate::domain::ids::RoasterId; use crate::domain::listing::{ListRequest, Page, SortDirection}; use crate::domain::repositories::RoasterRepository; use crate::domain::roasters::{NewRoaster, Roaster, RoasterSortKey, UpdateRoaster}; use crate::infrastructure::database::DatabasePool; +use crate::infrastructure::repositories::macros::push_update_field; #[derive(Clone)] pub struct SqlRoasterRepository { diff --git a/src/infrastructure/repositories/roasts.rs b/src/infrastructure/repositories/coffee/roasts.rs similarity index 99% rename from src/infrastructure/repositories/roasts.rs rename to src/infrastructure/repositories/coffee/roasts.rs index 2235d3e..eda4e7f 100644 --- a/src/infrastructure/repositories/roasts.rs +++ b/src/infrastructure/repositories/coffee/roasts.rs @@ -3,13 +3,13 @@ use chrono::{DateTime, Utc}; use serde_json::{from_str, to_string}; use sqlx::{Error as SqlxError, QueryBuilder, query, query_as}; -use super::macros::push_update_field; use crate::domain::RepositoryError; use crate::domain::ids::{RoastId, RoasterId}; use crate::domain::listing::{ListRequest, Page, SortDirection}; use crate::domain::repositories::RoastRepository; use crate::domain::roasts::{NewRoast, Roast, RoastSortKey, RoastWithRoaster, UpdateRoast}; use crate::infrastructure::database::DatabasePool; +use crate::infrastructure::repositories::macros::push_update_field; #[derive(Clone)] pub struct SqlRoastRepository { diff --git a/src/infrastructure/repositories/macros.rs b/src/infrastructure/repositories/macros.rs index 89d3943..d89d1b2 100644 --- a/src/infrastructure/repositories/macros.rs +++ b/src/infrastructure/repositories/macros.rs @@ -23,4 +23,4 @@ macro_rules! push_update_field { }; } -pub(super) use push_update_field; +pub(crate) use push_update_field; diff --git a/src/infrastructure/repositories/mod.rs b/src/infrastructure/repositories/mod.rs index 2b10216..f835e4f 100644 --- a/src/infrastructure/repositories/mod.rs +++ b/src/infrastructure/repositories/mod.rs @@ -1,17 +1,10 @@ -pub mod ai_usage; -pub mod bags; -pub mod brews; -pub mod cafes; -pub mod cups; -pub mod gear; -mod macros; +pub mod analytics; +pub mod auth; +pub mod coffee; +pub(crate) mod macros; pub mod pagination; -pub mod passkey_credentials; -pub mod registration_tokens; -pub mod roasters; -pub mod roasts; -pub mod sessions; -pub mod stats; -pub mod timeline_events; -pub mod tokens; -pub mod users; + +// Re-exports for backward compatibility +pub use analytics::{ai_usage, stats, timeline_events}; +pub use auth::{passkey_credentials, registration_tokens, sessions, tokens, users}; +pub use coffee::{bags, brews, cafes, cups, gear, roasters, roasts};