fixing the checkin
This commit is contained in:
+33
-10
@@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user