UNPKG

@jrmc/adonis-attachment

Version:

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

45 lines (44 loc) 1.73 kB
/** * @jrmc/adonis-attachment * * @license MIT * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr> */ import { configProvider } from '@adonisjs/core'; import { RuntimeException } from '@poppinss/utils'; 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 drive = await this.app.container.make('drive.manager'); 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'); }; } }