package eu.eudat.controllers; import eu.eudat.audit.AuditableAction; import eu.eudat.authorization.Permission; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.TenantEntity; import eu.eudat.data.TenantEntityManager; import eu.eudat.data.UserEntity; import eu.eudat.integrationevent.outbox.tenantremoval.TenantRemovalIntegrationEventHandler; import eu.eudat.integrationevent.outbox.tenanttouched.TenantTouchedIntegrationEvent; import eu.eudat.integrationevent.outbox.tenanttouched.TenantTouchedIntegrationEventHandler; import eu.eudat.integrationevent.outbox.userremoval.UserRemovalIntegrationEventHandler; import eu.eudat.integrationevent.outbox.usertouched.UserTouchedIntegrationEventHandler; import eu.eudat.query.TenantQuery; import eu.eudat.query.UserQuery; import eu.eudat.service.elastic.ElasticService; import eu.eudat.service.maintenance.MaintenanceService; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.auditing.AuditService; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.management.InvalidApplicationException; import java.util.List; @RestController @RequestMapping(path = "api/maintenance") public class MaintenanceController { private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(MaintenanceController.class)); private final AuthorizationService authorizationService; private final ElasticService elasticService; private final AuditService auditService; private final MaintenanceService maintenanceService; @Autowired public MaintenanceController( AuthorizationService authorizationService, ElasticService elasticService, AuditService auditService, MaintenanceService maintenanceService) { this.authorizationService = authorizationService; this.elasticService = elasticService; this.auditService = auditService; this.maintenanceService = maintenanceService; } @RequestMapping(method = RequestMethod.POST, value = {"/index/elastic"}) public void generateIndex() throws Exception { logger.debug("generate elastic "); this.authorizationService.authorizeForce(Permission.ManageElastic); elasticService.resetDmpIndex(); elasticService.resetDescriptionIndex(); this.auditService.track(AuditableAction.Maintenance_GenerateElastic); } @RequestMapping(method = RequestMethod.DELETE, value = {"/index/elastic"}) public void clearIndex() throws Exception { logger.debug("clear elastic"); this.authorizationService.authorizeForce(Permission.ManageElastic); elasticService.deleteDescriptionIndex(); elasticService.deleteDmpIndex(); this.auditService.track(AuditableAction.Maintenance_ClearElastic); } @RequestMapping(method = RequestMethod.POST, value = {"/events/users/touch"}) public void sendUserTouchEvents() throws InvalidApplicationException { logger.debug("send user touch queue events"); this.authorizationService.authorizeForce(Permission.ManageQueueEvents); this.maintenanceService.sendUserTouchEvents(); this.auditService.track(AuditableAction.Maintenance_SendUserTouchEvents); } @RequestMapping(method = RequestMethod.POST, value = {"/events/tenants/touch"}) public void sendTenantTouchEvents() throws InvalidApplicationException { logger.debug("send tenant touch queue events"); this.authorizationService.authorizeForce(Permission.ManageQueueEvents); this.maintenanceService.sendTenantTouchEvents(); this.auditService.track(AuditableAction.Maintenance_SendTenantTouchEvents); } }