SEBSERV-14 #fix test and impl of all method of UserActivityLogDAO
This commit is contained in:
parent
20a9f8e705
commit
87f51aae65
4 changed files with 47 additions and 14 deletions
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue