rubis/apps/api/config/drive.ts
ordinarthur 274f2a8270 feat(api): install + configure bouncer, mail, limiter, drive, bullmq
Stack backend complète selon docs/tech/backend.md §2 :

- @adonisjs/bouncer : configure standard, middleware initialize_bouncer simplifié (API JSON-only, pas d'Edge views).
- @adonisjs/limiter : store Redis par défaut, throttler global défini dans start/limiter.ts.
- @adonisjs/mail : transports SMTP (Mailpit en dev) + Resend (prod).
- @adonisjs/drive : services fs (fallback) + S3 (MinIO en dev, prod plus tard).
- bullmq + ioredis : config queue.ts définit la connection Redis et la liste des queues (ocr, relances, checkins, kpis). Worker à câbler dans le commit suivant.
- @aws-sdk/client-s3 + s3-request-presigner pour le driver flydrive S3.

Pas de @rlanz/bull-queue : peer Adonis 6.5, plus maintenu — on consomme BullMQ directement.
2026-05-06 13:25:00 +02:00

40 lines
1.1 KiB
TypeScript

import { defineConfig, services } from '@adonisjs/drive'
import type { InferDriveDisks } from '@adonisjs/drive/types'
import env from '#start/env'
const driveConfig = defineConfig({
default: env.get('DRIVE_DISK', 's3'),
/**
* Stockage local (filesystem) — utilisé en fallback si MinIO indisponible.
* Bucket par défaut : storage/uploads (ignoré par git).
*/
services: {
fs: services.fs({
location: 'storage/uploads',
visibility: 'private',
}),
/**
* MinIO via le driver S3 (S3-compatible).
*/
s3: services.s3({
credentials: {
accessKeyId: env.get('S3_ACCESS_KEY', ''),
secretAccessKey: env.get('S3_SECRET_KEY', ''),
},
endpoint: env.get('S3_ENDPOINT'),
region: env.get('S3_REGION', 'fr-par'),
bucket: env.get('S3_BUCKET', 'rubis-invoices'),
forcePathStyle: env.get('S3_FORCE_PATH_STYLE', true),
visibility: 'private',
}),
},
})
export default driveConfig
declare module '@adonisjs/drive/types' {
export interface DriveDisks extends InferDriveDisks<typeof driveConfig> {}
}