dossier status count

This commit is contained in:
Timo Bejan 2022-03-11 11:26:28 +02:00
parent 762009bc4f
commit f998dd28d3
9 changed files with 125 additions and 5 deletions

View File

@ -37,5 +37,6 @@ public class Dossier {
private OffsetDateTime archivedTime;
private String dossierTemplateId;
private String dossierStatusId;
private DossierVisibility visibility;
}

View File

@ -0,0 +1,6 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier;
public enum DossierVisibility {
PRIVATE, PUBLIC;
}

View File

@ -11,7 +11,6 @@ import java.util.List;
public interface DossierStatusResource {
String DOSSIER_STATUS_PATH = "/dossier-status";
String DOSSIER_TEMPLATE_PATH = "/dossier-template";
String DOSSIER_TEMPLATE_ID = "dossierTemplateId";
@ -22,6 +21,7 @@ public interface DossierStatusResource {
String DOSSIER_STATUS_REPLACE_ID = "replaceDossierStatusId";
@ResponseBody
@ResponseStatus(HttpStatus.ACCEPTED)
@PostMapping(value = DOSSIER_STATUS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
@ -32,6 +32,12 @@ public interface DossierStatusResource {
@GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
List<DossierStatusInfo> getAllDossierStatusForTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId);
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@PostMapping(value = DOSSIER_STATUS_PATH + DOSSIER_TEMPLATE_PATH, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
List<DossierStatusInfo> getAllDossierStatuses(@RequestBody List<String> dossierTemplateId);
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownl
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStringSetConverter;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierVisibility;
import lombok.*;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@ -84,6 +85,10 @@ public class DossierEntity {
@Column
private OffsetDateTime dueDate;
@Column
@Enumerated(EnumType.STRING)
private DossierVisibility visibility;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
private DossierTemplateEntity dossierTemplate;

View File

@ -13,6 +13,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@ -56,7 +57,11 @@ public class DossierStatusPersistenceService {
}
public List<DossierStatusInfo> getAllDossierStatusForTemplate(String dossierTemplateId) {
return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId);
return dossierStatusRepository.getAllDossierStatusForDossierTemplate(Collections.singletonList(dossierTemplateId));
}
public List<DossierStatusInfo> getAllDossierStatuses(List<String> dossierTemplateIds) {
return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateIds);
}
public DossierStatusInfo getDossierStatusInfo(String dossierStatusId) {

View File

@ -11,8 +11,8 @@ import java.util.Optional;
public interface DossierStatusRepository extends JpaRepository<DossierStatusEntity, String> {
@Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo(s.id, s.name," +
"s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.dossierTemplateId = :dossierTemplateId group by s")
List<DossierStatusInfo> getAllDossierStatusForDossierTemplate(String dossierTemplateId);
"s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.dossierTemplateId in ( :dossierTemplateIds ) group by s")
List<DossierStatusInfo> getAllDossierStatusForDossierTemplate(List<String> dossierTemplateId);
@Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo(s.id, s.name," +
"s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.id = :dossierStatusId group by s")

View File

@ -0,0 +1,80 @@
package com.iqser.red.service.peristence.v1.server.acl;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.acls.AclPermissionEvaluator;
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
import org.springframework.security.acls.domain.ConsoleAuditLogger;
import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy;
import org.springframework.security.acls.domain.SpringCacheBasedAclCache;
import org.springframework.security.acls.jdbc.BasicLookupStrategy;
import org.springframework.security.acls.jdbc.JdbcMutableAclService;
import org.springframework.security.acls.jdbc.LookupStrategy;
import org.springframework.security.acls.model.PermissionGrantingStrategy;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
import javax.sql.DataSource;
@Configuration
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class AclMethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
private final MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler;
private final DataSource dataSource;
@Bean
public AclAuthorizationStrategy aclAuthorizationStrategy() {
return (acl, changeType) -> {
// no-op
};
}
@Bean
public PermissionGrantingStrategy permissionGrantingStrategy() {
return new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger());
}
@Bean
public SpringCacheBasedAclCache aclCache() {
return new SpringCacheBasedAclCache(new ConcurrentMapCache("acl"),
permissionGrantingStrategy(),
aclAuthorizationStrategy()
);
}
@Bean
public LookupStrategy lookupStrategy() {
return new BasicLookupStrategy(
dataSource,
aclCache(),
aclAuthorizationStrategy(),
new ConsoleAuditLogger()
);
}
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return defaultMethodSecurityExpressionHandler;
}
@Bean
public MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
AclPermissionEvaluator permissionEvaluator = new AclPermissionEvaluator(aclService());
expressionHandler.setPermissionEvaluator(permissionEvaluator);
return expressionHandler;
}
@Bean
public JdbcMutableAclService aclService() {
return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
}
}

View File

@ -7,6 +7,7 @@ import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusR
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@ -34,8 +35,12 @@ public class DossierStatusController implements DossierStatusResource {
}
@Override
public DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId) {
public List<DossierStatusInfo> getAllDossierStatuses(@RequestBody List<String> dossierTemplateIds) {
return convert(dossierStatusPersistenceService.getAllDossierStatuses(dossierTemplateIds), DossierStatusInfo.class);
}
@Override
public DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId) {
return dossierStatusPersistenceService.getDossierStatusInfo(dossierStatusId);
}

View File

@ -0,0 +1,12 @@
databaseChangeLog:
- changeSet:
id: add-dossier-visibility-column
author: timo
changes:
- addColumn:
columns:
- column:
name: visbility
type: VARCHAR(40)
defaultValue: PUBLIC
tableName: dossier