SEBSERV-14 #fix test and impl of all method of UserActivityLogDAO

This commit is contained in:
anhefti 2019-01-10 09:40:28 +01:00
parent 20a9f8e705
commit 87f51aae65
4 changed files with 47 additions and 14 deletions

View file

@ -16,6 +16,7 @@ import java.util.function.Supplier;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.mybatis.dynamic.sql.SqlTable; import org.mybatis.dynamic.sql.SqlTable;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper; 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.Domain;
import ch.ethz.seb.sebserver.gbl.model.Entity; import ch.ethz.seb.sebserver.gbl.model.Entity;
import ch.ethz.seb.sebserver.gbl.model.Page; 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.UserActivityLogRecordDynamicSqlSupport;
import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserRecordDynamicSqlSupport; import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserRecordDynamicSqlSupport;
@Lazy
@Service @Service
@WebServiceProfile
public class PaginationService { public class PaginationService {
private final int defaultPageSize; private final int defaultPageSize;
private final int maxPageSize; private final int maxPageSize;
private final Map<String, Map<String, String>> sortColumnMapping; private final Map<String, Map<String, String>> sortColumnMapping;
private final Map<String, String> defaultSortColumn;
public PaginationService( public PaginationService(
@Value("${sebserver.webservice.api.pagination.defaultPageSize:10}") final int defaultPageSize, @Value("${sebserver.webservice.api.pagination.defaultPageSize:10}") final int defaultPageSize,
@ -41,18 +46,26 @@ public class PaginationService {
this.defaultPageSize = defaultPageSize; this.defaultPageSize = defaultPageSize;
this.maxPageSize = maxPageSize; this.maxPageSize = maxPageSize;
this.sortColumnMapping = new HashMap<>(); this.sortColumnMapping = new HashMap<>();
this.defaultSortColumn = new HashMap<>();
initSortColumnMapping(); 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); 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); 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); setPagination(1, this.maxPageSize, sortBy, sortOrder, table);
} }
@ -104,7 +117,7 @@ public class PaginationService {
private String verifySortColumnName(final String sortBy, final SqlTable table) { private String verifySortColumnName(final String sortBy, final SqlTable table) {
if (StringUtils.isBlank(sortBy)) { if (StringUtils.isBlank(sortBy)) {
return null; return this.defaultSortColumn.get(table.name());
} }
final Map<String, String> mapping = this.sortColumnMapping.get(table.name()); final Map<String, String> mapping = this.sortColumnMapping.get(table.name());
@ -112,7 +125,7 @@ public class PaginationService {
return mapping.get(sortBy); return mapping.get(sortBy);
} }
return null; return this.defaultSortColumn.get(table.name());
} }
// TODO is it possible to generate this within MyBatis generator? // 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_EMAIL, UserRecordDynamicSqlSupport.email.name());
userTableMap.put(Domain.USER.ATTR_LOCALE, UserRecordDynamicSqlSupport.locale.name()); userTableMap.put(Domain.USER.ATTR_LOCALE, UserRecordDynamicSqlSupport.locale.name());
this.sortColumnMapping.put(UserRecordDynamicSqlSupport.userRecord.name(), userTableMap); this.sortColumnMapping.put(UserRecordDynamicSqlSupport.userRecord.name(), userTableMap);
this.defaultSortColumn.put(UserRecordDynamicSqlSupport.userRecord.name(), Domain.USER.ATTR_ID);
// User Activity Log Table // User Activity Log Table
final Map<String, String> userActivityLogTableMap = new HashMap<>(); final Map<String, String> userActivityLogTableMap = new HashMap<>();
@ -145,6 +159,9 @@ public class PaginationService {
this.sortColumnMapping.put( this.sortColumnMapping.put(
UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord.name(), UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord.name(),
userActivityLogTableMap); userActivityLogTableMap);
this.defaultSortColumn.put(
UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord.name(),
Domain.USER_ACTIVITY_LOG.ATTR_ID);
} }

View file

