76 lines
2.9 KiB
Markdown
76 lines
2.9 KiB
Markdown
# Roosterwijs
|
|
|
|
Modulair, flexibel roostersysteem voor het speciaal onderwijs (uil-logo: een
|
|
uil staat voor wijsheid → *Roosterwijs*). Zie `PLAN.md` voor de visie en de
|
|
fasering, en `DEPLOY.md` voor draaien op een test-/productieserver.
|
|
|
|
Status: **Fase 0** (fundament + plugin-framework) en **Fase 1** (kerndomein:
|
|
personen, groepen, subgroepen) zijn klaar.
|
|
|
|
## Wat er nu staat
|
|
|
|
- **Backend** (`backend/`) — Django + Django REST Framework.
|
|
- `plugins/` — het plugin-framework: een moduleregister, opslag van de
|
|
aan/uit-status per module en een beheer-API.
|
|
- `core/` — de kern (altijd actief). **Fase 1**: modellen Persoon, Groep en
|
|
Subgroep met een volledige CRUD-API. Roosterblokken en kalender volgen in
|
|
fase 2.
|
|
- `modules/printing/` en `modules/accounts/` — twee voorbeeldmodules die
|
|
zich bij opstarten aanmelden bij het register.
|
|
- **Frontend** (`frontend/`) — React (Vite). Zijbalk met Roosterwijs-logo die
|
|
alleen menu's toont van ingeschakelde modules, beheerschermen voor
|
|
**Personen**, **Groepen** en **Subgroepen**, en een scherm **Modulebeheer**.
|
|
|
|
## Hoe modulariteit werkt (het verkoopargument)
|
|
|
|
1. Een module is een gewone Django-app met een `apps.py` die in `ready()` een
|
|
`ModuleSpec` registreert (naam, beschrijving, versie, afhankelijkheden en
|
|
menu-items).
|
|
2. Het register weet wélke modules bestaan; de database onthoudt of ze **aan**
|
|
staan. Een beheerder schakelt ze per school in/uit via Modulebeheer.
|
|
3. Uitgeschakelde modules leveren geen menu's of schermen — de kern blijft
|
|
overal gelijk, modules zijn los bij te schakelen.
|
|
|
|
Een nieuwe module toevoegen = nieuwe app maken, één regel in
|
|
`MODULE_APPS` (in `backend/config/settings.py`), klaar.
|
|
|
|
## Starten
|
|
|
|
### Backend (Django, poort 8000)
|
|
|
|
```bash
|
|
cd backend
|
|
pip install -r requirements.txt
|
|
python manage.py migrate
|
|
python manage.py createsuperuser # optioneel, voor /admin/
|
|
python manage.py runserver
|
|
```
|
|
|
|
API-eindpunten:
|
|
- `GET /api/modules/` — alle modules met status.
|
|
- `POST /api/modules/<key>/state/` — body `{"enabled": true|false}`.
|
|
- `GET /api/info/` — korte systeem-/gezondheidsinfo.
|
|
- `GET/POST /api/personen/`, `/api/groepen/`, `/api/subgroepen/` — CRUD
|
|
(plus `PATCH`/`DELETE` op `/<id>/`). Personen filteren kan met `?rol=leerling`.
|
|
- `/admin/` — Django-admin (personen, groepen, subgroepen en modulestatus).
|
|
|
|
> Draait SQLite niet op je projectmap (bv. op een netwerkschijf)? Zet dan
|
|
> `ROOSTER_DB_PATH` naar een lokaal pad, of pas `DATABASES` aan.
|
|
|
|
### Frontend (React, poort 5173)
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
De dev-server stuurt `/api` automatisch door naar de backend op poort 8000.
|
|
Open daarna http://localhost:5173 en ga naar **Modulebeheer** om modules
|
|
aan/uit te zetten.
|
|
|
|
## Volgende stap (Fase 2)
|
|
|
|
Schooljaar & roostering: een jaarkalender (studiedagen, vrije dagen, vakanties)
|
|
en roosterblokken die je toewijst aan een groep, subgroep of individuele
|
|
leerling, met begeleiders en locatie.
|