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.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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue