From 13e4f707c62257b6aa9435e2290112e4e0731bae Mon Sep 17 00:00:00 2001 From: Heitor Mattosinho Date: Wed, 28 Apr 2021 16:27:05 -0300 Subject: [PATCH] wip (case list): query efficiency --- .../app/Controllers/Http/GroupController.js | 13 ++++++---- .../Controllers/Http/v1/CategoryController.js | 24 ++++++++++++------- .../app/Controllers/Http/v1/UserController.js | 24 ++++++++++++------- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/adonisjs/app/Controllers/Http/GroupController.js b/src/adonisjs/app/Controllers/Http/GroupController.js index 449b756..976993e 100644 --- a/src/adonisjs/app/Controllers/Http/GroupController.js +++ b/src/adonisjs/app/Controllers/Http/GroupController.js @@ -73,7 +73,9 @@ class GroupController { let countCases = await Database .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('permissions.entity', 'group') @@ -95,7 +97,9 @@ class GroupController { .distinct('cases.id') .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('permissions.entity', 'group') @@ -121,9 +125,10 @@ class GroupController { const groupId = request.input('groupId') if(await Group.find(groupId)){ const result = await Database - .select('user_id','group_id','groups.title as group_title') + .select('users.username','user_id','group_id','groups.title as group_title') .from('users_groups') .join('groups','users_groups.group_id','groups.id') + .join('users', 'users_groups.user_id', 'users.id') .where ('users_groups.group_id', groupId) return response.json(result) @@ -170,7 +175,7 @@ class GroupController { } async listGroups ({request, auth, response}){ - + try { const groupId = request.input('groupId') diff --git a/src/adonisjs/app/Controllers/Http/v1/CategoryController.js b/src/adonisjs/app/Controllers/Http/v1/CategoryController.js index 239cad1..67e3c2d 100644 --- a/src/adonisjs/app/Controllers/Http/v1/CategoryController.js +++ b/src/adonisjs/app/Controllers/Http/v1/CategoryController.js @@ -109,7 +109,10 @@ class CategoryController { .join('case_properties', 'case_properties.case_id', 'cases.id') .join('properties', 'properties.id', 'case_properties.property_id') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.category_id', category.id) @@ -143,7 +146,6 @@ class CategoryController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -177,7 +179,10 @@ class CategoryController { .join('case_properties', 'case_properties.case_id', 'cases.id') .join('properties', 'properties.id', 'case_properties.property_id') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.category_id', category.id) @@ -211,7 +216,6 @@ class CategoryController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -232,7 +236,10 @@ class CategoryController { let countCases = await Database .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.category_id', category.id) @@ -264,7 +271,6 @@ class CategoryController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -292,7 +298,10 @@ class CategoryController { .distinct('cases.id') .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.category_id', category.id) @@ -324,7 +333,6 @@ class CategoryController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) diff --git a/src/adonisjs/app/Controllers/Http/v1/UserController.js b/src/adonisjs/app/Controllers/Http/v1/UserController.js index cf346cf..d9c5541 100644 --- a/src/adonisjs/app/Controllers/Http/v1/UserController.js +++ b/src/adonisjs/app/Controllers/Http/v1/UserController.js @@ -218,7 +218,10 @@ class UserController { .join('case_properties', 'case_properties.case_id', 'cases.id') .join('properties', 'properties.id', 'case_properties.property_id') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('properties.title', propertyFilter) @@ -251,7 +254,6 @@ class UserController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -289,7 +291,10 @@ class UserController { .join('case_properties', 'case_properties.case_id', 'cases.id') .join('properties', 'properties.id', 'case_properties.property_id') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('properties.title', propertyFilter) @@ -322,7 +327,6 @@ class UserController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -343,7 +347,10 @@ class UserController { let countCases = await Database .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.published', '>=', publishedFilter) @@ -374,7 +381,6 @@ class UserController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) }) @@ -406,7 +412,10 @@ class UserController { .distinct('cases.id') .from('cases') .leftJoin('permissions', 'cases.id', 'permissions.table_id') - .join('users_groups') + .leftJoin('users_groups', function() { + this.on('permissions.subject', '=', 'users_groups.group_id') + .andOn('users_groups.user_id', '=', Database.raw('?', [user.id])); + }) .join('users', 'cases.author_id','users.id') .join('institutions', 'users.institution_id', 'institutions.id') .where('cases.published', '>=', publishedFilter) @@ -437,7 +446,6 @@ class UserController { .orWhere(function() { this .where('permissions.entity', 'group') - .whereRaw('permissions.subject = users_groups.group_id') .where('users_groups.user_id', user.id) }) })