# kgcorner/schedule-me architecture

> Architecture diagram of the GitHub repository kgcorner/schedule-me, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kgcorner/schedule-me
- Repository: https://github.com/kgcorner/schedule-me

## Overview

Schedule-me is a job scheduling and monitoring platform with an Angular management UI and a Spring backend. The principal workflow is to create or manage a scheduled job in the UI, persist it through the backend, select due jobs on a schedule, dispatch work to a processor, and inspect job status, logs, and audits. The README also describes implementing custom job kinds and processors. Backend wiring beyond the sampled scanner, executor, service, and repository code is shown only where supported by the documented UI/API workflow; uncertain calls are omitted.

Main entry points: [`schedule-me-app/src/app/app-routing.module.ts`](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/app-routing.module.ts) (UI routes), [`backend/src/main/java/com/dealsdelta/scheduleme/executors/JobProcessorExecutorService.java`](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/executors/JobProcessorExecutorService.java) (Processor executor), [`backend/src/main/java/com/dealsdelta/scheduleme/processors/JobProcessorFactory.java`](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/JobProcessorFactory.java) (Processor factory), [`backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobDao.java`](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobDao.java) (Job DAO)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Management UI"]
  node_ui_routes["UI routes"]
  node_ui_jobs["Job screens<br/>[jobs.component.ts]"]
  node_ui_dashboard["Dashboard"]
  node_ui_records["Audit and log views"]
  node_web_job_service["Job API client<br/>[job.service.ts]"]
  node_http["HTTP transport<br/>[http.service.ts]"]
end

subgraph group_api["Job Management"]
  node_backend_api["Job endpoints<br/>[JobResource.java]"]
  node_job_service["Job management<br/>[JobService.java]"]
end

subgraph group_scheduler["Scheduling and Execution"]
  node_scanner["Due-job scanner"]
  node_executor["Processor executor"]
  node_runner["Job runner<br/>[JobRunner.java]"]
end

subgraph group_data["Persistence and Records"]
  node_job_dao["Job DAO<br/>[JobDao.java]"]
  node_running_dao["Running-job DAO<br/>[RunningJobDao.java]"]
  node_audit_log["Audit and log services<br/>[LogService.java]"]
  node_mongo[("Mongo repository")]
  node_job_records["Job records<br/>[JobModel.java]"]
  node_run_records["Run records"]
  node_record_views["Job audits and logs<br/>[JobAuditDao.java]"]
end

subgraph group_processors["Job Processors"]
  node_factory["Processor factory"]
  node_mail_processor["Mail processor"]
  node_facebook_processor["Facebook processor"]
  node_instagram_processor["Instagram processor"]
end

node_user(("Operator"))

node_user -->|"opens"| node_ui_routes
node_ui_routes -->|"routes to"| node_ui_jobs
node_ui_routes -->|"routes to"| node_ui_dashboard
node_ui_routes -->|"routes to"| node_ui_records
node_ui_jobs -->|"requests jobs"| node_web_job_service
node_ui_dashboard -->|"requests metrics"| node_web_job_service
node_ui_records -->|"requests records"| node_web_job_service
node_web_job_service -->|"sends requests"| node_http
node_http -->|"HTTP calls"| node_backend_api
node_backend_api -->|"delegates job operations"| node_job_service
node_job_service -->|"reads and writes"| node_job_dao
node_scanner -->|"finds and updates due jobs"| node_job_dao
node_scanner -->|"checks and records runs"| node_running_dao
node_scanner -->|"dispatches work"| node_executor
node_executor -->|"loads and updates runs"| node_running_dao
node_executor -->|"selects processor"| node_factory
node_executor -->|"submits runner"| node_runner
node_factory -->|"creates"| node_mail_processor
node_factory -->|"creates"| node_facebook_processor
node_factory -->|"creates"| node_instagram_processor
node_runner -->|"uses job service"| node_job_service
node_job_dao -->|"persists through"| node_mongo
node_running_dao -->|"persists through"| node_mongo
node_audit_log -->|"writes logs"| node_mongo
node_job_dao -->|"stores"| node_job_records
node_running_dao -->|"stores"| node_run_records
node_ui_records -->|"displays audit and log data"| node_record_views

