From 87f51aae65a0355b19f53aecab319e92e0972b2a Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 10 Jan 2019 09:40:28 +0100 Subject: [PATCH] SEBSERV-14 #fix test and impl of all method of UserActivityLogDAO --- .../servicelayer/PaginationService.java | 27 ++++++++++++++---- .../dao/impl/UserActivityLogDAOImpl.java | 28 +++++++++++++++---- .../weblayer/api/UserAccountController.java | 2 +- .../api/UserActivityLogController.java | 4 +-- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/PaginationService.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/PaginationService.java index 6f589710..9880f4fe 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/PaginationService.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/PaginationService.java @@ -16,6 +16,7 @@ import java.util.function.Supplier; import org.apache.commons.lang3.StringUtils; import org.mybatis.dynamic.sql.SqlTable; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import com.github.pagehelper.PageHelper; @@ -23,16 +24,20 @@ import com.github.pagehelper.PageHelper; import ch.ethz.seb.sebserver.gbl.model.Domain; import ch.ethz.seb.sebserver.gbl.model.Entity; import ch.ethz.seb.sebserver.gbl.model.Page; +import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile; import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserActivityLogRecordDynamicSqlSupport; import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserRecordDynamicSqlSupport; +@Lazy @Service +@WebServiceProfile public class PaginationService { private final int defaultPageSize; private final int maxPageSize; private final Map> sortColumnMapping; + private final Map defaultSortColumn; public PaginationService( @Value("${sebserver.webservice.api.pagination.defaultPageSize:10}") final int defaultPageSize, @@ -41,18 +46,26 @@ public class PaginationService { this.defaultPageSize = defaultPageSize; this.maxPageSize = maxPageSize; this.sortColumnMapping = new HashMap<>(); + this.defaultSortColumn = new HashMap<>(); initSortColumnMapping(); } - public void setOnePageLimit(final SqlTable table) { + public void setDefaultLimitOfNotSet(final SqlTable table) { + if (PageHelper.getLocalPage() != null) { + return; + } setPagination(1, this.maxPageSize, null, Page.SortOrder.ASCENDING, table); } - public void setOnePageLimit(final String sortBy, final SqlTable table) { + public void setDefaultLimit(final SqlTable table) { + setPagination(1, this.maxPageSize, null, Page.SortOrder.ASCENDING, table); + } + + public void setDefaultLimit(final String sortBy, final SqlTable table) { setPagination(1, this.maxPageSize, sortBy, Page.SortOrder.ASCENDING, table); } - public void setOnePageLimit(final String sortBy, final Page.SortOrder sortOrder, final SqlTable table) { + public void setDefaultLimit(final String sortBy, final Page.SortOrder sortOrder, final SqlTable table) { setPagination(1, this.maxPageSize, sortBy, sortOrder, table); } @@ -104,7 +117,7 @@ public class PaginationService { private String verifySortColumnName(final String sortBy, final SqlTable table) { if (StringUtils.isBlank(sortBy)) { - return null; + return this.defaultSortColumn.get(table.name()); } final Map mapping = this.sortColumnMapping.get(table.name()); @@ -112,7 +125,7 @@ public class PaginationService { return mapping.get(sortBy); } - return null; + return this.defaultSortColumn.get(table.name()); } // TODO is it possible to generate this within MyBatis generator? @@ -124,6 +137,7 @@ public class PaginationService { userTableMap.put(Domain.USER.ATTR_EMAIL, UserRecordDynamicSqlSupport.email.name()); userTableMap.put(Domain.USER.ATTR_LOCALE, UserRecordDynamicSqlSupport.locale.name()); this.sortColumnMapping.put(UserRecordDynamicSqlSupport.userRecord.name(), userTableMap); + this.defaultSortColumn.put(UserRecordDynamicSqlSupport.userRecord.name(), Domain.USER.ATTR_ID); // User Activity Log Table final Map userActivityLogTableMap = new HashMap<>(); @@ -145,6 +159,9 @@ public class PaginationService { this.sortColumnMapping.put( UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord.name(), userActivityLogTableMap); + this.defaultSortColumn.put( + UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord.name(), + Domain.USER_ACTIVITY_LOG.ATTR_ID); } diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/UserActivityLogDAOImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/UserActivityLogDAOImpl.java index 58d9a098..8069a80a 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/UserActivityLogDAOImpl.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/UserActivityLogDAOImpl.java @@ -30,6 +30,7 @@ import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserActivityLogRe import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserActivityLogRecordMapper; import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserRecordDynamicSqlSupport; import ch.ethz.seb.sebserver.webservice.datalayer.batis.model.UserActivityLogRecord; +import ch.ethz.seb.sebserver.webservice.servicelayer.PaginationService; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.AuthorizationGrantService; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.PrivilegeType; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.SEBServerUser; @@ -46,15 +47,18 @@ public class UserActivityLogDAOImpl implements UserActivityLogDAO { private final UserActivityLogRecordMapper userLogRecordMapper; private final UserService userService; private final AuthorizationGrantService authorizationGrantService; + private final PaginationService paginationService; public UserActivityLogDAOImpl( final UserActivityLogRecordMapper userLogRecordMapper, final UserService userService, - final AuthorizationGrantService authorizationGrantService) { + final AuthorizationGrantService authorizationGrantService, + final PaginationService paginationService) { this.userLogRecordMapper = userLogRecordMapper; this.userService = userService; this.authorizationGrantService = authorizationGrantService; + this.paginationService = paginationService; } @Override @@ -236,11 +240,23 @@ public class UserActivityLogDAOImpl implements UserActivityLogDAO { public Result> all( final Predicate predicate, final boolean onlyActive) { - throw new UnsupportedOperationException("TODO select with limit or paging"); - // TODO Auto-generated method stub - // https://gist.github.com/jeffgbutler/5df477b4f72f5461a8cc32fb7cf4669b - // or with page helper - // https://github.com/pagehelper/Mybatis-PageHelper + + return Result.tryCatch(() -> { + // first check if there is a page limitation set. Otherwise set the default + // to not pollute the memory with log data + this.paginationService.setDefaultLimitOfNotSet( + UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); + + return this.userLogRecordMapper + .selectByExample() + .build() + .execute() + .stream() + .map(UserActivityLogDAOImpl::toDomainModel) + .flatMap(Result::skipOnError) + .filter(predicate) + .collect(Collectors.toList()); + }); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserAccountController.java b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserAccountController.java index c1dd2533..e6a8b35a 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserAccountController.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserAccountController.java @@ -81,7 +81,7 @@ public class UserAccountController { EntityType.USER, PrivilegeType.READ_ONLY); - this.paginationService.setOnePageLimit(UserRecordDynamicSqlSupport.userRecord); + this.paginationService.setDefaultLimit(UserRecordDynamicSqlSupport.userRecord); return getAll(createUserFilter(institutionId, active, name, username, email, locale)); } diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserActivityLogController.java b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserActivityLogController.java index 884b1597..4ad78d54 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserActivityLogController.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/UserActivityLogController.java @@ -60,7 +60,7 @@ public class UserActivityLogController { @RequestParam(required = false) final String entityTypes) { checkBaseReadPrivilege(); - this.paginationService.setOnePageLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); + this.paginationService.setDefaultLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); return _getAll(null, from, to, activityTypes, entityTypes); } @@ -73,7 +73,7 @@ public class UserActivityLogController { @RequestParam(required = false) final String entityTypes) { checkBaseReadPrivilege(); - this.paginationService.setOnePageLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); + this.paginationService.setDefaultLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); return _getAll(userId, from, to, activityTypes, entityTypes); }