UNPKG

@jrmc/adonis-attachment

Version:

Turn any field on your Lucid model to an attachment data type

51 lines (50 loc) 2.04 kB
/** * @jrmc/adonis-attachment * * @license MIT * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr> */ import { configProvider } from '@adonisjs/core'; import { RuntimeException } from '@poppinss/exception'; import { verrou } from '../src/adapters/lock.js'; export default class AttachmentProvider { app; #manager = null; constructor(app) { this.app = app; } register() { this.app.container.singleton('jrmc.attachment', async () => { const { AttachmentManager } = await import('../src/attachment_manager.js'); const attachmentConfig = this.app.config.get('attachment'); const config = await configProvider.resolve(this.app, attachmentConfig); const driveManager = await this.app.container.make('drive.manager'); const driveConfigProvider = this.app.config.get('drive'); const driveConfig = await configProvider.resolve(this.app, driveConfigProvider); const drive = { driveManager, diskDefault: driveConfig.config.default, }; let lock; try { const lockManager = await this.app.container.make('lock.manager'); lock = verrou(lockManager); } catch (error) { lock = verrou(); } if (!config) { throw new RuntimeException('Invalid config exported from "config/attachment.ts" file. Make sure to use the defineConfig method'); } this.#manager = new AttachmentManager(config, drive, lock); return this.#manager; }); } async boot() { const router = await this.app.container.make('router'); const AttachmentsController = () => import('@jrmc/adonis-attachment/controllers/attachments_controller'); router.attachments = (pattern = '/attachments/:key/:name?') => { return router.get(pattern, [AttachmentsController]).as('attachments'); }; } }