# Skydesportens Dag besøgsregistrering Lille standalone ASP.NET Core app til Vestfalster Skytteforening. ## Funktioner - Offentlig registrering uden login på `/` - Felter: navn, adresse, fødselsdag og email - Postby udfyldes automatisk ved indtastning af et kendt dansk postnummer og kan redigeres manuelt - Adminliste på `/admin` - Sletning med bekræftelse på adminlisten - CSV-download og udskrivning via browserens dialog (vælg Gem som PDF for PDF) - Adminlisten bruger enkel HTTP Basic Auth via konfiguration - Data gemmes lokalt i SQLite uden databaseserver eller databaselogin - Frontend serveres direkte fra samme dotnet app ## Opsætning 1. Sæt adminlogin via environment variables eller user secrets (kun nødvendigt for adminlisten): ```powershell $env:Admin__Username="admin" $env:Admin__Password="change-me" ``` 2. Start appen: ```powershell dotnet run ``` Appen opretter selv databasefilen `data/visitors.db` og `visitors`-tabellen. Data bevares efter genstart. Stien regnes fra projektmappen og kan ændres med `Database__Path`. Der kræves ingen databaseopsætning. En eventuel gammel `ConnectionStrings__Default` bruges ikke længere. Tag backup af databasefilen, når appen er stoppet. Databasefiler er udeladt fra Git. Eksisterende data i PostgreSQL flyttes ikke automatisk. Appen kører typisk på den URL, `dotnet run` skriver i terminalen, fx `http://localhost:5000`. Postnummerlisten ligger lokalt i `wwwroot/postnumre.json`, så opslag virker uden internet. Data er hentet fra [GeoNames](https://download.geonames.org/export/zip/) den 2. oktober 2026 og bruges under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Ukendte postnumre kan udfyldes manuelt. Opdater listen med `./scripts/update-postal-codes.ps1` (kræver internet). ## Docker-server uden Git-runner Overfør `Dockerfile`, `compose.yaml`, `SkydesportensDag.csproj`, `Program.cs`, `appsettings.json`, `.dockerignore`, `.env.example` og mappen `wwwroot` til samme mappe på serveren med SCP/SFTP. Docker bygger appen på serveren; der kræves ingen .NET-installation eller Git-runner dér. På serveren: ```sh cp .env.example .env chmod 600 .env # Rediger .env og sæt Admin__Password samt ønsket port. docker compose up -d --build docker compose logs --tail=100 web ``` Appen lytter som standard på `127.0.0.1:5187` på serveren. En eksisterende reverse proxy kan sende trafik hertil; brug HTTPS ved adgang over internettet, da adminlogin bruger Basic Auth. Ved direkte adgang på det lokale netværk kan `APP_BIND` sættes til serverens LAN-adresse. En proxy i en anden container kræver tilpasning af Docker-netværket. Databasen oprettes i Docker-volumenet `visitors-data` og bevares ved genstart og nye builds. `docker compose down -v` sletter databasen. Lokale registreringer overføres ikke automatisk; aftal overførsel af databasefilen, hvis de skal med. Ved opdateringer overføres kodefilerne igen, og `docker compose up -d --build` køres. Bevar serverens `.env` og databasevolumen. Tag databasebackup, mens appen er stoppet. Adminlisten viser et interaktivt kort med antal deltagere pr. postnummer. Positioner fra GeoNames ligger i wwwroot/postnummer-positioner.json og opdateres sammen med postnummerlisten. Leaflet 1.9.4 ligger lokalt i wwwroot/vendor/leaflet med licens. Baggrundskort fra OpenStreetMap kræver internet; navne og adresser sendes ikke til korttjenesten. Kortet opdateres efter sletning og udelades fra listeudskrift.