From 2a448bc19ccc885f5fb3f5ea2783ef6fd8ad7877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hal=C3=A1s?= <34719696+ErikHalas@users.noreply.github.com> Date: Tue, 1 Nov 2022 19:48:11 +0100 Subject: [PATCH 1/3] feature/issue-#49--CAPTURE_DURATION_OF_STAY Added two endpoints for capturing stay in house for a house members. --- .github/PULL_REQUEST_TEMPLATE.md | 8 +- .../main/resources/public/swagger/api.yaml | 157 +++++++++++++++++- .../myhome/controllers/HouseController.java | 84 +++++++--- .../dto/mapper/HouseRentalMapper.java | 22 +++ .../java/com/myhome/domain/HouseRental.java | 44 +++++ .../repositories/HouseHistoryRepository.java | 16 ++ .../com/myhome/services/HouseService.java | 7 + .../springdatajpa/HouseSDJpaService.java | 50 ++++-- 8 files changed, 342 insertions(+), 46 deletions(-) create mode 100644 service/src/main/java/com/myhome/controllers/dto/mapper/HouseRentalMapper.java create mode 100644 service/src/main/java/com/myhome/domain/HouseRental.java create mode 100644 service/src/main/java/com/myhome/repositories/HouseHistoryRepository.java diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 46f527b0..8aae8878 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,7 +2,7 @@ ## ๐Ÿš€ Description - +Added two endpoints for capturing stay in house for a house members. ## ๐Ÿ“„ Motivation and Context @@ -11,9 +11,7 @@ ## ๐Ÿงช How Has This Been Tested? - - - +Feature was tested by sending requests via Postman. ## ๐Ÿ“ท Screenshots (if appropriate) @@ -24,7 +22,7 @@ - [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) +- [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) ## โœ… Checklist diff --git a/api/src/main/resources/public/swagger/api.yaml b/api/src/main/resources/public/swagger/api.yaml index 2c7c766c..3d3fc5f8 100644 --- a/api/src/main/resources/public/swagger/api.yaml +++ b/api/src/main/resources/public/swagger/api.yaml @@ -892,7 +892,66 @@ paths: description: If house member was removed from house '400': description: If params are invalid - + /houses/{houseId}/rentals: + post: + tags: + - Houses + description: Add the duration of stay to house history. + operationId: captureStay + parameters: + - in: path + name: houseId + schema: + type: string + required: true + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RentalRequest' + application/xml: + schema: + $ref: '#/components/schemas/RentalRequest' + required: true + responses: + '201': + description: If duration of stay was added to house history + content: + application/json: + schema: + $ref: '#/components/schemas/RentalResponse' + application/xml: + schema: + $ref: '#/components/schemas/RentalResponse' + '404': + description: If parameters are invalid + get: + tags: + - Houses + operationId: listRentalsForHouseId + parameters: + - in: query + name: pageable + required: false + schema: + $ref: '#/components/schemas/Pageable' + - in: path + name: houseId + schema: + type: string + required: true + responses: + '200': + description: If history is present + content: + application/json: + schema: + $ref: '#/components/schemas/ListRentalsResponse' + application/xml: + schema: + $ref: '#/components/schemas/ListRentalsResponse' + '404': + description: If params are invalid /payments: post: security: @@ -1400,4 +1459,98 @@ components: email: type: string password: - type: string \ No newline at end of file + type: string + ListRentalsResponse: + type: object + properties: + rentals: + type: array + items: + $ref: '#/components/schemas/RentalDto' + RentalResponse: + type: object + required: + - memberId + - houseId + - stayFromDate + - stayToDate + - bookingFromDate + - bookingToDate + properties: + memberId: + type: string + houseId: + type: string + stayFromDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + stayToDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + bookingFromDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + bookingToDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + RentalDto: + type: object + required: + - memberId + - houseId + - stayFromDate + - stayToDate + - bookingFromDate + - bookingToDate + properties: + memberId: + type: string + houseId: + type: string + stayFromDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + stayToDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + bookingFromDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + bookingToDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + RentalRequest: + type: object + required: + - memberId + - bookingFromDate + - bookingToDate + properties: + memberId: + type: string + bookingFromDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" + bookingToDate: + type: string + format: date-time + description: Creation date and time + example: "2021-01-30T08:30:00Z" \ No newline at end of file diff --git a/service/src/main/java/com/myhome/controllers/HouseController.java b/service/src/main/java/com/myhome/controllers/HouseController.java index 4f9ed9f4..b81595af 100644 --- a/service/src/main/java/com/myhome/controllers/HouseController.java +++ b/service/src/main/java/com/myhome/controllers/HouseController.java @@ -18,18 +18,16 @@ import com.myhome.api.HousesApi; import com.myhome.controllers.dto.mapper.HouseMemberMapper; +import com.myhome.controllers.dto.mapper.HouseRentalMapperImpl; import com.myhome.controllers.mapper.HouseApiMapper; import com.myhome.domain.CommunityHouse; import com.myhome.domain.HouseMember; -import com.myhome.model.AddHouseMemberRequest; -import com.myhome.model.AddHouseMemberResponse; -import com.myhome.model.GetHouseDetailsResponse; -import com.myhome.model.GetHouseDetailsResponseCommunityHouse; -import com.myhome.model.ListHouseMembersResponse; +import com.myhome.domain.HouseRental; +import com.myhome.model.*; import com.myhome.services.HouseService; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; + +import java.util.*; +import java.util.stream.Collectors; import javax.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,18 +43,19 @@ @Slf4j public class HouseController implements HousesApi { private final HouseMemberMapper houseMemberMapper; + private final HouseRentalMapperImpl houseRentalMapper; private final HouseService houseService; private final HouseApiMapper houseApiMapper; @Override public ResponseEntity listAllHouses( - @PageableDefault(size = 200) Pageable pageable) { + @PageableDefault(size = 200) Pageable pageable) { log.trace("Received request to list all houses"); Set houseDetails = - houseService.listAllHouses(pageable); + houseService.listAllHouses(pageable); Set getHouseDetailsResponseSet = - houseApiMapper.communityHouseSetToRestApiResponseCommunityHouseSet(houseDetails); + houseApiMapper.communityHouseSetToRestApiResponseCommunityHouseSet(houseDetails); GetHouseDetailsResponse response = new GetHouseDetailsResponse(); @@ -69,34 +68,51 @@ public ResponseEntity listAllHouses( public ResponseEntity getHouseDetails(String houseId) { log.trace("Received request to get details of a house with id[{}]", houseId); return houseService.getHouseDetailsById(houseId) - .map(houseApiMapper::communityHouseToRestApiResponseCommunityHouse) - .map(Collections::singleton) - .map(getHouseDetailsResponseCommunityHouses -> new GetHouseDetailsResponse().houses(getHouseDetailsResponseCommunityHouses)) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + .map(houseApiMapper::communityHouseToRestApiResponseCommunityHouse) + .map(Collections::singleton) + .map(getHouseDetailsResponseCommunityHouses -> new GetHouseDetailsResponse().houses(getHouseDetailsResponseCommunityHouses)) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); } @Override public ResponseEntity listAllMembersOfHouse( - String houseId, - @PageableDefault(size = 200) Pageable pageable) { + String houseId, + @PageableDefault(size = 200) Pageable pageable) { log.trace("Received request to list all members of the house with id[{}]", houseId); return houseService.getHouseMembersById(houseId, pageable) - .map(HashSet::new) - .map(houseMemberMapper::houseMemberSetToRestApiResponseHouseMemberSet) - .map(houseMembers -> new ListHouseMembersResponse().members(houseMembers)) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + .map(HashSet::new) + .map(houseMemberMapper::houseMemberSetToRestApiResponseHouseMemberSet) + .map(houseMembers -> new ListHouseMembersResponse().members(houseMembers)) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } + + @Override + public ResponseEntity listRentalsForHouseId(String houseId, @PageableDefault(size = 200) Pageable pageable) { + log.trace("Received request to list rentals for house with house id[{}]", + houseId); + Optional> houseRentals = houseService.listHouseRentalsForHouseId(houseId, pageable); + if(houseRentals.isPresent()){ + List rentalDtos = houseRentals.get().stream() + .map(houseRentalMapper::HouseRentalToRentalDto) + .collect(Collectors.toList()); + ListRentalsResponse rentalsResponse = new ListRentalsResponse(); + rentalsResponse.setRentals(rentalDtos); + return ResponseEntity.ok().body(rentalsResponse); + }else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } } @Override public ResponseEntity addHouseMembers( - @PathVariable String houseId, @Valid AddHouseMemberRequest request) { + @PathVariable String houseId, @Valid AddHouseMemberRequest request) { log.trace("Received request to add member to the house with id[{}]", houseId); Set members = - houseMemberMapper.houseMemberDtoSetToHouseMemberSet(request.getMembers()); + houseMemberMapper.houseMemberDtoSetToHouseMemberSet(request.getMembers()); Set savedHouseMembers = houseService.addHouseMembers(houseId, members); if (savedHouseMembers.size() == 0 && request.getMembers().size() != 0) { @@ -104,15 +120,29 @@ public ResponseEntity addHouseMembers( } else { AddHouseMemberResponse response = new AddHouseMemberResponse(); response.setMembers( - houseMemberMapper.houseMemberSetToRestApiResponseAddHouseMemberSet(savedHouseMembers)); + houseMemberMapper.houseMemberSetToRestApiResponseAddHouseMemberSet(savedHouseMembers)); return ResponseEntity.status(HttpStatus.CREATED).body(response); } } + @Override + public ResponseEntity captureStay(String houseId, RentalRequest rentalRequest) { + log.trace("Received request to capture stay for house with house id[{}] and member id[{}]", + houseId, rentalRequest.getMemberId()); + Optional houseRental = houseService.createRentalForHouseId( + houseId, rentalRequest.getMemberId(), + rentalRequest.getBookingFromDate(), + rentalRequest.getBookingToDate() + ); + return houseRental.isPresent() ? + ResponseEntity.ok().body(houseRentalMapper.HouseRentalToRentalResponse(houseRental.get())) : + ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + @Override public ResponseEntity deleteHouseMember(String houseId, String memberId) { log.trace("Received request to delete a member from house with house id[{}] and member id[{}]", - houseId, memberId); + houseId, memberId); boolean isMemberDeleted = houseService.deleteMemberFromHouse(houseId, memberId); if (isMemberDeleted) { return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); diff --git a/service/src/main/java/com/myhome/controllers/dto/mapper/HouseRentalMapper.java b/service/src/main/java/com/myhome/controllers/dto/mapper/HouseRentalMapper.java new file mode 100644 index 00000000..4050889d --- /dev/null +++ b/service/src/main/java/com/myhome/controllers/dto/mapper/HouseRentalMapper.java @@ -0,0 +1,22 @@ +package com.myhome.controllers.dto.mapper; + +import com.myhome.domain.HouseRental; +import com.myhome.model.RentalDto; +import com.myhome.model.RentalRequest; +import com.myhome.model.RentalResponse; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; + +@Mapper +public interface HouseRentalMapper { + RentalResponse RentalDtoToRentalResponse(RentalDto houseHistoryDto); + @Mappings({ + @Mapping(target = "houseId", source = "houseId") + }) + RentalDto RentalRequestToRentalDto(String houseId, RentalRequest houseHistoryRequest); + RentalDto HouseRentalToRentalDto(HouseRental houseHistory); + RentalResponse HouseRentalToRentalResponse(HouseRental houseHistory); + HouseRental RentalDtoToHouseRental(RentalDto houseHistoryDto); +} \ No newline at end of file diff --git a/service/src/main/java/com/myhome/domain/HouseRental.java b/service/src/main/java/com/myhome/domain/HouseRental.java new file mode 100644 index 00000000..2e892529 --- /dev/null +++ b/service/src/main/java/com/myhome/domain/HouseRental.java @@ -0,0 +1,44 @@ +package com.myhome.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.OneToOne; +import java.time.OffsetDateTime; + +@Entity +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class HouseRental extends BaseEntity { + + @Column(unique = false, nullable = false) + private String houseId; + + @Column(nullable = false, unique = false) + private String memberId; + + @Column(nullable = true) + private OffsetDateTime bookingFromDate; + + @Column(nullable = true) + private OffsetDateTime bookingToDate; + + @Column(nullable = true) + private OffsetDateTime arrivalDate; + + @Column(nullable = true) + private OffsetDateTime departureDate; + + @OneToOne(fetch = FetchType.EAGER) + private CommunityHouse communityHouse; + + @OneToOne(fetch = FetchType.EAGER) + private HouseMember houseMember; +} \ No newline at end of file diff --git a/service/src/main/java/com/myhome/repositories/HouseHistoryRepository.java b/service/src/main/java/com/myhome/repositories/HouseHistoryRepository.java new file mode 100644 index 00000000..984be45f --- /dev/null +++ b/service/src/main/java/com/myhome/repositories/HouseHistoryRepository.java @@ -0,0 +1,16 @@ +package com.myhome.repositories; + +import com.myhome.domain.HouseRental; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface HouseHistoryRepository extends PagingAndSortingRepository { + + Optional> findAllByCommunityHouse_HouseId(String houseId, Pageable pageable); +} \ No newline at end of file diff --git a/service/src/main/java/com/myhome/services/HouseService.java b/service/src/main/java/com/myhome/services/HouseService.java index c19f3368..13f5c73a 100644 --- a/service/src/main/java/com/myhome/services/HouseService.java +++ b/service/src/main/java/com/myhome/services/HouseService.java @@ -18,9 +18,11 @@ import com.myhome.domain.CommunityHouse; import com.myhome.domain.HouseMember; +import java.time.OffsetDateTime; import java.util.List; import java.util.Optional; import java.util.Set; +import com.myhome.domain.HouseRental; import org.springframework.data.domain.Pageable; public interface HouseService { @@ -37,4 +39,9 @@ public interface HouseService { Optional> getHouseMembersById(String houseId, Pageable pageable); Optional> listHouseMembersForHousesOfUserId(String userId, Pageable pageable); + + Optional> listHouseRentalsForHouseId(String houseId, Pageable pageable); + + Optional createRentalForHouseId(String houseId, String houseMemberId, OffsetDateTime bookingFromDate, OffsetDateTime bookingToDate); + } diff --git a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java index da732cac..b267ba5d 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java @@ -18,15 +18,14 @@ import com.myhome.domain.CommunityHouse; import com.myhome.domain.HouseMember; +import com.myhome.domain.HouseRental; import com.myhome.repositories.CommunityHouseRepository; -import com.myhome.repositories.HouseMemberDocumentRepository; import com.myhome.repositories.HouseMemberRepository; +import com.myhome.repositories.HouseHistoryRepository; import com.myhome.services.HouseService; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.time.OffsetDateTime; +import java.util.*; + import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -36,7 +35,7 @@ @Service public class HouseSDJpaService implements HouseService { private final HouseMemberRepository houseMemberRepository; - private final HouseMemberDocumentRepository houseMemberDocumentRepository; + private final HouseHistoryRepository houseHistoryRepository; private final CommunityHouseRepository communityHouseRepository; private String generateUniqueId() { @@ -59,7 +58,7 @@ public Set listAllHouses(Pageable pageable) { @Override public Set addHouseMembers(String houseId, Set houseMembers) { Optional communityHouseOptional = - communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); return communityHouseOptional.map(communityHouse -> { Set savedMembers = new HashSet<>(); houseMembers.forEach(member -> member.setMemberId(generateUniqueId())); @@ -75,7 +74,7 @@ public Set listAllHouses(Pageable pageable) { @Override public boolean deleteMemberFromHouse(String houseId, String memberId) { Optional communityHouseOptional = - communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); return communityHouseOptional.map(communityHouse -> { boolean isMemberRemoved = false; if (!CollectionUtils.isEmpty(communityHouse.getHouseMembers())) { @@ -104,15 +103,42 @@ public Optional getHouseDetailsById(String houseId) { @Override public Optional> getHouseMembersById(String houseId, Pageable pageable) { return Optional.ofNullable( - houseMemberRepository.findAllByCommunityHouse_HouseId(houseId, pageable) + houseMemberRepository.findAllByCommunityHouse_HouseId(houseId, pageable) ); } @Override public Optional> listHouseMembersForHousesOfUserId(String userId, - Pageable pageable) { + Pageable pageable) { return Optional.ofNullable( - houseMemberRepository.findAllByCommunityHouse_Community_Admins_UserId(userId, pageable) + houseMemberRepository.findAllByCommunityHouse_Community_Admins_UserId(userId, pageable) ); } + + @Override + public Optional> listHouseRentalsForHouseId(String houseId, Pageable pageable) { + return houseHistoryRepository.findAllByCommunityHouse_HouseId(houseId, pageable); + } + + @Override + public Optional createRentalForHouseId(String houseId, String houseMemberId, OffsetDateTime bookingFromDate, OffsetDateTime bookingToDate) { + Optional communityHouseOptional = + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + Optional houseMemberOptional = + houseMemberRepository.findByMemberId(houseMemberId); + if(communityHouseOptional.isPresent() && houseMemberOptional.isPresent()){ + return Optional.of( + houseHistoryRepository.save(new HouseRental( + houseId, + houseMemberId, + bookingFromDate, + bookingToDate, + null, + null, + communityHouseOptional.get(), + houseMemberOptional.get() + )) + ); + }else { return Optional.empty(); } + } } From 33aaa2c64504de9944618426f18a6a03c860f68d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hal=C3=A1s?= <34719696+ErikHalas@users.noreply.github.com> Date: Wed, 2 Nov 2022 18:37:34 +0100 Subject: [PATCH 2/3] feature/issue-#49--CAPTURE_DURATION_OF_STAY Added two endpoints for capturing stay in house for a house members. --- .github/PULL_REQUEST_TEMPLATE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8aae8878..46f527b0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,7 +2,7 @@ ## ๐Ÿš€ Description -Added two endpoints for capturing stay in house for a house members. + ## ๐Ÿ“„ Motivation and Context @@ -11,7 +11,9 @@ Added two endpoints for capturing stay in house for a house members. ## ๐Ÿงช How Has This Been Tested? -Feature was tested by sending requests via Postman. + + + ## ๐Ÿ“ท Screenshots (if appropriate) @@ -22,7 +24,7 @@ Feature was tested by sending requests via Postman. - [ ] Bug fix (non-breaking change which fixes an issue) -- [x] New feature (non-breaking change which adds functionality) +- [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) ## โœ… Checklist From d4249ad11fe4c517c9a8c5a42be968deba138714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hal=C3=A1s?= <34719696+ErikHalas@users.noreply.github.com> Date: Fri, 4 Nov 2022 17:29:50 +0100 Subject: [PATCH 3/3] feature/issue-#49--CAPTURE_DURATION_OF_STAY Added two endpoints for capturing stay in house for a house members. --- .../myhome/controllers/HouseController.java | 56 +++++++++---------- .../springdatajpa/HouseSDJpaService.java | 32 +++++------ 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/service/src/main/java/com/myhome/controllers/HouseController.java b/service/src/main/java/com/myhome/controllers/HouseController.java index b81595af..33db0e96 100644 --- a/service/src/main/java/com/myhome/controllers/HouseController.java +++ b/service/src/main/java/com/myhome/controllers/HouseController.java @@ -49,13 +49,13 @@ public class HouseController implements HousesApi { @Override public ResponseEntity listAllHouses( - @PageableDefault(size = 200) Pageable pageable) { + @PageableDefault(size = 200) Pageable pageable) { log.trace("Received request to list all houses"); Set houseDetails = - houseService.listAllHouses(pageable); + houseService.listAllHouses(pageable); Set getHouseDetailsResponseSet = - houseApiMapper.communityHouseSetToRestApiResponseCommunityHouseSet(houseDetails); + houseApiMapper.communityHouseSetToRestApiResponseCommunityHouseSet(houseDetails); GetHouseDetailsResponse response = new GetHouseDetailsResponse(); @@ -68,36 +68,36 @@ public ResponseEntity listAllHouses( public ResponseEntity getHouseDetails(String houseId) { log.trace("Received request to get details of a house with id[{}]", houseId); return houseService.getHouseDetailsById(houseId) - .map(houseApiMapper::communityHouseToRestApiResponseCommunityHouse) - .map(Collections::singleton) - .map(getHouseDetailsResponseCommunityHouses -> new GetHouseDetailsResponse().houses(getHouseDetailsResponseCommunityHouses)) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + .map(houseApiMapper::communityHouseToRestApiResponseCommunityHouse) + .map(Collections::singleton) + .map(getHouseDetailsResponseCommunityHouses -> new GetHouseDetailsResponse().houses(getHouseDetailsResponseCommunityHouses)) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); } @Override public ResponseEntity listAllMembersOfHouse( - String houseId, - @PageableDefault(size = 200) Pageable pageable) { + String houseId, + @PageableDefault(size = 200) Pageable pageable) { log.trace("Received request to list all members of the house with id[{}]", houseId); return houseService.getHouseMembersById(houseId, pageable) - .map(HashSet::new) - .map(houseMemberMapper::houseMemberSetToRestApiResponseHouseMemberSet) - .map(houseMembers -> new ListHouseMembersResponse().members(houseMembers)) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + .map(HashSet::new) + .map(houseMemberMapper::houseMemberSetToRestApiResponseHouseMemberSet) + .map(houseMembers -> new ListHouseMembersResponse().members(houseMembers)) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); } @Override public ResponseEntity listRentalsForHouseId(String houseId, @PageableDefault(size = 200) Pageable pageable) { log.trace("Received request to list rentals for house with house id[{}]", - houseId); + houseId); Optional> houseRentals = houseService.listHouseRentalsForHouseId(houseId, pageable); if(houseRentals.isPresent()){ List rentalDtos = houseRentals.get().stream() - .map(houseRentalMapper::HouseRentalToRentalDto) - .collect(Collectors.toList()); + .map(houseRentalMapper::HouseRentalToRentalDto) + .collect(Collectors.toList()); ListRentalsResponse rentalsResponse = new ListRentalsResponse(); rentalsResponse.setRentals(rentalDtos); return ResponseEntity.ok().body(rentalsResponse); @@ -108,11 +108,11 @@ public ResponseEntity listRentalsForHouseId(String houseId, @Override public ResponseEntity addHouseMembers( - @PathVariable String houseId, @Valid AddHouseMemberRequest request) { + @PathVariable String houseId, @Valid AddHouseMemberRequest request) { log.trace("Received request to add member to the house with id[{}]", houseId); Set members = - houseMemberMapper.houseMemberDtoSetToHouseMemberSet(request.getMembers()); + houseMemberMapper.houseMemberDtoSetToHouseMemberSet(request.getMembers()); Set savedHouseMembers = houseService.addHouseMembers(houseId, members); if (savedHouseMembers.size() == 0 && request.getMembers().size() != 0) { @@ -120,7 +120,7 @@ public ResponseEntity addHouseMembers( } else { AddHouseMemberResponse response = new AddHouseMemberResponse(); response.setMembers( - houseMemberMapper.houseMemberSetToRestApiResponseAddHouseMemberSet(savedHouseMembers)); + houseMemberMapper.houseMemberSetToRestApiResponseAddHouseMemberSet(savedHouseMembers)); return ResponseEntity.status(HttpStatus.CREATED).body(response); } } @@ -128,21 +128,21 @@ public ResponseEntity addHouseMembers( @Override public ResponseEntity captureStay(String houseId, RentalRequest rentalRequest) { log.trace("Received request to capture stay for house with house id[{}] and member id[{}]", - houseId, rentalRequest.getMemberId()); + houseId, rentalRequest.getMemberId()); Optional houseRental = houseService.createRentalForHouseId( - houseId, rentalRequest.getMemberId(), - rentalRequest.getBookingFromDate(), - rentalRequest.getBookingToDate() + houseId, rentalRequest.getMemberId(), + rentalRequest.getBookingFromDate(), + rentalRequest.getBookingToDate() ); return houseRental.isPresent() ? - ResponseEntity.ok().body(houseRentalMapper.HouseRentalToRentalResponse(houseRental.get())) : - ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + ResponseEntity.ok().body(houseRentalMapper.HouseRentalToRentalResponse(houseRental.get())) : + ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } @Override public ResponseEntity deleteHouseMember(String houseId, String memberId) { log.trace("Received request to delete a member from house with house id[{}] and member id[{}]", - houseId, memberId); + houseId, memberId); boolean isMemberDeleted = houseService.deleteMemberFromHouse(houseId, memberId); if (isMemberDeleted) { return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); diff --git a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java index b267ba5d..ac1d0be2 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java @@ -58,7 +58,7 @@ public Set listAllHouses(Pageable pageable) { @Override public Set addHouseMembers(String houseId, Set houseMembers) { Optional communityHouseOptional = - communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); return communityHouseOptional.map(communityHouse -> { Set savedMembers = new HashSet<>(); houseMembers.forEach(member -> member.setMemberId(generateUniqueId())); @@ -74,7 +74,7 @@ public Set listAllHouses(Pageable pageable) { @Override public boolean deleteMemberFromHouse(String houseId, String memberId) { Optional communityHouseOptional = - communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); return communityHouseOptional.map(communityHouse -> { boolean isMemberRemoved = false; if (!CollectionUtils.isEmpty(communityHouse.getHouseMembers())) { @@ -103,15 +103,15 @@ public Optional getHouseDetailsById(String houseId) { @Override public Optional> getHouseMembersById(String houseId, Pageable pageable) { return Optional.ofNullable( - houseMemberRepository.findAllByCommunityHouse_HouseId(houseId, pageable) + houseMemberRepository.findAllByCommunityHouse_HouseId(houseId, pageable) ); } @Override public Optional> listHouseMembersForHousesOfUserId(String userId, - Pageable pageable) { + Pageable pageable) { return Optional.ofNullable( - houseMemberRepository.findAllByCommunityHouse_Community_Admins_UserId(userId, pageable) + houseMemberRepository.findAllByCommunityHouse_Community_Admins_UserId(userId, pageable) ); } @@ -123,20 +123,20 @@ public Optional> listHouseRentalsForHouseId(String houseId, Pa @Override public Optional createRentalForHouseId(String houseId, String houseMemberId, OffsetDateTime bookingFromDate, OffsetDateTime bookingToDate) { Optional communityHouseOptional = - communityHouseRepository.findByHouseIdWithHouseMembers(houseId); + communityHouseRepository.findByHouseIdWithHouseMembers(houseId); Optional houseMemberOptional = - houseMemberRepository.findByMemberId(houseMemberId); + houseMemberRepository.findByMemberId(houseMemberId); if(communityHouseOptional.isPresent() && houseMemberOptional.isPresent()){ return Optional.of( - houseHistoryRepository.save(new HouseRental( - houseId, - houseMemberId, - bookingFromDate, - bookingToDate, - null, - null, - communityHouseOptional.get(), - houseMemberOptional.get() + houseHistoryRepository.save(new HouseRental( + houseId, + houseMemberId, + bookingFromDate, + bookingToDate, + null, + null, + communityHouseOptional.get(), + houseMemberOptional.get() )) ); }else { return Optional.empty(); }