Files
api.portfolio/app/controllers/admin/images_controller.js
2026-02-25 00:34:39 +01:00

43 lines
1.7 KiB
JavaScript

import app from '@adonisjs/core/services/app';
import Image from '#models/image';
import fs from 'node:fs';
export default class ImagesController {
async index({ view }) {
const images = await Image.query().orderBy('created_at', 'desc');
return view.render('admin/images/index', { images });
}
async store({ request, response, session }) {
const imageFile = request.file('image', {
size: '5mb',
extnames: ['jpg', 'png', 'jpeg', 'webp', 'gif'],
});
if (!imageFile) {
session.flashErrors({ error: 'Please upload an image file.' });
return response.redirect().back();
}
if (imageFile.hasErrors) {
session.flashErrors({ error: imageFile.errors[0].message });
return response.redirect().back();
}
await imageFile.move(app.makePath('public/uploads/images'));
await Image.create({
filePath: `/uploads/images/${imageFile.fileName}`,
originalName: imageFile.clientName,
mimeType: imageFile.type + '/' + imageFile.subtype,
size: imageFile.size,
});
session.flash({ success: 'Image uploaded successfully.' });
return response.redirect().back();
}
async destroy({ params, response, session }) {
const image = await Image.findOrFail(params.id);
const absolutePath = app.makePath('public' + image.filePath);
if (fs.existsSync(absolutePath)) {
fs.unlinkSync(absolutePath);
}
await image.delete();
session.flash({ success: 'Image deleted successfully.' });
return response.redirect().back();
}
}
//# sourceMappingURL=images_controller.js.map