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.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<String, Map<String, String>> sortColumnMapping;
private final Map<String, String> 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<String, String> 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<String, String> 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);
}

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.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<Collection<UserActivityLog>> all(
final Predicate<UserActivityLog> 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

View file

@ -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));
}

View file

@ -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);
}