- add methods for releasing datasets from submitter
All checks were successful
CI Pipeline / japa-tests (push) Successful in 54s

- npm updates
- side menu with child items
- flash messages via HttpContext response (extended via macro)
This commit is contained in:
Kaimbacher 2023-06-27 18:23:18 +02:00
parent e0ff71b117
commit f403c3109f
37 changed files with 1020 additions and 482 deletions

View file

@ -17,8 +17,68 @@ import { TransactionClientContract } from '@ioc:Adonis/Lucid/Database';
import Subject from 'App/Models/Subject';
import CreateDatasetValidator from 'App/Validators/CreateDatasetValidator';
import { TitleTypes, DescriptionTypes } from 'Contracts/enums';
import type { ModelQueryBuilderContract } from '@ioc:Adonis/Lucid/Orm';
export default class DatasetController {
public async index({ auth, request, inertia }: HttpContextContract) {
const user = (await User.find(auth.user?.id)) as User;
const page = request.input('page', 1);
let datasets: ModelQueryBuilderContract<typeof Dataset, Dataset> = Dataset.query();
// if (request.input('search')) {
// // users = users.whereRaw('name like %?%', [request.input('search')])
// const searchTerm = request.input('search');
// datasets.where('name', 'ilike', `%${searchTerm}%`);
// }
if (request.input('sort')) {
type SortOrder = 'asc' | 'desc' | undefined;
let attribute = request.input('sort');
let sort_order: SortOrder = 'asc';
if (attribute.substr(0, 1) == '-') {
sort_order = 'desc';
// attribute = substr(attribute, 1);
attribute = attribute.substr(1);
}
datasets.orderBy(attribute, sort_order);
} else {
// users.orderBy('created_at', 'desc');
datasets.orderBy('id', 'asc');
}
// const users = await User.query().orderBy('login').paginate(page, limit);
const myDatasets = await datasets
.whereIn('server_state', [
'inprogress',
'released',
'editor_accepted',
'approved',
'reviewed',
'rejected_editor',
'rejected_reviewer',
])
.where('account_id', user.id)
.preload('titles')
.preload('user', (query) => query.select('id', 'login'))
// .preload('titles', (builder) => {
// // pull the actual preload data
// builder.where('type', 'Main');
// })
.paginate(page, 10);
return inertia.render('Submitter/Dataset/Index', {
// testing: 'this is a test',
datasets: myDatasets.serialize(),
filters: request.all(),
can: {
// create: await auth.user?.can(['user-create']),
edit: await auth.user?.can(['dataset-edit']),
delete: await auth.user?.can(['dataset-delete']),
},
});
}
public async create({ inertia }: HttpContextContract) {
const licenses = await License.query().select('id', 'name_long').pluck('name_long', 'id');
@ -423,4 +483,89 @@ export default class DatasetController {
'files.*.size': 'file size is to big',
'files.extnames': 'file extension is not supported',
};
// public async release({ params, view }) {
public async release({ request, inertia }: HttpContextContract) {
const id = request.param('id');
const dataset = await Dataset.query()
.preload('user', (builder) => {
builder.select('id', 'login');
})
.where('id', id)
.firstOrFail();
// const editors = await User.query()
// .whereHas('roles', (builder) => {
// builder.where('name', 'editor');
// })
// .pluck('login', 'id');
return inertia.render('Submitter/Dataset/Release', {
dataset,
});
}
public async releaseUpdate({ request, response }: HttpContextContract) {
const id = request.param('id');
const dataset = await Dataset.query().preload('files').where('id', id).firstOrFail();
if (dataset.files.length === 0) {
return response.flash('message', 'At least minimum one file is required.').redirect('back');
}
const preferation = request.input('preferation', '');
const preferredReviewer = request.input('preferred_reviewer');
const preferredReviewerEmail = request.input('preferred_reviewer_email');
if (preferation === 'yes_preferation') {
const newSchema = schema.create({
preferred_reviewer: schema.string({ trim: true }, [rules.minLength(3), rules.maxLength(255)]),
preferred_reviewer_email: schema.string([rules.email()]),
});
try {
await request.validate({ schema: newSchema });
} catch (error) {
// return response.badRequest(error.messages);
throw error;
}
}
const input = {
preferred_reviewer: preferredReviewer || null,
preferred_reviewer_email: preferredReviewerEmail || null,
server_state: 'released',
editor_id: null,
reviewer_id: null,
reject_editor_note: null,
reject_reviewer_note: null,
};
// Clear editor_id if it exists
if (dataset.editor_id !== null) {
input.editor_id = null;
}
// Clear reject_editor_note if it exists
if (dataset.reject_editor_note !== null) {
input.reject_editor_note = null;
}
// Clear reviewer_id if it exists
if (dataset.reviewer_id !== null) {
input.reviewer_id = null;
}
// Clear reject_reviewer_note if it exists
if (dataset.reject_reviewer_note !== null) {
input.reject_reviewer_note = null;
}
// if (await dataset.merge(input).save()) {
// return response.redirect().route('publish.workflow.submit.index').flash('flash_message', 'You have released your dataset!');
// }
return response.toRoute('dataset.list').flash('message', 'You have released your dataset');
// throw new GeneralException(trans('exceptions.publish.release.update_error'));
}
}