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

86 lines
3.2 KiB
JavaScript

import app from '@adonisjs/core/services/app';
import Music from '#models/music';
import fs from 'node:fs';
export default class AdminMusicController {
async index({ view }) {
const musics = await Music.all();
return view.render('admin/music/index', { musics });
}
async create({ view }) {
return view.render('admin/music/form', { music: null });
}
async store({ request, response, session }) {
const { name } = request.only(['name']);
const musicFile = request.file('file', {
size: '10mb',
extnames: ['mp3', 'wav', 'ogg'],
});
if (!musicFile) {
session.flashErrors({ error: 'Veuillez télécharger un fichier audio.' });
return response.redirect().back();
}
await musicFile.move(app.makePath('public/uploads/music'), {
name: `${new Date().getTime()}_${musicFile.clientName}`
});
const url = `/uploads/music/${musicFile.fileName}`;
await Music.create({ name, url });
session.flash({ success: 'Musique ajoutée avec succès.' });
return response.redirect('/admin/music');
}
async edit({ view, params, response }) {
const music = await Music.find(params.id);
if (!music) {
return response.notFound();
}
return view.render('admin/music/form', { music });
}
async update({ request, params, response, session }) {
const music = await Music.find(params.id);
if (!music) {
return response.notFound();
}
const { name } = request.only(['name']);
const musicFile = request.file('file', {
size: '10mb',
extnames: ['mp3', 'wav', 'ogg'],
});
let url = music.url;
if (musicFile) {
const oldPath = app.makePath('public' + music.url);
if (fs.existsSync(oldPath)) {
try {
fs.unlinkSync(oldPath);
}
catch (err) {
console.error('Failed to delete old music file', err);
}
}
await musicFile.move(app.makePath('public/uploads/music'), {
name: `${new Date().getTime()}_${musicFile.clientName}`
});
url = `/uploads/music/${musicFile.fileName}`;
}
await music.merge({ name, url }).save();
session.flash({ success: 'Musique modifiée avec succès.' });
return response.redirect('/admin/music');
}
async destroy({ params, response, session }) {
const music = await Music.find(params.id);
if (!music) {
return response.notFound();
}
const absolutePath = app.makePath('public' + music.url);
if (fs.existsSync(absolutePath)) {
try {
fs.unlinkSync(absolutePath);
}
catch (err) {
console.error('Failed to delete music file', err);
}
}
await music.delete();
session.flash({ success: 'Musique supprimée avec succès.' });
return response.redirect('/admin/music');
}
}
//# sourceMappingURL=music_controller.js.map