Deze guide beschrijft hoe je direct verbinding maakt met PostgreSQL en het datalake (AWS S3) vanuit een project buiten deze workspace.
postgresql://postgres:postgres@localhost:5435/platform
DATABASE_URL=postgresql://postgres:postgres@localhost:5435/platform
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=platform
POSTGRES_HOST=localhost
POSTGRES_PORT=5435
// Met Prisma
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient({
datasources: {
db: {
url: process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:5435/platform'
}
}
});
// Gebruik
const students = await prisma.student.findMany();
// Met pg (raw PostgreSQL)
import pg from 'pg';
const { Client } = pg;
const client = new Client({
host: 'localhost',
port: 5435,
database: 'platform',
user: 'postgres',
password: 'postgres'
});
await client.connect();
const result = await client.query('SELECT * FROM platform.students');
import psycopg2
conn = psycopg2.connect(
host='localhost',
port=5435,
database='platform',
user='postgres',
password='postgres'
)
cursor = conn.cursor()
cursor.execute('SELECT * FROM platform.students')
students = cursor.fetchall()
Het datalake draait op AWS S3. Applicaties gebruiken AWS credentials en de S3 API (of een S3-compatible client met endpoint override voor lokale dev).
AWS_REGION=eu-west-1
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
# Alleen voor lokale S3-compatible endpoint (bv. dev):
# S3_ENDPOINT=http://localhost:9005
// Met @stephen/datalake package (aanbevolen)
import { createMinioClient, MedallionBuckets } from '@stephen/datalake';
const client = createMinioClient(); // Leest AWS/S3 config uit env
const bucketName = MedallionBuckets.BRONZE_EDUCATION;
const objectsStream = client.listObjects(bucketName, 'notability/Priveles/', true);
for await (const obj of objectsStream) {
console.log(obj.name);
}
import boto3
s3 = boto3.client('s3', region_name='eu-west-1')
paginator = s3.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket='bronze-education', Prefix='notability/Priveles/'):
for obj in page.get('Contents', []):
print(obj['Key'])
Het datalake gebruikt een Medallion Architecture met de volgende buckets:
bronze-education - Raw data (PDFs, notability files)silver-education - Processed data (metadata, thumbnails)gold-analytics, gold-reports - Analytics en reportsStudent bestanden zijn georganiseerd als:
bronze-education/notability/Priveles/{SUBJECT}/{StudentName}/*.pdf
Waar {SUBJECT} een van de volgende is:
VO - Voortgezet Onderwijs (wiskunde-a)Rekenen - Rekenen basisWO - Wetenschappelijk Onderwijs (wiskunde-a)platform.students - Student recordsplatform.lessons - Lessenplatform.appointments - Afsprakenplatform.guardians - Ouders/verzorgersplatform.payments - Betalingen{
id: string; // CUID
name: string;
email?: string;
phone?: string;
datalakePath?: string; // Path naar student folder in S3
shareToken?: string; // Voor share functionaliteit
// ... meer velden
}
Zie packages/database/prisma/schema.prisma voor volledige schema definitie.
Als je project in Docker draait en op hetzelfde netwerk (data-network):
postgresql://postgres:postgres@platform-postgres:5432/platform
Gebruik AWS credentials en de juiste regio; binnen Docker kan de app dezelfde credentials gebruiken als op de host (of IAM role). Geen aparte container-naam voor S3.
⚠️ Belangrijk:
Error: Connection refused
docker ps | grep platform-postgresnetstat -tlnp | grep 5435Error: Authentication failed
projects/platform-infrastructure/.envpsql -h localhost -p 5435 -U postgres -lError: Access Denied / 403
AWS_ACCESS_KEY_ID en AWS_SECRET_ACCESS_KEYS3_ENDPOINT correct isError: Network / endpoint
AWS_REGION en of de bucket in die regio bestaatZie docs/external-access/examples/ voor volledige code voorbeelden in verschillende talen.