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/09/03 07:25:53 UTC

[fineract-cn-group] 27/46: 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,