fixing the checkin

This commit is contained in:
2026-09-18 21:59:31 -04:00
parent 25a6747bcd
commit 27da4eafe4
18 changed files with 1521 additions and 406 deletions
+33 -10
View File
@@ -6,6 +6,29 @@ mod router;
use std::{env, net::SocketAddr};
use database::types::{DayOfWeek, WorkTime};
#[derive(Debug, Clone)]
struct AssignmentRules {
days: [DayOfWeek; 7],
shifts: [WorkTime; 3],
max_shifts_per_employee_per_day: u8,
max_days_per_employee_per_week: u8,
min_employees_per_shift: u8,
conflict_strategy: &'static str,
}
impl AssignmentRules {
fn is_valid(&self) -> bool {
self.days.len() == 7
&& self.shifts.len() == 3
&& self.max_shifts_per_employee_per_day == 1
&& self.max_days_per_employee_per_week == 5
&& self.min_employees_per_shift == 2
&& !self.conflict_strategy.is_empty()
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
@@ -13,6 +36,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let database_url = env::var("DATABASE_URL")?;
let pool = database::connection::connect(&database_url).await?;
database::connection::init_database(&pool).await?;
debug_assert!(assignment_rules().is_valid());
let router = router::build_router(pool);
@@ -26,14 +50,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
Ok(())
}
fn assignment_rules() {
// collect employee names and preferred shifts for each day of the week
// store employees, companies, preferences, and schedules in database tables
// use conditionals to reject invalid schedules
// use loops to assign shifts for every day and every turn
// use branching to resolve conflicts when a preferred shift is unavailable
// ensure each employee works at most one shift per day
// ensure each employee works at most five days per week
// ensure every company shift has at least two employees
// if fewer than two employees are available, choose another valid employee
fn assignment_rules() -> AssignmentRules {
AssignmentRules {
days: models::shift::define_day_values(),
shifts: models::shift::define_shift_values(),
max_shifts_per_employee_per_day: 1,
max_days_per_employee_per_week: 5,
min_employees_per_shift: 2,
conflict_strategy: "try same-day alternative shifts, then next-day preferences",
}
}