mirror of
https://github.com/Sea-Haven-Industries/afterhours-shift-manager.git
synced 2026-10-01 07:13:11 +00:00
Extract determine_shift_type into shared layer
Eliminates duplicated weekend day/night boundary logic between the ring scheduler and Slack bot Lambdas.
This commit is contained in:
parent
889a1b307c
commit
e14eeaa17f
3 changed files with 30 additions and 20 deletions
|
|
@ -11,21 +11,18 @@ from datetime import datetime
|
|||
from zoneinfo import ZoneInfo
|
||||
|
||||
from shared.ring_scheduler import update_queue_routing
|
||||
from shared.schedule import FALLBACK_EXTENSION, ShiftSchedule
|
||||
from shared.schedule import (
|
||||
FALLBACK_EXTENSION,
|
||||
WEEKEND_DAYS,
|
||||
ShiftSchedule,
|
||||
determine_shift_type,
|
||||
)
|
||||
from shared.secrets import get_secret
|
||||
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
EASTERN = ZoneInfo("America/New_York")
|
||||
WEEKEND_DAYS = {"Saturday", "Sunday"}
|
||||
|
||||
|
||||
def determine_shift_type(now: datetime) -> str:
|
||||
day_name = now.strftime("%A")
|
||||
if day_name in WEEKEND_DAYS and 8 <= now.hour < 17:
|
||||
return "day"
|
||||
return "night"
|
||||
|
||||
|
||||
def handler(event, context):
|
||||
|
|
|
|||
|
|
@ -8,14 +8,30 @@ Single-table design:
|
|||
"""
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import boto3
|
||||
from boto3.dynamodb.conditions import Key
|
||||
|
||||
|
||||
EASTERN = ZoneInfo("America/New_York")
|
||||
WEEKEND_DAYS = {"Saturday", "Sunday"}
|
||||
FALLBACK_EXTENSION = "100"
|
||||
|
||||
|
||||
def determine_shift_type(now: datetime | None = None) -> str:
|
||||
"""Return the currently active shift type: 'day' or 'night'.
|
||||
|
||||
Weekend 8am-5pm is the day shift; all other times are night.
|
||||
"""
|
||||
if now is None:
|
||||
now = datetime.now(EASTERN)
|
||||
day_name = now.strftime("%A")
|
||||
if day_name in WEEKEND_DAYS and 8 <= now.hour < 17:
|
||||
return "day"
|
||||
return "night"
|
||||
|
||||
|
||||
class ShiftSchedule:
|
||||
def __init__(self, table_name: str | None = None):
|
||||
dynamodb = boto3.resource("dynamodb")
|
||||
|
|
|
|||
|
|
@ -16,7 +16,12 @@ from shared.blocks import (
|
|||
build_week_schedule,
|
||||
)
|
||||
from shared.ring_scheduler import update_queue_routing
|
||||
from shared.schedule import FALLBACK_EXTENSION, ShiftSchedule
|
||||
from shared.schedule import (
|
||||
FALLBACK_EXTENSION,
|
||||
WEEKEND_DAYS,
|
||||
ShiftSchedule,
|
||||
determine_shift_type,
|
||||
)
|
||||
from shared.secrets import get_secret
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -88,16 +93,8 @@ def is_today(date_str: str) -> bool:
|
|||
return date_str == datetime.now(EASTERN).strftime("%Y-%m-%d")
|
||||
|
||||
|
||||
WEEKEND_DAYS = {"Saturday", "Sunday"}
|
||||
|
||||
|
||||
def _is_active_shift_type(shift_type: str) -> bool:
|
||||
"""Check if the given shift type is the currently active one."""
|
||||
now = datetime.now(EASTERN)
|
||||
day_name = now.strftime("%A")
|
||||
if day_name in WEEKEND_DAYS and 8 <= now.hour < 17:
|
||||
return shift_type == "day"
|
||||
return shift_type == "night"
|
||||
return determine_shift_type() == shift_type
|
||||
|
||||
|
||||
def _find_employee_shift(schedule, date_str, day_name, employee_ext):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue