Skip to content
Snippets Groups Projects

New endpoint allowing to display all publications belonging to structures that can be validated by the current user

1 unresolved thread
Files
8
package ch.unige.aou.controller.admin;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ch.unige.aou.business.AouResourceService;
import ch.unige.aou.business.PersonService;
import ch.unige.aou.controller.AdminController;
import ch.unige.aou.model.publication.Publication;
import ch.unige.aou.rest.AouActionName;
import ch.unige.aou.rest.UrlPath;
import ch.unige.aou.specification.AouSpecification;
import ch.unige.aou.specification.JoinedTableInValues;
import ch.unige.solidify.SolidifyConstants;
import ch.unige.solidify.controller.ResourceController;
import ch.unige.solidify.rest.Collection;
import ch.unige.solidify.security.UserPermissions;
@UserPermissions
@@ -21,6 +37,12 @@ import ch.unige.solidify.security.UserPermissions;
@RequestMapping(UrlPath.ADMIN_PUBLICATIONS)
public class PublicationController extends ResourceController<Publication> {
private PersonService personService;
public PublicationController(PersonService personService) {
this.personService = personService;
}
@Override
public HttpEntity<Publication> create(@RequestBody Publication publication) {
return super.create(publication);
@@ -41,4 +63,20 @@ public class PublicationController extends ResourceController<Publication> {
return super.update(id, publication);
}
@GetMapping(AouActionName.LIST_PUBLICATIONS_IN_VALIDATOR_STRUCTURES)
public HttpEntity<Collection<Publication>> listPublicationsInValidatorStructures(@ModelAttribute Publication search, Pageable pageable) {
final AouSpecification<Publication> spec = ((AouResourceService) this.itemService).getSpecification(search);
String authenticatedPersonId = this.personService.getLinkedPersonId(SecurityContextHolder.getContext().getAuthentication());
List<String> validatorStructureIds = this.personService.getValidatorStructureIds(authenticatedPersonId);
List<Object> structureIds = validatorStructureIds.stream().collect(Collectors.toList());
JoinedTableInValues structureResIdValues = new JoinedTableInValues("structures", SolidifyConstants.DB_RES_ID, structureIds);
spec.addJoinTableInValues(structureResIdValues);
final Page<Publication> listItem = this.itemService.findAll(spec, pageable);
this.setRessourceLinks(listItem);
final Collection<Publication> collection = this.setCollectionLinks(listItem, pageable);
return new ResponseEntity<>(collection, HttpStatus.OK);
}
}
Loading