argos/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeV2Co...

123 lines
5.9 KiB
Java

package eu.eudat.controllers.v2;
import eu.eudat.audit.AuditableAction;
import eu.eudat.logic.security.claims.ClaimedAuthorities;
import eu.eudat.model.DescriptionTemplateType;
import eu.eudat.model.censorship.DescriptionTemplateTypeCensor;
import eu.eudat.model.result.QueryResult;
import eu.eudat.models.data.security.Principal;
import eu.eudat.query.lookup.DescriptionTemplateTypeLookup;
import eu.eudat.service.DescriptionTemplateTypeService;
import eu.eudat.types.Authorities;
import gr.cite.tools.auditing.AuditService;
import gr.cite.tools.data.censor.CensorFactory;
import gr.cite.tools.exception.MyNotFoundException;
import gr.cite.tools.fieldset.FieldSet;
import gr.cite.tools.logging.LoggerService;
import gr.cite.tools.logging.MapLogEntry;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.AbstractMap;
import java.util.Map;
import java.util.UUID;
import static eu.eudat.controllers.v2.BaseController.extractQueryResultWithCount;
@RestController
@CrossOrigin
@Transactional
@RequestMapping(path = "api/v2/descriptionTemplateType", produces = MediaType.APPLICATION_JSON_VALUE)
public class DescriptionTemplateTypeV2Controller {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DescriptionTemplateTypeV2Controller.class));
private final AuditService auditService;
private final DescriptionTemplateTypeService descriptionTemplateTypeService;
private final MessageSource messageSource;
private final CensorFactory censorFactory;
public DescriptionTemplateTypeV2Controller(AuditService auditService, DescriptionTemplateTypeService descriptionTemplateTypeService, MessageSource messageSource, CensorFactory censorFactory) {
this.auditService = auditService;
this.descriptionTemplateTypeService = descriptionTemplateTypeService;
this.messageSource = messageSource;
this.censorFactory = censorFactory;
}
@PostMapping("query")
public QueryResult<DescriptionTemplateType> query(@RequestBody DescriptionTemplateTypeLookup lookup, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal ignoredPrincipal) {
logger.debug("querying {}", DescriptionTemplateType.class.getSimpleName());
censorFactory.censor(DescriptionTemplateTypeCensor.class).censor(lookup.getProject());
auditService.track(AuditableAction.DescriptionTemplateType_Query, "lookup", lookup);
return extractQueryResultWithCount(descriptionTemplateTypeService::query, lookup);
}
@GetMapping("{id}")
public QueryResult<DescriptionTemplateType> get(@PathVariable("id") UUID id, FieldSet fieldSet, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal ignoredPrincipal) {
logger.debug(new MapLogEntry("retrieving" + DescriptionTemplateType.class.getSimpleName()).And("id", id));
censorFactory.censor(DescriptionTemplateTypeCensor.class).censor(fieldSet);
DescriptionTemplateType model = descriptionTemplateTypeService.get(id);
if (model == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplateType.class.getSimpleName()}, LocaleContextHolder.getLocale()));
auditService.track(AuditableAction.DescriptionTemplateType_Query, "id", id);
return new QueryResult<>(model);
}
@PostMapping("persist")
public QueryResult<DescriptionTemplateType> persist(@RequestBody DescriptionTemplateType payload, FieldSet fieldSet, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal ignoredPrincipal) {
logger.debug(new MapLogEntry("persisting" + DescriptionTemplateType.class.getSimpleName()).And("model", payload).And("fieldSet", fieldSet));
DescriptionTemplateType persisted = descriptionTemplateTypeService.persist(payload);
auditService.track(AuditableAction.DescriptionTemplateType_Persist, Map.ofEntries(
new AbstractMap.SimpleEntry<String, Object>("model", payload),
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
));
return new QueryResult<>(persisted);
}
@PostMapping("update")
public QueryResult<DescriptionTemplateType> update(@RequestBody DescriptionTemplateType payload, FieldSet fieldSet, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal ignoredPrincipal) {
logger.debug(new MapLogEntry("persisting" + DescriptionTemplateType.class.getSimpleName()).And("model", payload).And("fieldSet", fieldSet));
DescriptionTemplateType persisted = descriptionTemplateTypeService.update(payload);
auditService.track(AuditableAction.DescriptionTemplateType_Persist, Map.ofEntries(
new AbstractMap.SimpleEntry<String, Object>("model", payload),
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
));
return new QueryResult<>(persisted);
}
@DeleteMapping("delete/{id}")
public ResponseEntity<?> delete(@PathVariable(value = "id") UUID id, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal ignoredPrincipal) {
logger.debug(new MapLogEntry("deleting" + DescriptionTemplateType.class.getSimpleName()).And("id", id));
auditService.track(AuditableAction.DescriptionTemplateType_Delete, "delete", id);
if (descriptionTemplateTypeService.delete(id))
return ResponseEntity.status(HttpStatus.OK).build();
else
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
}