All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 4m33s
71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
|
|
Här är en sammanfattning av arkitekturen och besluten vi spikat, redo att användas som specifikation när du börjar koda.
|
|
|
|
### 1. Teknikstack
|
|
|
|
* **Backend:** Django (Micro-framework stil, allt i en fil).
|
|
* **Databas:** SQLite (med WAL-mode aktiverat för prestanda).
|
|
* **Frontend:** Django Templates + **HTMX** (för SPA-känsla utan build-steg).
|
|
* **Server:** Gunicorn (kör appen) bakom **Caddy** (hanterar HTTPS och statiska filer).
|
|
### 2. Filstruktur & Setup
|
|
|
|
Projektet består primärt av **en enda Python-fil** (`quiz.py`) som innehåller:
|
|
|
|
* Django Settings.
|
|
* Modeller (`User`, `Question`, `Option`, `QuizResult`).
|
|
* Vyer & URLs.
|
|
* HTML-templates (som skrivs till disk vid start).
|
|
* Import-logik.
|
|
|
|
**Mappstruktur:**
|
|
```text
|
|
/
|
|
├── quiz.py # Hela applikationen
|
|
├── db.sqlite3 # Databasen
|
|
└── static/ # Genereras av collectstatic
|
|
|
|
```
|
|
|
|
Gamla Tentor/YYYY-mm-dd/nn.md från obsidian
|
|
### 3. Nyckelfunktioner
|
|
|
|
#### A. Dataimport (Markdown)
|
|
* **Källa:** Läser `.md`-filer från `import_folder`.
|
|
* **Trigg:** Sker automatiskt i `AppConfig.ready()` när servern startar.
|
|
* **Logik:** Använder filsökvägen som ID för att uppdatera frågor snarare än att skapa dubbletter.
|
|
|
|
#### B. Användare (Lazy Auth)
|
|
* Ingen inloggningsskärm.
|
|
* **Middleware:** Skapar automatiskt en osynlig `User` och loggar in besökaren om de är anonyma.
|
|
|
|
#### C. Quiz-flöde
|
|
* Sidan laddas inte om.
|
|
* `index.html` startar quizet.
|
|
* Svar skickas via HTMX (`hx-post`) -> Servern validerar -> Returnerar nästa fråga (`partials/question.html`) som byts ut i DOM:en.
|
|
|
|
### 4. Deployment & Drift
|
|
#### Gitea Action (Deploy)
|
|
Ingen `pm2`. Vi dödar och startar om processen med enkla shell-kommandon:
|
|
```bash
|
|
pkill -f "gunicorn quiz:application" || true
|
|
nohup gunicorn quiz:application --workers 3 --bind 127.0.0.1:8000 > app.log 2>&1 &
|
|
|
|
```
|
|
#### Caddy (Reverse Proxy)
|
|
Hanterar SSL och avlastar Python från att servera statiska filer.
|
|
```caddy
|
|
din-domän.se {
|
|
root * /sökväg/till/static
|
|
file_server /static/*
|
|
reverse_proxy 127.0.0.1:8000
|
|
}
|
|
|
|
```
|
|
#### Databassäkerhet
|
|
För att undvika "Database locked" vid omstarter/concurrent writes:
|
|
```sql
|
|
PRAGMA journal_mode = WAL;
|
|
```
|
|
|
|
|