click node_ui_routes "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/app-routing.module.ts"
click node_ui_jobs "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/jobs/jobs.component.ts"
click node_ui_dashboard "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/dashboard/dashboard.component.ts"
click node_ui_records "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/job-audits/job-audits.component.ts"
click node_web_job_service "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/services/job.service.ts"
click node_http "https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/services/http.service.ts"
click node_backend_api "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/resources/JobResource.java"
click node_job_service "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/JobService.java"
click node_scanner "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/JobScannerService.java"
click node_executor "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/executors/JobProcessorExecutorService.java"
click node_runner "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/executors/JobRunner.java"
click node_factory "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/JobProcessorFactory.java"
click node_mail_processor "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/MailJobProcessor.java"
click node_facebook_processor "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/FacebookJobProcessor.java"
click node_instagram_processor "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/InstagramJobProcessor.java"
click node_job_dao "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobDao.java"
click node_running_dao "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/RunningJobDao.java"
click node_audit_log "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/LogService.java"
click node_mongo "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/repo/MongoRepository.java"
click node_job_records "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/models/JobModel.java"
click node_run_records "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/models/RunningJobModel.java"
click node_record_views "https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobAuditDao.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ui_routes,node_ui_jobs,node_ui_dashboard,node_ui_records,node_web_job_service,node_http toneBlue
class node_backend_api,node_job_service toneAmber
class node_scanner,node_executor,node_runner toneMint
class node_job_dao,node_running_dao,node_audit_log,node_mongo,node_job_records,node_run_records,node_record_views toneRose
class node_factory,node_mail_processor,node_facebook_processor,node_instagram_processor,node_user toneIndigo
```

## Components

### Management UI

- [UI routes](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/app-routing.module.ts): `schedule-me-app/src/app/app-routing.module.ts`
- [Job screens](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/jobs/jobs.component.ts): `schedule-me-app/src/app/jobs/jobs.component.ts`
- [Dashboard](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/dashboard/dashboard.component.ts): `schedule-me-app/src/app/dashboard/dashboard.component.ts`
- [Audit and log views](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/job-audits/job-audits.component.ts): `schedule-me-app/src/app/job-audits/job-audits.component.ts`
- [Job API client](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/services/job.service.ts): `schedule-me-app/src/app/services/job.service.ts`
- [HTTP transport](https://github.com/kgcorner/schedule-me/blob/master/schedule-me-app/src/app/services/http.service.ts): `schedule-me-app/src/app/services/http.service.ts`

### Job Management

- [Job endpoints](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/resources/JobResource.java): `backend/src/main/java/com/dealsdelta/scheduleme/resources/JobResource.java`
- [Job management](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/JobService.java): `backend/src/main/java/com/dealsdelta/scheduleme/services/JobService.java`

### Scheduling and Execution

- [Due-job scanner](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/JobScannerService.java): `backend/src/main/java/com/dealsdelta/scheduleme/services/JobScannerService.java`
- [Processor executor](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/executors/JobProcessorExecutorService.java): `backend/src/main/java/com/dealsdelta/scheduleme/executors/JobProcessorExecutorService.java`
- [Job runner](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/executors/JobRunner.java): `backend/src/main/java/com/dealsdelta/scheduleme/executors/JobRunner.java`

### Persistence and Records

- [Job DAO](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobDao.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobDao.java`
- [Running-job DAO](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/RunningJobDao.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/dao/RunningJobDao.java`
- [Audit and log services](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/services/LogService.java): `backend/src/main/java/com/dealsdelta/scheduleme/services/LogService.java`
- [Mongo repository](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/repo/MongoRepository.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/repo/MongoRepository.java`
- [Job records](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/models/JobModel.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/models/JobModel.java`
- [Run records](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/models/RunningJobModel.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/models/RunningJobModel.java`
- [Job audits and logs](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobAuditDao.java): `backend/src/main/java/com/dealsdelta/scheduleme/data/dao/JobAuditDao.java`

### Job Processors

- [Processor factory](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/JobProcessorFactory.java): `backend/src/main/java/com/dealsdelta/scheduleme/processors/JobProcessorFactory.java`
- [Mail processor](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/MailJobProcessor.java): `backend/src/main/java/com/dealsdelta/scheduleme/processors/MailJobProcessor.java`
- [Facebook processor](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/FacebookJobProcessor.java): `backend/src/main/java/com/dealsdelta/scheduleme/processors/FacebookJobProcessor.java`
- [Instagram processor](https://github.com/kgcorner/schedule-me/blob/master/backend/src/main/java/com/dealsdelta/scheduleme/processors/InstagramJobProcessor.java): `backend/src/main/java/com/dealsdelta/scheduleme/processors/InstagramJobProcessor.java`

### Other components

- **Operator**

## Connections

- Operator → UI routes: opens
- UI routes → Job screens: routes to
- UI routes → Dashboard: routes to
- UI routes → Audit and log views: routes to
- Job screens → Job API client: requests jobs
- Dashboard → Job API client: requests metrics
- Audit and log views → Job API client: requests records
- Job API client → HTTP transport: sends requests
- HTTP transport → Job endpoints: HTTP calls
- Job endpoints → Job management: delegates job operations
- Job management → Job DAO: reads and writes
- Due-job scanner → Job DAO: finds and updates due jobs
- Due-job scanner → Running-job DAO: checks and records runs
- Due-job scanner → Processor executor: dispatches work
- Processor executor → Running-job DAO: loads and updates runs
- Processor executor → Processor factory: selects processor
- Processor executor → Job runner: submits runner
- Processor factory → Mail processor: creates
- Processor factory → Facebook processor: creates
- Processor factory → Instagram processor: creates
- Job runner → Job management: uses job service
- Job DAO → Mongo repository: persists through
- Running-job DAO → Mongo repository: persists through
- Audit and log services → Mongo repository: writes logs
- Job DAO → Job records: stores
- Running-job DAO → Run records: stores
- Audit and log views → Job audits and logs: displays audit and log data
