Files
orario/README.md
T

90 lines
3.1 KiB
Markdown

# Orario
Sito per visualizzare l'orario delle lezioni per i vari anni di corso.
## Usage
You need to have installed `node` and `npm` (or `pnpm`). To setup the project just run `npm install`.
### Development
To start the development server run `npm run dev`.
### Editor
È meglio se prima di fare commit il codice sia formattato con Prettier, nel caso di VSCode c'è un'estensione omonima e le opzioni da aggiungere al proprio JSON di impostazioni sono
```json
...
"prettier.printWidth": 100,
"prettier.singleQuote": true,
"prettier.quoteProps": "consistent",
"prettier.tabWidth": 4,
"prettier.semi": false,
"prettier.arrowParens": "avoid",
"editor.formatOnSave": true,
...
```
### Production
To build the ViteJS project run `npm run build`, for deployment a `.env` file can be used to set the `BASE_URL` variable.
## Semester Timetable Data & Automated Updates
The timetable IDs and semester dates are stored in `semester-data.json`.
The client application loads `semester-data.json` with a **Stale-While-Revalidate / Fallback** pattern:
- The bundled `src/semester-data.json` is used as an immediate fallback (ensuring instant render and offline availability).
- On startup, the client dynamically fetches `/semester-data.json` (hourly cache-busted). If new IDs or dates are published, the UI updates automatically without needing to rebuild or redeploy the frontend bundle.
### Updating Semester Data
To manually check and update semester data:
```bash
# Update both src/semester-data.json and public/semester-data.json
npm run update-data
# Or run directly with custom output path(s)
node src/scripts/update-semester-data.js --output /var/www/orario/semester-data.json
# Check without modifying files (exits with code 1 if updates found, 0 if up to date)
node src/scripts/update-semester-data.js --check
```
### Automated Daily Host Updates
To ensure the production site always has up-to-date timetable IDs each semester without manual commits, set up a daily check on the server hosting `/var/www/orario`.
#### Option 1: Systemd Timer (Recommended)
1. Copy the systemd unit files to `/etc/systemd/system/`:
```bash
sudo cp systemd/orario-update.service /etc/systemd/system/
sudo cp systemd/orario-update.timer /etc/systemd/system/
```
2. In `/etc/systemd/system/orario-update.service`, ensure the `ExecStart` path points to your repository's update script and your webroot target, for example:
```ini
ExecStart=/usr/bin/node /home/fra/tech/phc/orario/src/scripts/update-semester-data.js --output /var/www/orario/semester-data.json --quiet
```
3. Enable and start the timer:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now orario-update.timer
```
4. Verify status:
```bash
systemctl list-timers | grep orario
```
#### Option 2: Standard Cron (`crontab -e`)
Add a daily cron entry to the `caddy` (or deployment) user's crontab:
```bash
crontab -e
```
Add the following line (runs daily at 04:30 AM):
```cron
30 4 * * * /usr/bin/node /home/fra/tech/phc/orario/src/scripts/update-semester-data.js --output /var/www/orario/semester-data.json --quiet >> /var/log/orario-update.log 2>&1
```