Cleanup around Hooks and Hook templates

This commit is contained in:
Arnold Galovics
2022-05-17 23:58:12 +02:00
committed by Aleksandar Vidakovic
parent 2bb6445b4b
commit 073b1b04b6
23 changed files with 89 additions and 321 deletions
@@ -24,9 +24,7 @@ import java.util.Set;
public final class HookApiConstants { public final class HookApiConstants {
private HookApiConstants() { private HookApiConstants() {}
}
public static final String HOOK_RESOURCE_NAME = "HOOK"; public static final String HOOK_RESOURCE_NAME = "HOOK";
@@ -72,10 +70,10 @@ public final class HookApiConstants {
public static final String SMSProviderIdParamName = "SMS Provider Id"; public static final String SMSProviderIdParamName = "SMS Provider Id";
static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList(nameParamName, displayNameParamName, public static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList(nameParamName, displayNameParamName,
templateIdParamName, isActiveParamName, configParamName, eventsParamName, templateNameParamName)); templateIdParamName, isActiveParamName, configParamName, eventsParamName, templateNameParamName));
static final Set<String> UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(nameParamName, displayNameParamName, public static final Set<String> UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(nameParamName, displayNameParamName,
templateIdParamName, isActiveParamName, configParamName, eventsParamName, templateNameParamName)); templateIdParamName, isActiveParamName, configParamName, eventsParamName, templateNameParamName));
} }
@@ -42,6 +42,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -52,16 +53,14 @@ import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSer
import org.apache.fineract.infrastructure.hooks.data.HookData; import org.apache.fineract.infrastructure.hooks.data.HookData;
import org.apache.fineract.infrastructure.hooks.service.HookReadPlatformService; import org.apache.fineract.infrastructure.hooks.service.HookReadPlatformService;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Path("/hooks") @Path("/hooks")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
@Component @Component
@Scope("singleton")
@Tag(name = "Hooks", description = "Hooks are a mechanism to trigger custom code on the occurence of events. ") @Tag(name = "Hooks", description = "Hooks are a mechanism to trigger custom code on the occurence of events. ")
@RequiredArgsConstructor
public class HookApiResource { public class HookApiResource {
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
@@ -70,17 +69,6 @@ public class HookApiResource {
private final ApiRequestParameterHelper apiRequestParameterHelper; private final ApiRequestParameterHelper apiRequestParameterHelper;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@Autowired
public HookApiResource(final PlatformSecurityContext context, final HookReadPlatformService readPlatformService,
final DefaultToApiJsonSerializer<HookData> toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
this.context = context;
this.readPlatformService = readPlatformService;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
}
@GET @GET
@Operation(summary = "Retrieve Hooks", description = "Returns the list of hooks.\n" + "\n" + "Example Requests:\n" + "\n" + "hooks") @Operation(summary = "Retrieve Hooks", description = "Returns the list of hooks.\n" + "\n" + "Example Requests:\n" + "\n" + "hooks")
@ApiResponses({ @ApiResponses({
@@ -20,24 +20,12 @@ package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import lombok.Data;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@Data
public class Entity implements Serializable { public class Entity implements Serializable {
private String name; private String name;
private List<String> actions; private List<String> actions;
public void setName(final String name) {
this.name = name;
}
public void setActions(final List<String> actions) {
this.actions = actions;
}
public String getName() {
return this.name;
}
} }
@@ -19,7 +19,12 @@
package org.apache.fineract.infrastructure.hooks.data; package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public final class Event implements Serializable { public final class Event implements Serializable {
private final String actionName; private final String actionName;
@@ -28,18 +33,4 @@ public final class Event implements Serializable {
public static Event instance(final String actionName, final String entityName) { public static Event instance(final String actionName, final String entityName) {
return new Event(actionName, entityName); return new Event(actionName, entityName);
} }
private Event(final String actionName, final String entityName) {
this.actionName = actionName;
this.entityName = entityName;
}
public String getActionName() {
return this.actionName;
}
public String getEntityName() {
return this.entityName;
}
} }
@@ -67,35 +67,20 @@ public class EventResultSetExtractor implements ResultSetExtractor<List<Grouping
final Grouping group = new Grouping(); final Grouping group = new Grouping();
group.setName(groupingEntry.getKey()); group.setName(groupingEntry.getKey());
for (final Map.Entry<String, List<String>> entityEntry : groupingEntry.getValue().entrySet()) { for (final Map.Entry<String, List<String>> entityEntry : groupingEntry.getValue().entrySet()) {
final List<String> actions = new ArrayList<>();
final Entity entity = new Entity(); final Entity entity = new Entity();
entity.setName(entityEntry.getKey()); entity.setName(entityEntry.getKey());
for (final String action : entityEntry.getValue()) { final List<String> actions = new ArrayList<>(entityEntry.getValue());
actions.add(action);
}
Collections.sort(actions); Collections.sort(actions);
entity.setActions(actions); entity.setActions(actions);
entities.add(entity); entities.add(entity);
} }
Collections.sort(entities, new Comparator<Entity>() { entities.sort(Comparator.comparing(Entity::getName));
@Override
public int compare(final Entity entity1, final Entity entity2) {
return entity1.getName().compareTo(entity2.getName());
}
});
group.setEntities(entities); group.setEntities(entities);
groupings.add(group); groupings.add(group);
} }
Collections.sort(groupings, new Comparator<Grouping>() { groupings.sort(Comparator.comparing(Grouping::getName));
@Override
public int compare(final Grouping grouping1, final Grouping grouping2) {
return grouping1.getName().compareTo(grouping2.getName());
}
});
return groupings; return groupings;
} }
@@ -19,8 +19,13 @@
package org.apache.fineract.infrastructure.hooks.data; package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public final class Field implements Serializable { public final class Field implements Serializable {
private final String fieldName; private final String fieldName;
@@ -30,32 +35,10 @@ public final class Field implements Serializable {
private final String placeholder; private final String placeholder;
public static Field fromConfig(final String fieldName, final String fieldValue) { public static Field fromConfig(final String fieldName, final String fieldValue) {
return new Field(null, fieldName, fieldValue, null, null); return new Field(fieldName, fieldValue, null, null, null);
} }
public static Field fromSchema(final String fieldType, final String fieldName, final Boolean optional, final String placeholder) { public static Field fromSchema(final String fieldType, final String fieldName, final Boolean optional, final String placeholder) {
return new Field(fieldType, fieldName, null, optional, placeholder); return new Field(fieldName, null, fieldType, optional, placeholder);
} }
private Field(final String fieldType, final String fieldName, final String fieldValue, final Boolean optional,
final String placeholder) {
this.fieldType = fieldType;
this.fieldName = fieldName;
this.fieldValue = fieldValue;
this.optional = optional;
this.placeholder = placeholder;
}
public String getFieldName() {
return this.fieldName;
}
public String getFieldValue() {
return this.fieldValue;
}
public String getFieldType() {
return this.fieldType;
}
} }
@@ -20,24 +20,12 @@ package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import lombok.Data;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@Data
public class Grouping implements Serializable { public class Grouping implements Serializable {
private String name; private String name;
private List<Entity> entities; private List<Entity> entities;
public void setName(final String name) {
this.name = name;
}
public void setEntities(final List<Entity> entities) {
this.entities = entities;
}
public String getName() {
return this.name;
}
} }
@@ -21,7 +21,12 @@ package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public final class HookData implements Serializable { public final class HookData implements Serializable {
private final Long id; private final Long id;
@@ -44,7 +49,7 @@ public final class HookData implements Serializable {
public static HookData instance(final Long id, final String name, final String displayName, final boolean isActive, public static HookData instance(final Long id, final String name, final String displayName, final boolean isActive,
final LocalDate createdAt, final LocalDate updatedAt, final Long templateId, final List<Event> registeredEvents, final LocalDate createdAt, final LocalDate updatedAt, final Long templateId, final List<Event> registeredEvents,
final List<Field> config, final String templateName) { final List<Field> config, final String templateName) {
return new HookData(id, name, displayName, isActive, createdAt, updatedAt, templateId, registeredEvents, config, templateName, null, return new HookData(id, name, displayName, isActive, createdAt, updatedAt, templateId, templateName, registeredEvents, config, null,
null); null);
} }
@@ -55,45 +60,6 @@ public final class HookData implements Serializable {
public static HookData templateExisting(final HookData hookData, final List<HookTemplateData> templates, public static HookData templateExisting(final HookData hookData, final List<HookTemplateData> templates,
final List<Grouping> groupings) { final List<Grouping> groupings) {
return new HookData(hookData.id, hookData.name, hookData.displayName, hookData.isActive, hookData.createdAt, hookData.updatedAt, return new HookData(hookData.id, hookData.name, hookData.displayName, hookData.isActive, hookData.createdAt, hookData.updatedAt,
hookData.templateId, hookData.events, hookData.config, hookData.templateName, templates, groupings); hookData.templateId, hookData.templateName, hookData.events, hookData.config, templates, groupings);
} }
private HookData(final Long id, final String name, final String displayName, final Boolean isActive, final LocalDate createdAt,
final LocalDate updatedAt, final Long templateId, final List<Event> events, final List<Field> config, final String templateName,
final List<HookTemplateData> templates, final List<Grouping> groupings) {
this.id = id;
this.name = name;
this.displayName = displayName;
this.isActive = isActive;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.templateId = templateId;
this.templateName = templateName;
// associations
this.events = events;
this.config = config;
// template
this.templates = templates;
this.groupings = groupings;
}
public Long getHookId() {
return this.id;
}
public List<HookTemplateData> getTemplates() {
return this.templates;
}
public List<Grouping> getGroupings() {
return this.groupings;
}
public String getTemplateName() {
return this.templateName;
}
} }
@@ -20,8 +20,11 @@ package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public final class HookTemplateData implements Serializable { public final class HookTemplateData implements Serializable {
private final Long id; private final Long id;
@@ -34,16 +37,8 @@ public final class HookTemplateData implements Serializable {
return new HookTemplateData(id, name, schema); return new HookTemplateData(id, name, schema);
} }
private HookTemplateData(final Long id, final String name, final List<Field> schema) {
this.id = id;
this.name = name;
// associations
this.schema = schema;
}
public Long getServiceId() { public Long getServiceId() {
return this.id; return id;
} }
} }
@@ -68,9 +68,7 @@ public class Hook extends AbstractAuditableCustom {
@JoinColumn(name = "ugd_template_id", referencedColumnName = "id", nullable = true) @JoinColumn(name = "ugd_template_id", referencedColumnName = "id", nullable = true)
private Template ugdTemplate; private Template ugdTemplate;
protected Hook() { protected Hook() {}
//
}
public static Hook fromJson(final JsonCommand command, final HookTemplate template, final Set<HookConfiguration> config, public static Hook fromJson(final JsonCommand command, final HookTemplate template, final Set<HookConfiguration> config,
final Set<HookResource> events, final Template ugdTemplate) { final Set<HookResource> events, final Template ugdTemplate) {
@@ -19,25 +19,13 @@
package org.apache.fineract.infrastructure.hooks.event; package org.apache.fineract.infrastructure.hooks.event;
import java.io.Serializable; import java.io.Serializable;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
public class HookEventSource implements Serializable { public class HookEventSource implements Serializable {
private final String entityName; private final String entityName;
private final String actionName; private final String actionName;
public HookEventSource(final String entityName, final String actionName) {
this.entityName = entityName;
this.actionName = actionName;
}
public String getEntityName() {
return this.entityName;
}
public String getActionName() {
return this.actionName;
}
} }
@@ -18,30 +18,25 @@
*/ */
package org.apache.fineract.infrastructure.hooks.handler; package org.apache.fineract.infrastructure.hooks.handler;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.commands.annotation.CommandType; import org.apache.fineract.commands.annotation.CommandType;
import org.apache.fineract.commands.handler.NewCommandSourceHandler; import org.apache.fineract.commands.handler.NewCommandSourceHandler;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService; import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Service @Service
@CommandType(entity = "HOOK", action = "CREATE") @CommandType(entity = "HOOK", action = "CREATE")
@RequiredArgsConstructor
public class CreateHookCommandHandler implements NewCommandSourceHandler { public class CreateHookCommandHandler implements NewCommandSourceHandler {
private final HookWritePlatformService writePlatformService; private final HookWritePlatformService writePlatformService;
@Autowired
public CreateHookCommandHandler(final HookWritePlatformService writePlatformService) {
this.writePlatformService = writePlatformService;
}
@Transactional @Transactional
@Override @Override
public CommandProcessingResult processCommand(final JsonCommand command) { public CommandProcessingResult processCommand(final JsonCommand command) {
return this.writePlatformService.createHook(command); return this.writePlatformService.createHook(command);
} }
@@ -18,31 +18,25 @@
*/ */
package org.apache.fineract.infrastructure.hooks.handler; package org.apache.fineract.infrastructure.hooks.handler;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.commands.annotation.CommandType; import org.apache.fineract.commands.annotation.CommandType;
import org.apache.fineract.commands.handler.NewCommandSourceHandler; import org.apache.fineract.commands.handler.NewCommandSourceHandler;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService; import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Service @Service
@CommandType(entity = "HOOK", action = "DELETE") @CommandType(entity = "HOOK", action = "DELETE")
@RequiredArgsConstructor
public class DeleteHookCommandHandler implements NewCommandSourceHandler { public class DeleteHookCommandHandler implements NewCommandSourceHandler {
private final HookWritePlatformService writePlatformService; private final HookWritePlatformService writePlatformService;
@Autowired
public DeleteHookCommandHandler(final HookWritePlatformService writePlatformService) {
this.writePlatformService = writePlatformService;
}
@Transactional @Transactional
@Override @Override
public CommandProcessingResult processCommand(final JsonCommand command) { public CommandProcessingResult processCommand(final JsonCommand command) {
return this.writePlatformService.deleteHook(command.entityId()); return this.writePlatformService.deleteHook(command.entityId());
} }
} }
@@ -18,31 +18,25 @@
*/ */
package org.apache.fineract.infrastructure.hooks.handler; package org.apache.fineract.infrastructure.hooks.handler;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.commands.annotation.CommandType; import org.apache.fineract.commands.annotation.CommandType;
import org.apache.fineract.commands.handler.NewCommandSourceHandler; import org.apache.fineract.commands.handler.NewCommandSourceHandler;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService; import org.apache.fineract.infrastructure.hooks.service.HookWritePlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Service @Service
@CommandType(entity = "HOOK", action = "UPDATE") @CommandType(entity = "HOOK", action = "UPDATE")
@RequiredArgsConstructor
public class UpdateHookCommandHandler implements NewCommandSourceHandler { public class UpdateHookCommandHandler implements NewCommandSourceHandler {
private final HookWritePlatformService writePlatformService; private final HookWritePlatformService writePlatformService;
@Autowired
public UpdateHookCommandHandler(final HookWritePlatformService writePlatformService) {
this.writePlatformService = writePlatformService;
}
@Transactional @Transactional
@Override @Override
public CommandProcessingResult processCommand(final JsonCommand command) { public CommandProcessingResult processCommand(final JsonCommand command) {
return this.writePlatformService.updateHook(command.entityId(), command); return this.writePlatformService.updateHook(command.entityId(), command);
} }
} }
@@ -19,6 +19,8 @@
package org.apache.fineract.infrastructure.hooks.listener; package org.apache.fineract.infrastructure.hooks.listener;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant; import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.Hook;
@@ -29,28 +31,17 @@ import org.apache.fineract.infrastructure.hooks.processor.HookProcessorProvider;
import org.apache.fineract.infrastructure.hooks.service.HookReadPlatformService; import org.apache.fineract.infrastructure.hooks.service.HookReadPlatformService;
import org.apache.fineract.infrastructure.security.service.TenantDetailsService; import org.apache.fineract.infrastructure.security.service.TenantDetailsService;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@RequiredArgsConstructor
@Slf4j
public class FineractHookListener implements HookListener { public class FineractHookListener implements HookListener {
private static final Logger LOG = LoggerFactory.getLogger(FineractHookListener.class);
private final HookProcessorProvider hookProcessorProvider; private final HookProcessorProvider hookProcessorProvider;
private final HookReadPlatformService hookReadPlatformService; private final HookReadPlatformService hookReadPlatformService;
private final TenantDetailsService tenantDetailsService; private final TenantDetailsService tenantDetailsService;
@Autowired
public FineractHookListener(final HookProcessorProvider hookProcessorProvider, final HookReadPlatformService hookReadPlatformService,
final TenantDetailsService tenantDetailsService) {
this.hookReadPlatformService = hookReadPlatformService;
this.hookProcessorProvider = hookProcessorProvider;
this.tenantDetailsService = tenantDetailsService;
}
@Override @Override
public void onApplicationEvent(final HookEvent event) { public void onApplicationEvent(final HookEvent event) {
final String tenantIdentifier = event.getTenantIdentifier(); final String tenantIdentifier = event.getTenantIdentifier();
@@ -73,7 +64,7 @@ public class FineractHookListener implements HookListener {
try { try {
processor.process(hook, appUser, payload, entityName, actionName, tenantIdentifier, authToken); processor.process(hook, appUser, payload, entityName, actionName, tenantIdentifier, authToken);
} catch (Throwable e) { } catch (Throwable e) {
LOG.error("Hook {} failed in HookProcessor {} for tenantIdentifier/user {}/{}, entityName: {}, actionName: {}, payload {} ", log.error("Hook {} failed in HookProcessor {} for tenantIdentifier/user {}/{}, entityName: {}, actionName: {}, payload {} ",
hook.getId(), processor.getClass().getSimpleName(), tenantIdentifier, appUser, entityName, actionName, payload, e); hook.getId(), processor.getClass().getSimpleName(), tenantIdentifier, appUser, entityName, actionName, payload, e);
} }
} }
@@ -26,18 +26,18 @@ import com.google.gson.JsonObject;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration; import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import retrofit2.Callback; import retrofit2.Callback;
@Service @Service
@RequiredArgsConstructor
public class ElasticSearchHookProcessor implements HookProcessor { public class ElasticSearchHookProcessor implements HookProcessor {
@Autowired private final ProcessorHelper processorHelper;
private ProcessorHelper processorHelper;
@Override @Override
public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName, public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName,
@@ -28,6 +28,8 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException;
import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration; import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration;
@@ -40,16 +42,13 @@ import org.apache.fineract.template.domain.Template;
import org.apache.fineract.template.domain.TemplateRepository; import org.apache.fineract.template.domain.TemplateRepository;
import org.apache.fineract.template.service.TemplateMergeService; import org.apache.fineract.template.service.TemplateMergeService;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@Slf4j
@RequiredArgsConstructor
public class MessageGatewayHookProcessor implements HookProcessor { public class MessageGatewayHookProcessor implements HookProcessor {
private static final Logger LOG = LoggerFactory.getLogger(MessageGatewayHookProcessor.class);
private final ClientRepositoryWrapper clientRepository; private final ClientRepositoryWrapper clientRepository;
private final TemplateRepository templateRepository; private final TemplateRepository templateRepository;
private final TemplateMergeService templateMergeService; private final TemplateMergeService templateMergeService;
@@ -57,17 +56,6 @@ public class MessageGatewayHookProcessor implements HookProcessor {
private final SmsMessageRepository smsMessageRepository; private final SmsMessageRepository smsMessageRepository;
private final SmsMessageScheduledJobService smsMessageScheduledJobService; private final SmsMessageScheduledJobService smsMessageScheduledJobService;
@Autowired
public MessageGatewayHookProcessor(ClientRepositoryWrapper clientRepository, TemplateRepository templateRepository,
TemplateMergeService templateMergeService, SmsMessageRepository smsMessageRepository,
SmsMessageScheduledJobService smsMessageScheduledJobService) {
this.clientRepository = clientRepository;
this.templateRepository = templateRepository;
this.templateMergeService = templateMergeService;
this.smsMessageRepository = smsMessageRepository;
this.smsMessageScheduledJobService = smsMessageScheduledJobService;
}
@Override @Override
public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName, public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName,
final String actionName, final String tenantIdentifier, final String authToken) throws IOException { final String actionName, final String tenantIdentifier, final String authToken) throws IOException {
@@ -95,7 +83,7 @@ public class MessageGatewayHookProcessor implements HookProcessor {
template = templates.get(0); template = templates.get(0);
} }
if (template == null) { if (template == null) {
LOG.error("Error : {} with name {}", "Template not found", templateName); log.error("Error : {} with name {}", "Template not found", templateName);
throw new GeneralPlatformDomainRuleException("error.msg.templates.not.found", "Template not found", templateName); throw new GeneralPlatformDomainRuleException("error.msg.templates.not.found", "Template not found", templateName);
} }
@@ -29,6 +29,7 @@ import com.google.gson.JsonParser;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration; import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration;
import org.apache.fineract.infrastructure.hooks.domain.HookConfigurationRepository; import org.apache.fineract.infrastructure.hooks.domain.HookConfigurationRepository;
@@ -37,11 +38,11 @@ import org.apache.fineract.portfolio.client.domain.Client;
import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper; import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
import org.apache.fineract.template.service.TemplateMergeService; import org.apache.fineract.template.service.TemplateMergeService;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import retrofit2.Callback; import retrofit2.Callback;
@Service @Service
@RequiredArgsConstructor
public class TwilioHookProcessor implements HookProcessor { public class TwilioHookProcessor implements HookProcessor {
private final HookConfigurationRepository hookConfigurationRepository; private final HookConfigurationRepository hookConfigurationRepository;
@@ -49,16 +50,6 @@ public class TwilioHookProcessor implements HookProcessor {
private final ClientRepositoryWrapper clientRepositoryWrapper; private final ClientRepositoryWrapper clientRepositoryWrapper;
private final ProcessorHelper processorHelper; private final ProcessorHelper processorHelper;
@Autowired
public TwilioHookProcessor(final HookConfigurationRepository hookConfigurationRepository,
final TemplateMergeService templateMergeService, final ClientRepositoryWrapper clientRepositoryWrapper,
ProcessorHelper processorHelper) {
this.hookConfigurationRepository = hookConfigurationRepository;
this.templateMergeService = templateMergeService;
this.clientRepositoryWrapper = clientRepositoryWrapper;
this.processorHelper = processorHelper;
}
@Override @Override
public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName, public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName,
final String actionName, final String tenantIdentifier, final String authToken) throws IOException { final String actionName, final String tenantIdentifier, final String authToken) throws IOException {
@@ -27,23 +27,19 @@ import com.google.gson.JsonParser;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration; import org.apache.fineract.infrastructure.hooks.domain.HookConfiguration;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import retrofit2.Callback; import retrofit2.Callback;
@Service @Service
@RequiredArgsConstructor
public class WebHookProcessor implements HookProcessor { public class WebHookProcessor implements HookProcessor {
private final ProcessorHelper processorHelper; private final ProcessorHelper processorHelper;
@Autowired
public WebHookProcessor(ProcessorHelper processorHelper) {
this.processorHelper = processorHelper;
}
@Override @Override
public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName, public void process(final Hook hook, @SuppressWarnings("unused") final AppUser appUser, final String payload, final String entityName,
final String actionName, final String tenantIdentifier, final String authToken) { final String actionName, final String tenantIdentifier, final String authToken) {
@@ -27,6 +27,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
@@ -34,10 +35,10 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.hooks.api.HookApiConstants; import org.apache.fineract.infrastructure.hooks.api.HookApiConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@RequiredArgsConstructor
public class HookCommandFromApiJsonDeserializer { public class HookCommandFromApiJsonDeserializer {
/** /**
@@ -47,11 +48,6 @@ public class HookCommandFromApiJsonDeserializer {
Arrays.asList("name", "displayName", "isActive", "events", "config", "templateId")); Arrays.asList("name", "displayName", "isActive", "events", "config", "templateId"));
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
@Autowired
public HookCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
this.fromApiJsonHelper = fromApiJsonHelper;
}
public void validateForCreate(final String json) { public void validateForCreate(final String json) {
if (StringUtils.isBlank(json)) { if (StringUtils.isBlank(json)) {
throw new InvalidJsonException(); throw new InvalidJsonException();
@@ -23,6 +23,7 @@ import java.sql.SQLException;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.hooks.data.Event; import org.apache.fineract.infrastructure.hooks.data.Event;
import org.apache.fineract.infrastructure.hooks.data.EventResultSetExtractor; import org.apache.fineract.infrastructure.hooks.data.EventResultSetExtractor;
@@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookRepository; import org.apache.fineract.infrastructure.hooks.domain.HookRepository;
import org.apache.fineract.infrastructure.hooks.exception.HookNotFoundException; import org.apache.fineract.infrastructure.hooks.exception.HookNotFoundException;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
@@ -42,37 +42,30 @@ import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@RequiredArgsConstructor
public class HookReadPlatformServiceImpl implements HookReadPlatformService { public class HookReadPlatformServiceImpl implements HookReadPlatformService {
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
private final HookRepository hookRepository; private final HookRepository hookRepository;
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
@Autowired
public HookReadPlatformServiceImpl(final PlatformSecurityContext context, final HookRepository hookRepository,
final JdbcTemplate jdbcTemplate) {
this.context = context;
this.hookRepository = hookRepository;
this.jdbcTemplate = jdbcTemplate;
}
@Override @Override
public Collection<HookData> retrieveAllHooks() { public Collection<HookData> retrieveAllHooks() {
this.context.authenticatedUser(); context.authenticatedUser();
final HookMapper rm = new HookMapper(this.jdbcTemplate); final HookMapper rm = new HookMapper(jdbcTemplate);
final String sql = "select " + rm.schema() + " order by h.name"; final String sql = "select " + rm.schema() + " order by h.name";
return this.jdbcTemplate.query(sql, rm); // NOSONAR return jdbcTemplate.query(sql, rm); // NOSONAR
} }
@Override @Override
public HookData retrieveHook(final Long hookId) { public HookData retrieveHook(final Long hookId) {
try { try {
this.context.authenticatedUser(); context.authenticatedUser();
final HookMapper rm = new HookMapper(this.jdbcTemplate); final HookMapper rm = new HookMapper(jdbcTemplate);
final String sql = "select " + rm.schema() + " where h.id = ?"; final String sql = "select " + rm.schema() + " where h.id = ?";
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { hookId }); // NOSONAR return jdbcTemplate.queryForObject(sql, rm, hookId); // NOSONAR
} catch (final EmptyResultDataAccessException e) { } catch (final EmptyResultDataAccessException e) {
throw new HookNotFoundException(hookId, e); throw new HookNotFoundException(hookId, e);
} }
@@ -82,24 +75,23 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
@Override @Override
@Cacheable(value = "hooks", key = "T(org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil).getTenant().getTenantIdentifier().concat('HK')") @Cacheable(value = "hooks", key = "T(org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil).getTenant().getTenantIdentifier().concat('HK')")
public List<Hook> retrieveHooksByEvent(final String entityName, final String actionName) { public List<Hook> retrieveHooksByEvent(final String entityName, final String actionName) {
return hookRepository.findAllHooksListeningToEvent(entityName, actionName);
return this.hookRepository.findAllHooksListeningToEvent(entityName, actionName);
} }
@Override @Override
public HookData retrieveNewHookDetails(final String templateName) { public HookData retrieveNewHookDetails(final String templateName) {
this.context.authenticatedUser(); context.authenticatedUser();
final TemplateMapper rm = new TemplateMapper(this.jdbcTemplate); final TemplateMapper rm = new TemplateMapper(jdbcTemplate);
final String sql; final String sql;
List<HookTemplateData> templateData; List<HookTemplateData> templateData;
if (templateName == null) { if (templateName == null) {
sql = "select " + rm.schema() + " order by s.name"; sql = "select " + rm.schema() + " order by s.name";
templateData = this.jdbcTemplate.query(sql, rm); // NOSONAR templateData = jdbcTemplate.query(sql, rm); // NOSONAR
} else { } else {
sql = "select " + rm.schema() + " where s.name = ? order by s.name"; sql = "select " + rm.schema() + " where s.name = ? order by s.name";
templateData = this.jdbcTemplate.query(sql, rm, new Object[] { templateName }); // NOSONAR templateData = jdbcTemplate.query(sql, rm, templateName); // NOSONAR
} }
final List<Grouping> events = getTemplateForEvents(); final List<Grouping> events = getTemplateForEvents();
@@ -111,17 +103,14 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
final String sql = "select p.grouping, p.entity_name, p.action_name from m_permission p " final String sql = "select p.grouping, p.entity_name, p.action_name from m_permission p "
+ " where p.action_name NOT LIKE '%CHECKER%' AND p.action_name NOT LIKE '%READ%' " + " order by p.grouping, p.entity_name "; + " where p.action_name NOT LIKE '%CHECKER%' AND p.action_name NOT LIKE '%READ%' " + " order by p.grouping, p.entity_name ";
final EventResultSetExtractor extractor = new EventResultSetExtractor(); final EventResultSetExtractor extractor = new EventResultSetExtractor();
return this.jdbcTemplate.query(sql, extractor); return jdbcTemplate.query(sql, extractor);
} }
@RequiredArgsConstructor
private static final class HookMapper implements RowMapper<HookData> { private static final class HookMapper implements RowMapper<HookData> {
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
HookMapper(final JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public String schema() { public String schema() {
return " h.id, s.name as name, h.name as display_name, h.is_active, h.created_date," return " h.id, s.name as name, h.name as display_name, h.is_active, h.created_date,"
+ " h.lastmodified_date, h.ugd_template_id, tp.name as ugd_template_name, " + " h.lastmodified_date, h.ugd_template_id, tp.name as ugd_template_name, "
@@ -152,7 +141,7 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
final HookEventMapper rm = new HookEventMapper(); final HookEventMapper rm = new HookEventMapper();
final String sql = "select " + rm.schema() + " where h.id= ?"; final String sql = "select " + rm.schema() + " where h.id= ?";
return this.jdbcTemplate.query(sql, rm, new Object[] { hookId }); // NOSONAR return jdbcTemplate.query(sql, rm, hookId); // NOSONAR
} }
private List<Field> retrieveConfig(final Long hookId) { private List<Field> retrieveConfig(final Long hookId) {
@@ -160,9 +149,7 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
final HookConfigMapper rm = new HookConfigMapper(); final HookConfigMapper rm = new HookConfigMapper();
final String sql = "select " + rm.schema() + " where h.id= ? order by hc.field_name"; final String sql = "select " + rm.schema() + " where h.id= ? order by hc.field_name";
final List<Field> fields = this.jdbcTemplate.query(sql, rm, new Object[] { hookId }); // NOSONAR return jdbcTemplate.query(sql, rm, hookId); // NOSONAR
return fields;
} }
} }
@@ -194,14 +181,11 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
} }
} }
@RequiredArgsConstructor
private static final class TemplateMapper implements RowMapper<HookTemplateData> { private static final class TemplateMapper implements RowMapper<HookTemplateData> {
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
TemplateMapper(final JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public String schema() { public String schema() {
return " s.id, s.name from m_hook_templates s "; return " s.id, s.name from m_hook_templates s ";
} }
@@ -221,9 +205,7 @@ public class HookReadPlatformServiceImpl implements HookReadPlatformService {
final TemplateSchemaMapper rm = new TemplateSchemaMapper(); final TemplateSchemaMapper rm = new TemplateSchemaMapper();
final String sql = "select " + rm.schema() + " where s.id= ? order by hs.field_name "; final String sql = "select " + rm.schema() + " where s.id= ? order by hs.field_name ";
final List<Field> fields = this.jdbcTemplate.query(sql, rm, new Object[] { templateId }); // NOSONAR return jdbcTemplate.query(sql, rm, templateId); // NOSONAR;
return fields;
} }
} }
@@ -37,6 +37,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.persistence.PersistenceException; import javax.persistence.PersistenceException;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.ApiParameterError;
@@ -62,7 +63,6 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte
import org.apache.fineract.template.domain.Template; import org.apache.fineract.template.domain.Template;
import org.apache.fineract.template.domain.TemplateRepository; import org.apache.fineract.template.domain.TemplateRepository;
import org.apache.fineract.template.exception.TemplateNotFoundException; import org.apache.fineract.template.exception.TemplateNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.orm.jpa.JpaSystemException; import org.springframework.orm.jpa.JpaSystemException;
@@ -70,6 +70,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor
public class HookWritePlatformServiceJpaRepositoryImpl implements HookWritePlatformService { public class HookWritePlatformServiceJpaRepositoryImpl implements HookWritePlatformService {
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
@@ -80,20 +81,6 @@ public class HookWritePlatformServiceJpaRepositoryImpl implements HookWritePlatf
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
private final ProcessorHelper processorHelper; private final ProcessorHelper processorHelper;
@Autowired
public HookWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final HookRepository hookRepository,
final HookTemplateRepository hookTemplateRepository, final TemplateRepository ugdTemplateRepository,
final HookCommandFromApiJsonDeserializer fromApiJsonDeserializer, final FromJsonHelper fromApiJsonHelper,
ProcessorHelper processorHelper) {
this.context = context;
this.hookRepository = hookRepository;
this.hookTemplateRepository = hookTemplateRepository;
this.ugdTemplateRepository = ugdTemplateRepository;
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.fromApiJsonHelper = fromApiJsonHelper;
this.processorHelper = processorHelper;
}
@Transactional @Transactional
@Override @Override
@CacheEvict(value = "hooks", allEntries = true) @CacheEvict(value = "hooks", allEntries = true)
@@ -25,6 +25,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.jms.Queue; import javax.jms.Queue;
import lombok.RequiredArgsConstructor;
import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQQueue;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
@@ -50,35 +51,20 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount; import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount;
import org.apache.fineract.useradministration.domain.Role; import org.apache.fineract.useradministration.domain.Role;
import org.apache.fineract.useradministration.domain.RoleRepository; import org.apache.fineract.useradministration.domain.RoleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@RequiredArgsConstructor
public class NotificationDomainServiceImpl implements NotificationDomainService { public class NotificationDomainServiceImpl implements NotificationDomainService {
private final BusinessEventNotifierService businessEventNotifierService; private final BusinessEventNotifierService businessEventNotifierService;
final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final RoleRepository roleRepository; private final RoleRepository roleRepository;
private final OfficeRepository officeRepository; private final OfficeRepository officeRepository;
private final TopicSubscriberReadPlatformService topicSubscriberReadPlatformService; private final TopicSubscriberReadPlatformService topicSubscriberReadPlatformService;
private final NotificationEventService notificationEvent; private final NotificationEventService notificationEvent;
private final SpringEventPublisher springEventPublisher; private final SpringEventPublisher springEventPublisher;
@Autowired
public NotificationDomainServiceImpl(final BusinessEventNotifierService businessEventNotifierService,
final PlatformSecurityContext context, final RoleRepository roleRepository,
final TopicSubscriberReadPlatformService topicSubscriberReadPlatformService, final OfficeRepository officeRepository,
final NotificationEventService notificationEvent, final SpringEventPublisher springEventPublisher) {
this.businessEventNotifierService = businessEventNotifierService;
this.context = context;
this.roleRepository = roleRepository;
this.topicSubscriberReadPlatformService = topicSubscriberReadPlatformService;
this.officeRepository = officeRepository;
this.notificationEvent = notificationEvent;
this.springEventPublisher = springEventPublisher;
}
@PostConstruct @PostConstruct
public void addListeners() { public void addListeners() {
businessEventNotifierService.addBusinessEventPostListeners(BusinessEvents.CLIENTS_CREATE, new ClientCreatedListener()); businessEventNotifierService.addBusinessEventPostListeners(BusinessEvents.CLIENTS_CREATE, new ClientCreatedListener());