from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.date import DateTrigger from apscheduler.triggers.cron import CronTrigger from datetime import datetime, timedelta from scheduler.refresh_sharepoint_content_job import ( refresh_sharepoint_content_job, ) from scheduler.backfill_photo_id_job import backfill_photo_id_job from scheduler.cleanup_document_job import cleanup_document_job from common.log.log_utils import log_entry_exit_async from scheduler.constants import ScheduleJobLocker from scheduler.schedule_job_locker import init_lock @log_entry_exit_async async def create_scheduler() -> AsyncIOScheduler: scheduler: AsyncIOScheduler = AsyncIOScheduler() await register_job(scheduler) return scheduler @log_entry_exit_async async def register_job(scheduler: AsyncIOScheduler): await init_lock(ScheduleJobLocker.REFRESH_SHAREPOINT_CONTENT_JOB_LOCKER) scheduler.add_job(refresh_sharepoint_content_job, "interval", seconds=(3600 + 3)) await init_lock(ScheduleJobLocker.BACKFILL_PHOTO_ID_JOB_LOCKER) scheduler.add_job( backfill_photo_id_job, "date", run_date=datetime(2025, 2, 7, 20, 0, 0), ) await init_lock(ScheduleJobLocker.CLEANUP_DOCUMENT_JOB_LOCKER) scheduler.add_job( cleanup_document_job, trigger=CronTrigger(hour=2, minute=0), # Runs every day at 2:00 AM id="cleanup_document_daily", )