@ -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.UserActivityLogRecordMapper;
import ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.UserRecordDynamicSqlSupport; 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.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.AuthorizationGrantService;
import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.PrivilegeType; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.PrivilegeType;
import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.SEBServerUser; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.SEBServerUser;
@ -46,15 +47,18 @@ public class UserActivityLogDAOImpl implements UserActivityLogDAO {
private final UserActivityLogRecordMapper userLogRecordMapper; private final UserActivityLogRecordMapper userLogRecordMapper;
private final UserService userService; private final UserService userService;
private final AuthorizationGrantService authorizationGrantService; private final AuthorizationGrantService authorizationGrantService;
private final PaginationService paginationService;
public UserActivityLogDAOImpl( public UserActivityLogDAOImpl(
final UserActivityLogRecordMapper userLogRecordMapper, final UserActivityLogRecordMapper userLogRecordMapper,
final UserService userService, final UserService userService,
final AuthorizationGrantService authorizationGrantService) { final AuthorizationGrantService authorizationGrantService,
final PaginationService paginationService) {
this.userLogRecordMapper = userLogRecordMapper; this.userLogRecordMapper = userLogRecordMapper;
this.userService = userService; this.userService = userService;
this.authorizationGrantService = authorizationGrantService; this.authorizationGrantService = authorizationGrantService;
this.paginationService = paginationService;
} }
@Override @Override
@ -236,11 +240,23 @@ public class UserActivityLogDAOImpl implements UserActivityLogDAO {
public Result<Collection<UserActivityLog>> all( public Result<Collection<UserActivityLog>> all(
final Predicate<UserActivityLog> predicate, final Predicate<UserActivityLog> predicate,
final boolean onlyActive) { final boolean onlyActive) {
throw new UnsupportedOperationException("TODO select with limit or paging");
// TODO Auto-generated method stub return Result.tryCatch(() -> {
// https://gist.github.com/jeffgbutler/5df477b4f72f5461a8cc32fb7cf4669b // first check if there is a page limitation set. Otherwise set the default
// or with page helper // to not pollute the memory with log data
// https://github.com/pagehelper/Mybatis-PageHelper this.paginationService.setDefaultLimitOfNotSet(
UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord);
return this.userLogRecordMapper
.selectByExample()
.build()
.execute()
.stream()
.map(UserActivityLogDAOImpl::toDomainModel)
.flatMap(Result::skipOnError)
.filter(predicate)
.collect(Collectors.toList());
});
} }
@Override @Override

View file

@ -81,7 +81,7 @@ public class UserAccountController {
EntityType.USER, EntityType.USER,
PrivilegeType.READ_ONLY); PrivilegeType.READ_ONLY);
this.paginationService.setOnePageLimit(UserRecordDynamicSqlSupport.userRecord); this.paginationService.setDefaultLimit(UserRecordDynamicSqlSupport.userRecord);
return getAll(createUserFilter(institutionId, active, name, username, email, locale)); return getAll(createUserFilter(institutionId, active, name, username, email, locale));
} }

View file

@ -60,7 +60,7 @@ public class UserActivityLogController {
@RequestParam(required = false) final String entityTypes) { @RequestParam(required = false) final String entityTypes) {
checkBaseReadPrivilege(); checkBaseReadPrivilege();
this.paginationService.setOnePageLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); this.paginationService.setDefaultLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord);
return _getAll(null, from, to, activityTypes, entityTypes); return _getAll(null, from, to, activityTypes, entityTypes);
} }
@ -73,7 +73,7 @@ public class UserActivityLogController {
@RequestParam(required = false) final String entityTypes) { @RequestParam(required = false) final String entityTypes) {
checkBaseReadPrivilege(); checkBaseReadPrivilege();
this.paginationService.setOnePageLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord); this.paginationService.setDefaultLimit(UserActivityLogRecordDynamicSqlSupport.userActivityLogRecord);
return _getAll(userId, from, to, activityTypes, entityTypes); return _getAll(userId, from, to, activityTypes, entityTypes);
} }