Skip to content
Snippets Groups Projects
Commit e3e9763b authored by srosse's avatar srosse
Browse files

OO-4281: optimize query to search lectures especially for managers

parent 59c9ea84
No related branches found
No related tags found
No related merge requests found
...@@ -180,9 +180,8 @@ public class LectureBlockDAO { ...@@ -180,9 +180,8 @@ public class LectureBlockDAO {
public List<LectureBlock> searchLectureBlocks(LecturesBlockSearchParameters searchParams) { public List<LectureBlock> searchLectureBlocks(LecturesBlockSearchParameters searchParams) {
QueryBuilder sb = new QueryBuilder(2048); QueryBuilder sb = new QueryBuilder(2048);
sb.append("select distinct block from lectureblock block") sb.append("select distinct block from lectureblock block")
.append(" inner join block.teacherGroup tGroup") .append(" inner join fetch block.entry entry")
.append(" inner join tGroup.members membership") .append(" inner join fetch entry.olatResource oRes");
.append(" inner join fetch block.entry entry");
addSearchParametersToQuery(sb, searchParams); addSearchParametersToQuery(sb, searchParams);
sb.and() sb.and()
.append(" exists (select config.key from lectureentryconfig config") .append(" exists (select config.key from lectureentryconfig config")
...@@ -198,8 +197,6 @@ public class LectureBlockDAO { ...@@ -198,8 +197,6 @@ public class LectureBlockDAO {
public List<LectureBlockRef> searchAssessedLectureBlocks(LecturesBlockSearchParameters searchParams) { public List<LectureBlockRef> searchAssessedLectureBlocks(LecturesBlockSearchParameters searchParams) {
QueryBuilder sb = new QueryBuilder(512); QueryBuilder sb = new QueryBuilder(512);
sb.append("select distinct block.key from lectureblock block") sb.append("select distinct block.key from lectureblock block")
.append(" inner join block.teacherGroup tGroup")
.append(" inner join tGroup.members membership")
.append(" inner join courseassessmentmode mode on (mode.lectureBlock.key=block.key)") .append(" inner join courseassessmentmode mode on (mode.lectureBlock.key=block.key)")
.append(" inner join block.entry entry"); .append(" inner join block.entry entry");
addSearchParametersToQuery(sb, searchParams); addSearchParametersToQuery(sb, searchParams);
...@@ -588,9 +585,9 @@ public class LectureBlockDAO { ...@@ -588,9 +585,9 @@ public class LectureBlockDAO {
} }
if(searchParams.getManager() != null) { if(searchParams.getManager() != null) {
sb.and() sb.and()
.append(" exists (select membership.key from repoentrytogroup as rel, bgroupmember as membership") .append(" exists (select managerMembership.key from repoentrytogroup as rel, bgroupmember as managerMembership")
.append(" where rel.entry.key=entry.key and rel.group.key=membership.group.key and membership.identity.key=:managerKey") .append(" where rel.entry.key=entry.key and rel.group.key=managerMembership.group.key and managerMembership.identity.key=:managerKey")
.append(" and membership.role ").in(OrganisationRoles.administrator, OrganisationRoles.learnresourcemanager, OrganisationRoles.lecturemanager, GroupRoles.owner.name()) .append(" and managerMembership.role ").in(OrganisationRoles.administrator, OrganisationRoles.learnresourcemanager, OrganisationRoles.lecturemanager, GroupRoles.owner.name())
.append(" )"); .append(" )");
} }
if(searchParams.getMasterCoach() != null) { if(searchParams.getMasterCoach() != null) {
...@@ -610,7 +607,7 @@ public class LectureBlockDAO { ...@@ -610,7 +607,7 @@ public class LectureBlockDAO {
if(searchParams.getTeacher() != null) { if(searchParams.getTeacher() != null) {
sb.and() sb.and()
.append(" exists (select teachership.key from bgroupmember teachership where") .append(" exists (select teachership.key from bgroupmember teachership where")
.append(" teachership.group.key=tGroup.key and teachership.identity.key=:teacherKey") .append(" teachership.group.key=block.teacherGroup.key and teachership.identity.key=:teacherKey")
.append(" )"); .append(" )");
} }
} }
......
...@@ -177,7 +177,7 @@ public class LectureBlockDAOTest extends OlatTestCase { ...@@ -177,7 +177,7 @@ public class LectureBlockDAOTest extends OlatTestCase {
} }
@Test @Test
public void searchLectureBlocks() { public void searchLectureBlocks_lectureManager() {
Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1"); Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1");
Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-1"); Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-1");
RepositoryEntry entry = createResourceWithLecturesEnabled(); RepositoryEntry entry = createResourceWithLecturesEnabled();
...@@ -241,6 +241,66 @@ public class LectureBlockDAOTest extends OlatTestCase { ...@@ -241,6 +241,66 @@ public class LectureBlockDAOTest extends OlatTestCase {
Assert.assertTrue(blocks.isEmpty()); Assert.assertTrue(blocks.isEmpty());
} }
@Test
public void searchLectureBlocks_lectureManager_negative() {
Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1");
Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-1");
RepositoryEntry entry = createResourceWithLecturesEnabled();
repositoryEntryRelationDao.addRole(lectureManager, entry, OrganisationRoles.lecturemanager.name());
LectureBlock lectureBlock = lectureBlockDao.createLectureBlock(entry);
lectureBlock.setStartDate(new Date());
lectureBlock.setEndDate(new Date());
lectureBlock.setTitle("Hello lecture manager");
lectureBlock = lectureBlockDao.update(lectureBlock);
lectureService.addTeacher(lectureBlock, teacher);
dbInstance.commitAndCloseSession();
// other course, other lecture manager
Identity otherLectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-alien");
RepositoryEntry otherEntry = createResourceWithLecturesEnabled();
repositoryEntryRelationDao.addRole(otherLectureManager, otherEntry, OrganisationRoles.lecturemanager.name());
dbInstance.commitAndCloseSession();
// first see something
LecturesBlockSearchParameters searchParams = new LecturesBlockSearchParameters();
searchParams.setManager(lectureManager);
List<LectureBlock> blocks = lectureBlockDao.searchLectureBlocks(searchParams);
Assert.assertNotNull(blocks);
Assert.assertEquals(1, blocks.size());
// second not
LecturesBlockSearchParameters otherSearchParams = new LecturesBlockSearchParameters();
otherSearchParams.setManager(otherLectureManager);
List<LectureBlock> otherBlocks = lectureBlockDao.searchLectureBlocks(otherSearchParams);
Assert.assertNotNull(otherBlocks);
Assert.assertTrue(otherBlocks.isEmpty());
}
@Test
public void searchLectureBlocks_lectureManager_organisation() {
Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1");
Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-org");
RepositoryEntry entry = createResourceWithLecturesEnabled();
organisationService.addMember(lectureManager, OrganisationRoles.lecturemanager);
LectureBlock lectureBlock = lectureBlockDao.createLectureBlock(entry);
lectureBlock.setStartDate(new Date());
lectureBlock.setEndDate(new Date());
lectureBlock.setTitle("Hello lecture manager");
lectureBlock = lectureBlockDao.update(lectureBlock);
lectureService.addTeacher(lectureBlock, teacher);
dbInstance.commitAndCloseSession();
// first see something
LecturesBlockSearchParameters searchParams = new LecturesBlockSearchParameters();
searchParams.setManager(lectureManager);
List<LectureBlock> blocks = lectureBlockDao.searchLectureBlocks(searchParams);
Assert.assertNotNull(blocks);
Assert.assertFalse(blocks.isEmpty());
Assert.assertTrue(blocks.contains(lectureBlock));
}
@Test @Test
public void getLectureBlocks_all() { public void getLectureBlocks_all() {
RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment