diff --git a/bot/commands/routines.py b/bot/commands/routines.py index f86408a..1e60172 100644 --- a/bot/commands/routines.py +++ b/bot/commands/routines.py @@ -217,12 +217,13 @@ async def handle_routine(message, session, parsed): await message.channel.send("When should this routine be scheduled? (e.g., 'Monday Wednesday Friday at 7am')") return - # Build schedule data + # Build schedule data (API expects "days" and "time") schedule_data = {} if days_of_week: - schedule_data["days_of_week"] = days_of_week + schedule_data["days"] = days_of_week if times: - schedule_data["times"] = times + schedule_data["time"] = times[0] + schedule_data["remind"] = True resp, status = api_request("put", f"/api/routines/{routine_id}/schedule", token, schedule_data) if status == 200: diff --git a/scheduler/daemon.py b/scheduler/daemon.py index a337150..a152c5a 100644 --- a/scheduler/daemon.py +++ b/scheduler/daemon.py @@ -123,20 +123,25 @@ def check_routine_reminders(): from datetime import date as date_type schedules = postgres.select("routine_schedules", where={"remind": True}) + logger.info(f"Routine reminders: found {len(schedules)} schedule(s) with remind=True") for schedule in schedules: routine = postgres.select_one("routines", {"id": schedule["routine_id"]}) if not routine: + logger.warning(f"Routine not found for schedule {schedule['id']}") continue now = _user_now_for(routine["user_uuid"]) current_time = now.strftime("%H:%M") today = now.date() - if current_time != schedule.get("time"): + sched_time = schedule.get("time") + if current_time != sched_time: continue - frequency = schedule.get("frequency", "weekly") + logger.info(f"Routine '{routine['name']}' time match at {current_time}") + + frequency = schedule.get("frequency") or "weekly" if frequency == "every_n_days": start = schedule.get("start_date") interval = schedule.get("interval_days") @@ -149,13 +154,16 @@ def check_routine_reminders(): if (today - start_d).days < 0 or ( today - start_d ).days % interval != 0: + logger.info(f"Routine '{routine['name']}' skipped: not due today (every {interval} days from {start_d})") continue else: + logger.warning(f"Routine '{routine['name']}' skipped: every_n_days but missing start_date={start} or interval_days={interval}") continue else: current_day = now.strftime("%a").lower() days = schedule.get("days", []) if current_day not in days: + logger.info(f"Routine '{routine['name']}' skipped: {current_day} not in {days}") continue user_settings = notifications.getNotificationSettings(routine["user_uuid"]) @@ -164,8 +172,11 @@ def check_routine_reminders(): notifications._sendToEnabledChannels( user_settings, msg, user_uuid=routine["user_uuid"] ) + logger.info(f"Routine reminder sent for '{routine['name']}'") + else: + logger.warning(f"No notification settings for user {routine['user_uuid']}, skipping routine '{routine['name']}'") except Exception as e: - logger.error(f"Error checking routine reminders: {e}") + logger.error(f"Error checking routine reminders: {e}", exc_info=True) def check_refills():