Hopp til hovedinnhold

Database

ChurchApps API bruker en database-per-modul-arkitektur. Hver av de seks modulene har sin egen MySQL-database med en uavhengig tilkoblingspool, noe som gir klare datagrenser samtidig som alt holdes innenfor en enkelt distribusjon.

Før du begynner

Arkitekturoversikt

Api
├── membership_db ← Personer, grupper, tillatelser
├── attendance_db ← Gudstjenester, økter, registreringer
├── content_db ← Sider, seksjoner, elementer
├── giving_db ← Gaver, fond, betalinger
├── messaging_db ← Samtaler, varsler
└── doing_db ← Oppgaver, planer, tildelinger

Viktige designvalg

  • Én database per modul -- Hver modul vedlikeholder sin egen MySQL-database med en dedikert tilkoblingspool (EnhancedPoolHelper). Dette holder modulene frakoblet og muliggjør uavhengig skjemautvikling.
  • Repository-mønster med direkte SQL -- Det er ingen ORM. All datatilgang går gjennom repository-klasser som utfører SQL direkte ved hjelp av DB.query(). Dette gir full kontroll over spørringsytelse og oppførsel.
  • Flerleietaker etter design -- Hver spørring er avgrenset av churchId. Alle tabeller inkluderer en churchId-kolonne, og repository-laget håndhever leieisolasjon automatisk.

Tilkoblingsstrenger

Hver moduls databasetilkobling konfigureres i .env ved hjelp av standard MySQL-tilkoblingsstrengformat:

mysql://bruker:passord@vert:port/database

For eksempel kan et lokalt utviklingsoppsett se slik ut:

MEMBERSHIP_DB=mysql://root:password@localhost:3306/churchapps_membership
ATTENDANCE_DB=mysql://root:password@localhost:3306/churchapps_attendance
CONTENT_DB=mysql://root:password@localhost:3306/churchapps_content
GIVING_DB=mysql://root:password@localhost:3306/churchapps_giving
MESSAGING_DB=mysql://root:password@localhost:3306/churchapps_messaging
DOING_DB=mysql://root:password@localhost:3306/churchapps_doing
Info

I produksjon lagres tilkoblingsstrenger i AWS SSM Parameter Store og leses av Environment-klassen ved oppstart.

Skjemaskript

Databaseskjemaskript er plassert i katalogen tools/dbScripts/, organisert etter modul:

tools/dbScripts/
├── membership/
├── attendance/
├── content/
├── giving/
├── messaging/
└── doing/

Disse skriptene definerer tabelloppretting, indekser og eventuelle nødvendige startdata.

Databaseinitialisering

Initialiser alle databaser

npm run initdb

Dette oppretter alle seks databaser og kjører skjemaskriptene for hver.

Initialiser en enkelt modul

npm run initdb:membership
npm run initdb:attendance
npm run initdb:content
npm run initdb:giving
npm run initdb:messaging
npm run initdb:doing
Tips

Når du jobber med en spesifikk modul, kan du re-initialisere bare den modulens database uten å påvirke de andre.

Datatilgangsmønster

Repositories tilgjengeliggjør data gjennom DB.query()-metoden. En typisk repository-metode ser slik ut:

public async loadByChurchId(churchId: string) {
return DB.query("SELECT * FROM people WHERE churchId=?", [churchId]);
}

Repositories hentes via RepositoryManager:

const repos = RepositoryManager.getRepositories<MembershipRepositories>("membership");
const people = await repos.person.loadByChurchId(churchId);
Advarsel

Inkluder alltid churchId i spørringene dine for å opprettholde flerleietaker-isolasjon. Spør aldri på tvers av leietakere med mindre du har en spesifikk, autorisert grunn til å gjøre det.

Relaterte artikler