- Added the `allowEmailContact` property to the `CardBoxClient` component to display the email contact status. - Added the `allowEmailContact` computed property to the `Person` model to determine if email contact is allowed based on the related datasets. - Preloaded the datasets relation in the `AuthorsController` to access the pivot attributes. - Updated the `Dashboard.vue` to pass the `allowEmailContact` prop to the `CardBoxClient` component. - Updated the `array_contains_types` validation rule to correct the error message for descriptions. - Updated the `FormCheckRadio.vue` to correctly handle the radio button and checkbox components.
41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import type { HttpContext } from '@adonisjs/core/http';
|
|
import Person from '#models/person';
|
|
// import Dataset from 'App/Models/Dataset';
|
|
|
|
// node ace make:controller Author
|
|
export default class AuthorsController {
|
|
public async index({}: HttpContext) {
|
|
// select * from gba.persons
|
|
// where exists (select * from gba.documents inner join gba.link_documents_persons on "documents"."id" = "link_documents_persons"."document_id"
|
|
// where ("link_documents_persons"."role" = 'author') and ("persons"."id" = "link_documents_persons"."person_id"));
|
|
const authors = await Person.query()
|
|
.preload('datasets')
|
|
.where('name_type', 'Personal')
|
|
.whereHas('datasets', (dQuery) => {
|
|
dQuery.wherePivot('role', 'author');
|
|
})
|
|
.withCount('datasets', (query) => {
|
|
query.as('datasets_count');
|
|
})
|
|
.orderBy('datasets_count', 'desc');
|
|
|
|
return authors;
|
|
}
|
|
|
|
public async persons({ request }: HttpContext) {
|
|
const authors = Person.query().where('status', true);
|
|
|
|
if (request.input('filter')) {
|
|
// users = users.whereRaw('name like %?%', [request.input('search')])
|
|
const searchTerm = request.input('filter');
|
|
authors.andWhere((query) => {
|
|
query.whereILike('first_name', `%${searchTerm}%`)
|
|
.orWhereILike('last_name', `%${searchTerm}%`);
|
|
});
|
|
// .orWhere('email', 'like', `%${searchTerm}%`);
|
|
}
|
|
|
|
let persons = await authors;
|
|
return persons;
|
|
}
|
|
}
|