feat: Add and refactor MIME type management
Some checks failed
CI Pipeline / japa-tests (push) Failing after 47s

- Added BaseModel with fillable attributes and mergeFillableAttributes method
- Refactored MimeType model to extend BaseModel
- Implemented destroy method in MimetypeController for deleting MIME types
- Updated Create.vue component with refactoring and improved type safety
- Fixed issues with ref usage in Create.vue
- Updated routes to include new and refactored endpoints
This commit is contained in:
Kaimbacher 2025-01-12 15:47:25 +01:00
parent d1480b1240
commit 537c6fd81a
10 changed files with 321 additions and 449 deletions

View file

@ -106,7 +106,7 @@ export default class MimetypeController {
public async down({ request, response }: HttpContext) {
const id = request.param('id');
const mimetype = await MimeType.findOrFail(id);
const mimetype = (await MimeType.findOrFail(id)) as MimeType;
mimetype.enabled = false;
await mimetype.save();
@ -138,4 +138,46 @@ export default class MimetypeController {
// // roleHasPermissions: Object.keys(rolerHasPermissions).map((key) => rolerHasPermissions[key]), //convert object to array with role ids
// });
// }
public async delete({ request, inertia, response, session }: HttpContext) {
const id = request.param('id');
try {
const mimetype = await MimeType.query()
// .preload('user', (builder) => {
// builder.select('id', 'login');
// })
.where('id', id)
// .preload('files')
.firstOrFail();
// const validStates = ['inprogress', 'rejected_editor'];
// if (!validStates.includes(dataset.server_state)) {
// // session.flash('errors', 'Invalid server state!');
// return response
// .flash(
// 'warning',
// `Invalid server state. Dataset with id ${id} cannot be deleted. Datset has server state ${dataset.server_state}.`,
// )
// .redirect()
// .toRoute('dataset.list');
// }
return inertia.render('Admin/Mimetype/Delete', {
mimetype,
});
} catch (error) {
if (error.code == 'E_ROW_NOT_FOUND') {
session.flash({ warning: 'Mimetype is not found in database' });
} else {
session.flash({ warning: 'general error occured, you cannot delete the mimetype' });
}
return response.redirect().toRoute('mimetype.index');
}
}
public async deleteStore({ request, response, session }: HttpContext) {
const id = request.param('id');
const mimetype = await MimeType.findOrFail(id);
await mimetype.delete();
session.flash('message', `Mimetype ${mimetype.name} has been deleted.`);
return response.redirect().toRoute('settings.mimetype.index');
}
}

View file

@ -1,3 +1,4 @@
// import { BaseModel as LucidBaseModel } from '@adonisjs/lucid/orm';
import { BaseModel as LucidBaseModel } from '@adonisjs/lucid/orm';
// import { ManyToManyQueryClient } from '@ioc:Adonis/Lucid/Orm';
@ -29,8 +30,9 @@ export default class BaseModel extends LucidBaseModel {
*/
// private fillInvoked: boolean = false;
[key: string]: any;
// [key: string]: any;
public static fillable: string[] = [];
public fill(attributes: any, allowExtraProperties: boolean = false): this {

View file

@ -36,7 +36,7 @@ export default abstract class DatasetExtension extends LucidBaseModel {
// which fields shoud#t be published
protected internalFields: Record<string, any> = {};
protected fields: Record<string, any> = {};
[key: string]: any;
// [key: string]: any;
private getExternalFields(): Record<string, any> {
// External fields definition