# projectarare/arare architecture

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

- Interactive diagram: https://gitdiagram.com/projectarare/arare
- Repository: https://github.com/projectarare/arare

## Overview

ARARE is a university timetable scheduling platform with a React operator console and Spring Boot REST backend. Operators load institutional master data and configure the academic calendar, check feasibility, then generate schedules asynchronously. They inspect and manually adjust timetables, or respond to events and disruptions with partial re-solving, before exporting results. The graph preserves documented import, analytics, and export capabilities; relationships are based on the README workflow because the supplied source excerpts do not show most API and service wiring.

Main entry points: [`frontend/src/services/api.ts`](https://github.com/projectarare/arare/blob/main/frontend/src/services/api.ts) (REST API client), [`frontend/src/App.tsx`](https://github.com/projectarare/arare/blob/main/frontend/src/App.tsx) (React console), [`src/main/java/com/arare/features/solvejob/SolveJobService.java`](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solvejob/SolveJobService.java) (Solve job orchestration), [`frontend/src/pages/TimetableViewer.tsx`](https://github.com/projectarare/arare/blob/main/frontend/src/pages/TimetableViewer.tsx) (Timetable viewer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_console["Operator console"]
  node_app["React console<br/>[App.tsx]"]
  node_scheduleui["Schedule generator"]
  node_viewer["Timetable viewer"]
  node_api["REST API client<br/>[api.ts]"]
end

subgraph group_data["Academic data"]
  node_masterdata["Master data<br/>[Teachers.tsx]"]
  node_uniconfig["University config"]
  node_masterservices["Master data services"]
end

subgraph group_scheduling["Scheduling core"]
  node_backend["Spring REST backend"]
  node_feasibility["Feasibility check"]
  node_schedule["Schedule management"]
  node_jobs["Solve job orchestration"]
  node_builder["Problem builder"]
  node_solver["Constraint solver"]
end

subgraph group_operations["Schedule operations"]
  node_sessions["Manual sessions<br/>[ManualSessions.tsx]"]
  node_disruption["Disruption analysis"]
  node_events["Events"]
end

subgraph group_support["Supporting capabilities"]
  node_import["CSV import"]
  node_export["Schedule exports"]
  node_analytics["Analytics and comparison"]
end

node_operator(("Operator"))
node_database[("Relational database")]

node_operator -->|"uses"| node_app
node_app -->|"routes to"| node_masterdata
node_app -->|"routes to"| node_uniconfig
node_app -->|"routes to"| node_scheduleui
node_app -->|"routes to"| node_viewer
node_masterdata -->|"submits data"| node_api
node_uniconfig -->|"submits config"| node_api
node_scheduleui -->|"requests schedule"| node_api
node_viewer -->|"requests timetable"| node_api
node_api -->|"calls REST"| node_backend
node_backend -.->|"serves master data"| node_masterservices
node_backend -->|"routes scheduling"| node_schedule
node_schedule -->|"checks feasibility"| node_feasibility
node_schedule -->|"submits solve"| node_jobs
node_jobs -->|"builds problem"| node_builder
node_builder -->|"provides problem"| node_solver
node_solver -->|"reports live score"| node_jobs
node_solver -->|"persists result"| node_database
node_sessions -.->|"updates assignments"| node_api
node_events -.->|"exposes events"| node_api
node_api -.->|"requests impact analysis"| node_disruption
node_disruption -->|"requests partial solve"| node_jobs
node_api -->|"imports data"| node_import
node_viewer -->|"requests exports"| node_export
node_api -.->|"serves analysis"| node_analytics
node_masterservices -.->|"stores records"| node_database

click node_app "https://github.com/projectarare/arare/blob/main/frontend/src/App.tsx"
click node_masterdata "https://github.com/projectarare/arare/blob/main/frontend/src/pages/Teachers.tsx"
click node_uniconfig "https://github.com/projectarare/arare/blob/main/frontend/src/pages/UniversityConfig.tsx"
click node_scheduleui "https://github.com/projectarare/arare/blob/main/frontend/src/pages/ScheduleGenerator.tsx"
click node_viewer "https://github.com/projectarare/arare/blob/main/frontend/src/pages/TimetableViewer.tsx"
click node_api "https://github.com/projectarare/arare/blob/main/frontend/src/services/api.ts"
click node_backend "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/ArareApplication.java"
click node_masterservices "https://github.com/projectarare/arare/tree/main/src/main/java/com/arare/features"
click node_feasibility "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/FeasibilityCheckService.java"
click node_schedule "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/ScheduleServiceImpl.java"
click node_jobs "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solvejob/SolveJobService.java"
click node_builder "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solver/TimetableProblemBuilder.java"
click node_solver "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solver/TimetableSolverService.java"
click node_sessions "https://github.com/projectarare/arare/blob/main/frontend/src/pages/ManualSessions.tsx"
click node_disruption "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/impact/DisruptionServiceImpl.java"
click node_events "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/event/EventServiceImpl.java"
click node_import "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/dataimport/RelationalCsvImportService.java"
click node_export "https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/TimetableExportService.java"
click node_analytics "https://github.com/projectarare/arare/blob/main/frontend/src/pages/AnalyticsDashboard.tsx"

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_app,node_scheduleui,node_viewer,node_api toneBlue
class node_masterdata,node_uniconfig,node_masterservices,node_database toneAmber
class node_backend,node_feasibility,node_schedule,node_jobs,node_builder,node_solver toneMint
class node_sessions,node_disruption,node_events toneRose
class node_import,node_export,node_analytics,node_operator toneIndigo
```

## Components

### Operator console

- [React console](https://github.com/projectarare/arare/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Schedule generator](https://github.com/projectarare/arare/blob/main/frontend/src/pages/ScheduleGenerator.tsx): `frontend/src/pages/ScheduleGenerator.tsx`
- [Timetable viewer](https://github.com/projectarare/arare/blob/main/frontend/src/pages/TimetableViewer.tsx): `frontend/src/pages/TimetableViewer.tsx`
- [REST API client](https://github.com/projectarare/arare/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### Academic data

- [Master data](https://github.com/projectarare/arare/blob/main/frontend/src/pages/Teachers.tsx): `frontend/src/pages/Teachers.tsx`
- [University config](https://github.com/projectarare/arare/blob/main/frontend/src/pages/UniversityConfig.tsx): `frontend/src/pages/UniversityConfig.tsx`
- [Master data services](https://github.com/projectarare/arare/tree/main/src/main/java/com/arare/features): `src/main/java/com/arare/features`

### Scheduling core

- [Spring REST backend](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/ArareApplication.java): `src/main/java/com/arare/ArareApplication.java`
- [Feasibility check](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/FeasibilityCheckService.java): `src/main/java/com/arare/features/schedule/FeasibilityCheckService.java`
- [Schedule management](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/ScheduleServiceImpl.java): `src/main/java/com/arare/features/schedule/ScheduleServiceImpl.java`
- [Solve job orchestration](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solvejob/SolveJobService.java): `src/main/java/com/arare/features/solvejob/SolveJobService.java`
- [Problem builder](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solver/TimetableProblemBuilder.java): `src/main/java/com/arare/features/solver/TimetableProblemBuilder.java`
- [Constraint solver](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/solver/TimetableSolverService.java): `src/main/java/com/arare/features/solver/TimetableSolverService.java`

### Schedule operations

- [Manual sessions](https://github.com/projectarare/arare/blob/main/frontend/src/pages/ManualSessions.tsx): `frontend/src/pages/ManualSessions.tsx`
- [Disruption analysis](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/impact/DisruptionServiceImpl.java): `src/main/java/com/arare/features/impact/DisruptionServiceImpl.java`
- [Events](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/event/EventServiceImpl.java): `src/main/java/com/arare/features/event/EventServiceImpl.java`

### Supporting capabilities

- [CSV import](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/dataimport/RelationalCsvImportService.java): `src/main/java/com/arare/features/dataimport/RelationalCsvImportService.java`
- [Schedule exports](https://github.com/projectarare/arare/blob/main/src/main/java/com/arare/features/schedule/TimetableExportService.java): `src/main/java/com/arare/features/schedule/TimetableExportService.java`
- [Analytics and comparison](https://github.com/projectarare/arare/blob/main/frontend/src/pages/AnalyticsDashboard.tsx): `frontend/src/pages/AnalyticsDashboard.tsx`

### Other components

- **Operator**
- **Relational database**

## Connections

- Operator → React console: uses (evidence: `README.md`)
- React console → Master data: routes to (evidence: `frontend/src/App.tsx`)
- React console → University config: routes to (evidence: `frontend/src/App.tsx`)
- React console → Schedule generator: routes to (evidence: `frontend/src/App.tsx`)
- React console → Timetable viewer: routes to (evidence: `frontend/src/App.tsx`)
- Master data → REST API client: submits data (evidence: `README.md`)
- University config → REST API client: submits config (evidence: `README.md`)
- Schedule generator → REST API client: requests schedule (evidence: `README.md`)
- Timetable viewer → REST API client: requests timetable (evidence: `README.md`)
- REST API client → Spring REST backend: calls REST (evidence: `README.md`)
- Spring REST backend → Master data services: serves master data
- Spring REST backend → Schedule management: routes scheduling (evidence: `README.md`)
- Schedule management → Feasibility check: checks feasibility (evidence: `README.md`)
- Schedule management → Solve job orchestration: submits solve (evidence: `README.md`)
- Solve job orchestration → Problem builder: builds problem (evidence: `README.md`)
- Problem builder → Constraint solver: provides problem (evidence: `README.md`)
- Constraint solver → Solve job orchestration: reports live score (evidence: `README.md`)
- Constraint solver → Relational database: persists result (evidence: `README.md`)
- Manual sessions → REST API client: updates assignments (evidence: `frontend/src/pages/ManualSessions.tsx`)
- Events → REST API client: exposes events
- REST API client → Disruption analysis: requests impact analysis
- Disruption analysis → Solve job orchestration: requests partial solve (evidence: `README.md`)
- REST API client → CSV import: imports data (evidence: `README.md`)
- Timetable viewer → Schedule exports: requests exports (evidence: `README.md`)
- REST API client → Analytics and comparison: serves analysis
- Master data services → Relational database: stores records
