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 <[email protected]> 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,
