You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by aw...@apache.org on 2019/04/30 08:25:01 UTC
[fineract-cn-group] 27/40: implemeting UpdateGroup request
This is an automated email from the ASF dual-hosted git repository.
awasum pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-group.git
commit 4bd0052c741593bd13f67c3da0a0b76de1c8ff9f
Author: kengneruphine <ru...@gmail.com>
AuthorDate: Fri Jul 6 09:55:50 2018 +0100
implemeting UpdateGroup request
---
.../cn/group/api/v1/client/GroupManager.java | 13 ++++++
.../cn/group/api/v1/domain/GroupCommand.java | 2 +-
.../group/internal/command/UpdateGroupCommand.java | 17 ++++++++
.../internal/command/handler/GroupAggregate.java | 49 ++++++++++++++++++++++
.../cn/group/rest/GroupRestController.java | 21 ++++++++++
5 files changed, 101 insertions(+), 1 deletion(-)
diff --git a/api/src/main/java/org/apache/fineract/cn/group/api/v1/client/GroupManager.java b/api/src/main/java/org/apache/fineract/cn/group/api/v1/client/GroupManager.java
index dac2955..12c563d 100644
--- a/api/src/main/java/org/apache/fineract/cn/group/api/v1/client/GroupManager.java
+++ b/api/src/main/java/org/apache/fineract/cn/group/api/v1/client/GroupManager.java
@@ -121,6 +121,19 @@ public interface GroupManager {
Group findGroup(@PathVariable("identifier") final String identifier);
@RequestMapping(
+ value = "/groups/{identifier}",
+ method = RequestMethod.PUT,
+ produces = MediaType.APPLICATION_JSON_VALUE,
+ consumes = MediaType.APPLICATION_JSON_VALUE
+ )
+ @ThrowsExceptions({
+ @ThrowsException(status = HttpStatus.NOT_FOUND, exception = GroupNotFoundException.class),
+ @ThrowsException(status = HttpStatus.BAD_REQUEST, exception = GroupValidationException.class)
+ })
+ void updateGroup(@PathVariable("identifier") final String identifier, @RequestBody final Group group);
+
+
+ @RequestMapping(
value = "/groups/{identifier}/leaders",
method = RequestMethod.PUT,
produces = MediaType.APPLICATION_JSON_VALUE,
diff --git a/api/src/main/java/org/apache/fineract/cn/group/api/v1/domain/GroupCommand.java b/api/src/main/java/org/apache/fineract/cn/group/api/v1/domain/GroupCommand.java
index 526e5b7..3ca7996 100644
--- a/api/src/main/java/org/apache/fineract/cn/group/api/v1/domain/GroupCommand.java
+++ b/api/src/main/java/org/apache/fineract/cn/group/api/v1/domain/GroupCommand.java
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.cn.group.api.v1.domain;
-public class GroupCommand {
+public class GroupCommand {
private Action action;
private String note;
diff --git a/service/src/main/java/org/apache/fineract/cn/group/internal/command/UpdateGroupCommand.java b/service/src/main/java/org/apache/fineract/cn/group/internal/command/UpdateGroupCommand.java
new file mode 100644
index 0000000..5951ba3
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/group/internal/command/UpdateGroupCommand.java
@@ -0,0 +1,17 @@
+package org.apache.fineract.cn.group.internal.command;
+
+import org.apache.fineract.cn.group.api.v1.domain.Group;
+
+public class UpdateGroupCommand {
+
+ private final Group group;
+
+ public UpdateGroupCommand(final Group group) {
+ super();
+ this.group = group;
+ }
+
+ public Group group() {
+ return this.group;
+ }
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/group/internal/command/handler/GroupAggregate.java b/service/src/main/java/org/apache/fineract/cn/group/internal/command/handler/GroupAggregate.java
index 9402729..804aa26 100644
--- a/service/src/main/java/org/apache/fineract/cn/group/internal/command/handler/GroupAggregate.java
+++ b/service/src/main/java/org/apache/fineract/cn/group/internal/command/handler/GroupAggregate.java
@@ -35,6 +35,7 @@ import org.apache.fineract.cn.group.internal.command.SignOffMeetingCommand;
import org.apache.fineract.cn.group.internal.command.UpdateAssignedEmployeeCommand;
import org.apache.fineract.cn.group.internal.command.UpdateLeadersCommand;
import org.apache.fineract.cn.group.internal.command.UpdateMembersCommand;
+import org.apache.fineract.cn.group.internal.command.UpdateGroupCommand;
import org.apache.fineract.cn.group.internal.mapper.AddressMapper;
import org.apache.fineract.cn.group.internal.mapper.GroupCommandMapper;
import org.apache.fineract.cn.group.internal.repository.AddressEntity;
@@ -184,6 +185,49 @@ public class GroupAggregate {
return group.getIdentifier();
}
+ // Updating Group
+ @Transactional
+ @CommandHandler
+ @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.PUT_GROUP)
+ public String updateGroup(final UpdateGroupCommand updateGroupCommand) {
+ final Group group = updateGroupCommand.group();
+ final GroupDefinitionEntity groupDefinitionEntity =
+ this.groupDefinitionRepository.findByIdentifier(group.getGroupDefinitionIdentifier())
+ .orElseThrow(
+ () -> ServiceException.notFound("Group definition {0} not found.", group.getGroupDefinitionIdentifier())
+ );
+
+ final AddressEntity savedAddress = this.addressRepository.save(AddressMapper.map(group.getAddress()));
+ final GroupEntity groupEntity = findGroupEntityOrThrow(group.getIdentifier());
+
+ groupEntity.setGroupDefinition(groupDefinitionEntity);
+ groupEntity.setIdentifier(group.getIdentifier());
+ groupEntity.setName(group.getName());
+ groupEntity.setOffice(group.getOffice());
+ groupEntity.setWeekday(group.getWeekday());
+ groupEntity.setGroupStatus(group.getStatus());
+ //groupEntity.setAddressEntity(group.getAddress());
+
+ if (group.getAssignedEmployee() != null) {
+ this.updateAssignedEmployee(new UpdateAssignedEmployeeCommand(group.getIdentifier(), group.getAssignedEmployee()));
+ }
+
+ if (group.getLeaders() != null) {
+ this.updateLeaders(new UpdateLeadersCommand(group.getIdentifier(), group.getLeaders()));
+ }
+
+ if (group.getMembers() != null) {
+ this.updateMembers(new UpdateMembersCommand(group.getIdentifier(), group.getMembers()));
+ }
+
+
+ groupEntity.setLastModifiedBy(UserContextHolder.checkedGetUser());
+ groupEntity.setLastModifiedOn(LocalDateTime.now(Clock.systemUTC()));
+
+ this.groupRepository.save(groupEntity);
+
+ return group.getIdentifier();
+ }
@Transactional
@CommandHandler
@EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.ACTIVATE_GROUP)
@@ -377,4 +421,9 @@ public class GroupAggregate {
groupCommandEntity.setGroup(groupEntity);
this.groupCommandRepository.save(groupCommandEntity);
}
+
+ private GroupEntity findGroupEntityOrThrow(String identifier) {
+ return this.groupRepository.findByIdentifier(identifier)
+ .orElseThrow(() -> ServiceException.notFound("Group ''{0}'' not found", identifier));
+ }
}
diff --git a/service/src/main/java/org/apache/fineract/cn/group/rest/GroupRestController.java b/service/src/main/java/org/apache/fineract/cn/group/rest/GroupRestController.java
index 0db02d0..269f66c 100644
--- a/service/src/main/java/org/apache/fineract/cn/group/rest/GroupRestController.java
+++ b/service/src/main/java/org/apache/fineract/cn/group/rest/GroupRestController.java
@@ -34,6 +34,7 @@ import org.apache.fineract.cn.group.internal.command.SignOffMeetingCommand;
import org.apache.fineract.cn.group.internal.command.UpdateAssignedEmployeeCommand;
import org.apache.fineract.cn.group.internal.command.UpdateLeadersCommand;
import org.apache.fineract.cn.group.internal.command.UpdateMembersCommand;
+import org.apache.fineract.cn.group.internal.command.UpdateGroupCommand;
import org.apache.fineract.cn.group.internal.service.GroupDefinitionService;
import org.apache.fineract.cn.group.internal.service.GroupService;
import java.util.List;
@@ -139,6 +140,26 @@ public class GroupRestController {
@Permittable(value= AcceptedTokenType.TENANT, groupId = PermittableGroupIds.GROUP)
@RequestMapping(
+ value = "/{identifier}",
+ method = RequestMethod.PUT,
+ consumes = MediaType.ALL_VALUE,
+ produces = MediaType.APPLICATION_JSON_VALUE
+ )
+
+ public
+ @ResponseBody
+ ResponseEntity<Void> updateGroup(@PathVariable("identifier") final String identifier,
+ @RequestBody final Group group) {
+ this.groupService.findByIdentifier(identifier)
+ .orElseThrow(() -> ServiceException.notFound("Group {0} not found.", identifier));
+
+ this.commandGateway.process(new UpdateGroupCommand(group));
+
+ return ResponseEntity.accepted().build();
+ }
+
+ @Permittable(value= AcceptedTokenType.TENANT, groupId = PermittableGroupIds.GROUP)
+ @RequestMapping(
value = "/{identifier}/commands",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE,