This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

Database

SnapOtter gebruikt PostgreSQL 17 met Drizzle ORM (pg-core / node-postgres) voor gegevensopslag. Het schema is gedefinieerd in apps/api/src/db/schema.ts.

De verbinding wordt geconfigureerd via de omgevingsvariabele DATABASE_URL (standaard postgres://snapotter:snapotter@postgres:5432/snapotter). In Docker Compose slaat de Postgres-container zijn gegevens op in het benoemde volume SnapOtter-pgdata.

Tabellen

users

Slaat gebruikersaccounts op. Wordt bij de eerste run automatisch aangemaakt op basis van DEFAULT_USERNAME en DEFAULT_PASSWORD.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
usernamevarcharUniek, vereist
passwordHashvarcharscrypt-hash
rolevarcharadmin, editor of user
mustChangePasswordbooleanVlag voor geforceerde wachtwoordreset
createdAttimestampAanmaaktijd
updatedAttimestampTijd van laatste update

sessions

Actieve aanmeldsessies. Elke rij koppelt een sessietoken aan een gebruiker.

KolomTypeOpmerkingen
idvarcharPrimaire sleutel (sessietoken)
userIduuidVreemde sleutel naar users.id
expiresAttimestampVervaltijd
createdAttimestampAanmaaktijd

teams

Groepen om gebruikers te organiseren. Beheerders kunnen gebruikers aan teams toewijzen.

KolomTypeBeschrijving
iduuidPrimaire sleutel
namevarchar (uniek, max. 50 tekens)Teamnaam
createdAttimestampAanmaaktijd

api_keys

API-sleutels voor programmatische toegang. De onbewerkte sleutel wordt eenmalig getoond bij aanmaken; alleen de hash wordt opgeslagen.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
userIduuidVreemde sleutel naar users.id
keyHashvarcharscrypt-hash van de sleutel
namevarcharDoor de gebruiker opgegeven label
createdAttimestampAanmaaktijd
lastUsedAttimestampBijgewerkt bij elk geauthenticeerd verzoek

Sleutels beginnen met het voorvoegsel si_ gevolgd door 96 hexadecimale tekens (48 willekeurige bytes).

pipelines

Opgeslagen toolketens die gebruikers in de UI aanmaken.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
namevarcharPipelinenaam
descriptionvarcharOptionele beschrijving
stepsjsonbArray van { toolId, settings }-objecten
createdAttimestampAanmaaktijd

user_files

Persistente bestandsbibliotheek met versieketentracering. Elke verwerkingsstap die een resultaat opslaat, maakt een nieuwe rij aan die via parentId aan de bovenliggende rij wordt gekoppeld, wat een versieboom vormt.

KolomTypeBeschrijving
iduuidPrimaire sleutel
userIduuidFK naar users (CASCADE DELETE)
originalNamevarcharOorspronkelijke bestandsnaam bij upload
storedNamevarcharBestandsnaam op schijf
mimeTypevarcharMIME-type
sizeintegerBestandsgrootte in bytes
widthintegerBreedte van de afbeelding in px
heightintegerHoogte van de afbeelding in px
versionintegerVersienummer (1 = origineel)
parentIduuid of nullFK naar user_files (bovenliggende versie)
toolChainjsonbTool-ID's die op volgorde zijn toegepast om deze versie te maken
createdAttimestampAanmaaktijd

jobs

Volgt verwerkingsjobs voor voortgangsrapportage en opschoning.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
typevarcharTool- of pipeline-identifier
statusvarcharqueued, processing, completed of failed
progressrealFractie van 0.0-1.0
inputFilesjsonbArray van invoerbestandspaden
outputPathvarcharPad naar het resultaatbestand
settingsjsonbGebruikte toolinstellingen
errorvarcharFoutmelding bij mislukken
createdAttimestampAanmaaktijd
completedAttimestampVoltooiingstijd

settings

Sleutel-waardeopslag voor serverbrede instellingen die beheerders vanuit de UI kunnen wijzigen.

KolomTypeOpmerkingen
keyvarcharPrimaire sleutel
valuevarcharInstellingswaarde
updatedAttimestampTijd van laatste update

roles

Aangepaste rollen met granulaire rechten.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
namevarcharUnieke rolnaam
descriptionvarcharOptionele beschrijving
permissionsjsonbArray van rechtenstrings
createdAttimestampAanmaaktijd

audit_log

Logboek van beveiligingsrelevante acties.

KolomTypeOpmerkingen
iduuidPrimaire sleutel
userIduuidFK naar users
actionvarcharActietype
detailsjsonbActiespecifieke gegevens
createdAttimestampTijd van de actie

Migraties

Drizzle verzorgt schemamigraties. Migratiebestanden staan in apps/api/drizzle/. Tijdens ontwikkeling:

bash
cd apps/api
npx drizzle-kit generate   # generate a migration from schema changes
npx drizzle-kit migrate    # apply pending migrations

In productie worden openstaande migraties automatisch toegepast bij het opstarten.

Back-up en herstel

De relationele database bevindt zich in het SnapOtter-pgdata-volume van de Postgres-container, niet in het /data-volume van de app.

Optie 1: pg_dump (aanbevolen)

bash
# Dump the database while the stack is running
docker exec SnapOtter-postgres pg_dump -U snapotter snapotter > backup.sql

# Restore into a fresh database
cat backup.sql | docker exec -i SnapOtter-postgres psql -U snapotter snapotter

Optie 2: Volume-snapshot

bash
# Stop the stack, then snapshot the pgdata volume
docker compose down
docker run --rm -v SnapOtter-pgdata:/data -v $(pwd)/backup:/backup \
  alpine tar czf /backup/snapotter-pgdata.tar.gz -C /data .

Migreren vanaf 1.x (SQLite)

Upgraden vanaf SnapOtter 1.x heeft een eigen gids: zie Upgraden van 1.x naar 2.0. Kort gezegd: hergebruik je bestaande /data-volume, en 2.0 detecteert en importeert /data/snapotter.db automatisch bij de eerste keer opstarten (of stel SQLITE_MIGRATE_PATH in om er expliciet naar te verwijzen). Maak eerst een back-up van het volledige /data-volume, niet alleen van snapotter.db: 1.x gebruikt de SQLite WAL-modus, dus een gestopte container laat vaak het grootste deel van zijn gegevens in snapotter.db-wal staan naast een bijna leeg snapotter.db.