refactor: WIP splitting crates

This commit is contained in:
Max Hohlfeld 2025-06-22 22:54:11 +02:00
parent f25e508bbd
commit f35b343768
27 changed files with 94 additions and 71 deletions

10
Cargo.lock generated
View File

@ -787,6 +787,15 @@ dependencies = [
"dotenvy",
]
[[package]]
name = "brass-db"
version = "0.1.0"
dependencies = [
"chrono",
"garde",
"sqlx",
]
[[package]]
name = "brass-macros"
version = "0.1.0"
@ -809,6 +818,7 @@ dependencies = [
"argon2",
"askama",
"brass-config",
"brass-db",
"brass-macros",
"built",
"change-detection",

View File

@ -1,5 +1,5 @@
[workspace]
members = [ "cli", "config", "macros", "web", ]
members = [ "cli", "config", "db", "macros", "web", ]
resolver = "2"
default-members = ["web"]

12
db/Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[package]
name = "brass-db"
version = "0.1.0"
edition = "2024"
license = "AGPL-3.0"
authors = ["Max Hohlfeld <maxhohlfeld@posteo.de>"]
publish = false
[dependencies]
sqlx = { version = "^0.8", features = ["runtime-async-std-rustls", "postgres", "chrono"] }
chrono = { version = "0.4.33", features = ["serde", "now"] }
garde = { version = "0.22.0", features = ["derive", "email"] }

24
db/src/lib.rs Normal file
View File

@ -0,0 +1,24 @@
mod models;
pub use models::area::Area;
pub use models::assignment::Assignment;
pub use models::assignment_changeset::{AssignmentChangeset, AssignmentContext};
pub use models::availability::Availability;
pub use models::availability_assignment_state::AvailabilityAssignmentState;
pub use models::availability_changeset::{
AvailabilityChangeset, AvailabilityContext, find_free_date_time_slots,
};
pub use models::clothing::Clothing;
pub use models::event::Event;
pub use models::event_changeset::{EventChangeset, EventContext};
pub use models::export_event_row::{ExportEventRow, SimpleAssignment};
pub use models::function::Function;
pub use models::location::Location;
pub use models::password_reset::{NoneToken, PasswordReset, Token};
pub use models::registration::Registration;
pub use models::role::Role;
pub use models::user::User;
pub use models::user_changeset::UserChangeset;
pub use models::user_funtion::UserFunction;
pub use models::vehicle::Vehicle;
pub use models::vehicle_assignment::VehicleAssignment;

View File

@ -1,7 +1,8 @@
use chrono::NaiveDateTime;
use sqlx::{query, PgPool};
use sqlx::{PgPool, query};
use super::{assignment_changeset::AssignmentChangeset, Function, Result};
use super::Result;
use crate::{AssignmentChangeset, Function};
pub struct Assignment {
pub event_id: i32,

View File

@ -1,8 +1,9 @@
use chrono::NaiveDateTime;
use garde::Validate;
use super::{
start_date_time_lies_before_end_date_time, Assignment, Availability, Event, Function, UserFunction,
use crate::{
Assignment, Availability, Event, Function, UserFunction,
models::start_date_time_lies_before_end_date_time,
};
#[derive(Validate)]
@ -64,9 +65,7 @@ fn event_has_free_slot_for_function(
let list: Vec<&Assignment> = context
.assignments_for_event
.iter()
.filter(|a| {
a.availability_id != context.availability.id && a.event_id != context.event.id
})
.filter(|a| a.availability_id != context.availability.id && a.event_id != context.event.id)
.collect();
let a = list
@ -93,9 +92,7 @@ fn availability_not_already_assigned(
let list: Vec<&Assignment> = context
.assignments_for_availability
.iter()
.filter(|a| {
a.availability_id != context.availability.id && a.event_id != context.event.id
})
.filter(|a| a.availability_id != context.availability.id && a.event_id != context.event.id)
.collect();
let has_start_time_during_assignment =

View File

@ -1,7 +1,8 @@
use chrono::{NaiveDate, NaiveDateTime};
use sqlx::{query, PgPool};
use sqlx::{PgPool, query};
use super::{Area, AvailabilityChangeset, Result, Role, User, UserFunction};
use super::Result;
use crate::{Area, AvailabilityChangeset, Role, User, UserFunction};
#[derive(Clone, Debug)]
pub struct Availability {

35
db/src/models/mod.rs Normal file
View File

@ -0,0 +1,35 @@
pub mod area;
pub mod assignment;
pub mod assignment_changeset;
pub mod availability;
pub mod availability_assignment_state;
pub mod availability_changeset;
pub mod clothing;
pub mod event;
pub mod event_changeset;
pub mod export_event_row;
pub mod function;
pub mod location;
pub mod password_reset;
pub mod registration;
pub mod role;
pub mod user;
pub mod user_changeset;
pub mod user_funtion;
pub mod vehicle;
pub mod vehicle_assignment;
use chrono::NaiveDateTime;
type Result<T> = std::result::Result<T, sqlx::Error>;
fn start_date_time_lies_before_end_date_time<T>(
value: &(NaiveDateTime, NaiveDateTime),
_context: &T,
) -> garde::Result {
if value.0 >= value.1 {
return Err(garde::Error::new("endtime can't lie before starttime"));
}
Ok(())
}

View File

@ -28,6 +28,7 @@ zxcvbn = "3.1.0"
thiserror = "2"
brass-macros = { path = "../macros" }
brass-config = { path = "../config" }
brass-db = { path = "../db" }
actix-http = "3.9.0"
askama = "0.13.0"
garde = { version = "0.22.0", features = ["derive", "email"] }

View File

@ -1,58 +0,0 @@
mod area;
mod assignment;
mod assignment_changeset;
mod availability;
mod availability_assignment_state;
mod availability_changeset;
mod clothing;
mod event;
mod event_changeset;
mod export_event_row;
mod function;
mod location;
mod password_reset;
mod registration;
mod role;
mod user;
mod user_changeset;
mod user_funtion;
mod vehicle;
mod vehicle_assignment;
pub use area::Area;
pub use assignment::Assignment;
pub use assignment_changeset::{AssignmentChangeset, AssignmentContext};
pub use availability::Availability;
pub use availability_assignment_state::AvailabilityAssignmentState;
pub use availability_changeset::{
find_free_date_time_slots, AvailabilityChangeset, AvailabilityContext,
};
pub use clothing::Clothing;
pub use event::Event;
pub use event_changeset::{EventChangeset, EventContext};
pub use export_event_row::{ExportEventRow, SimpleAssignment};
pub use function::Function;
pub use location::Location;
pub use password_reset::{NoneToken, PasswordReset, Token};
pub use registration::Registration;
pub use role::Role;
pub use user::User;
pub use user_changeset::UserChangeset;
pub use user_funtion::UserFunction;
pub use vehicle::Vehicle;
pub use vehicle_assignment::VehicleAssignment;
use chrono::NaiveDateTime;
type Result<T> = std::result::Result<T, sqlx::Error>;
fn start_date_time_lies_before_end_date_time<T>(
value: &(NaiveDateTime, NaiveDateTime),
_context: &T,
) -> garde::Result {
if value.0 >= value.1 {
return Err(garde::Error::new("endtime can't lie before starttime"));
}
Ok(())
}