@jrmc/adonis-attachment
Version:
Turn any field on your Lucid model to an attachment data type
45 lines (44 loc) • 1.73 kB
JavaScript
/**
* @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');
};
}
}