diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java b/buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java index c0830c4..9ee37b8 100644 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java @@ -8,7 +8,7 @@ import javax.persistence.JoinColumn; import javax.persistence.OneToOne; /** - * Entity that keeps user exchange offer. + * Entity that keeps user exchange offer. */ @Entity public class Exchange { @@ -20,29 +20,49 @@ public class Exchange { @OneToOne @JoinColumn(name = "owned_id", unique = true) private Assignment ownedAssignment; - + @OneToOne @JoinColumn(name = "desired_id") private Groups desiredAssignment; - - public Exchange() { + private Long ownerId; + + public Exchange(){ + } - public Exchange(Assignment ownedAssignment, Groups desiredAssignment){ + /** + * @return Long ID of exchange trader + */ + public Long getOwnerId() { + return ownerId; + } + + /** + * @param ownerId ID of exchange trader + */ + public void setOwnerId(Long ownerId) { + this.ownerId = ownerId; + } + + /** + * + * @param ownedAssignment Assignment which owner would like to trade + * @param desiredAssignment Groups instance that trader wants + */ + public Exchange(Assignment ownedAssignment, Groups desiredAssignment) { this.ownedAssignment = ownedAssignment; this.desiredAssignment = desiredAssignment; + this.ownerId = this.ownedAssignment.getCommision().getCommisionOwner().getId(); } - /** * @return Long ID in database */ public Long getId(){ return this.id; } - - + /** * @return Groups Target group */ @@ -50,7 +70,6 @@ public class Exchange { return desiredAssignment; } - /** * @param desiredAssignment Target group */ @@ -58,7 +77,6 @@ public class Exchange { this.desiredAssignment = desiredAssignment; } - /** * @return Assignment Owned assignment */ @@ -66,7 +84,6 @@ public class Exchange { return ownedAssignment; } - /** * @param ownedAssignment Owned assignment */ diff --git a/buisnesslogic/src/main/java/com/plannaplan/repositories/ExchangeRepository.java b/buisnesslogic/src/main/java/com/plannaplan/repositories/ExchangeRepository.java index 796625a..0a1a210 100644 --- a/buisnesslogic/src/main/java/com/plannaplan/repositories/ExchangeRepository.java +++ b/buisnesslogic/src/main/java/com/plannaplan/repositories/ExchangeRepository.java @@ -1,5 +1,6 @@ package com.plannaplan.repositories; +import java.util.List; import java.util.Optional; import com.plannaplan.entities.Assignment; @@ -16,5 +17,8 @@ public interface ExchangeRepository extends JpaRepository{ @Query("FROM Exchange WHERE owned_id = ?1 AND desired_id = ?2") Optional checkForExchange(@Param("owned_id") Assignment assignment, @Param("desired_id") Groups group); + + @Query("FROM Exchange WHERE ownerId = ?1") + List getByUserId(@Param("id") Long id); } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java b/buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java index 7a78e5a..143f459 100644 --- a/buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java @@ -1,5 +1,6 @@ package com.plannaplan.services; +import java.util.List; import java.util.Optional; import com.plannaplan.entities.Assignment; @@ -32,6 +33,14 @@ public class ExchangeService { return this.repo.findById(id); } + /** + * @param id Id of user + * @return List of exchanges that belong to user + */ + public List getByUserId(Long id){ + return this.repo.getByUserId(id); + } + /** * @param entity Exchange entity which we would like to delete */ diff --git a/restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java b/restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java index e255fe0..dccf17e 100644 --- a/restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java @@ -1,5 +1,6 @@ package com.plannaplan.controllers; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -9,6 +10,8 @@ import com.plannaplan.entities.Exchange; import com.plannaplan.entities.Groups; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; +import com.plannaplan.responses.mappers.ExchangeResponseMappers; +import com.plannaplan.responses.models.ExchangeResponse; import com.plannaplan.services.AssignmentService; import com.plannaplan.services.ExchangeService; import com.plannaplan.services.GroupService; @@ -19,6 +22,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -104,4 +108,18 @@ public class ExchangeController extends TokenBasedController{ this.exchangeService.deleteExchange(exchangeToDelete); return new ResponseEntity<>("Success", HttpStatus.OK); } + + @GetMapping("/exchange/all") + @ApiOperation(value = "Get exchange offers") + public ResponseEntity> getExchange() + throws UserNotFoundException { + + final User asker = this.getCurrentUser() + .orElseThrow(() -> new UserNotFoundException("Invalid token")); + + final List response = exchangeService.getByUserId(asker.getId()); + final List listOfResponses = ExchangeResponseMappers.mapToDefaultResponse(response); + + return new ResponseEntity<>(listOfResponses, HttpStatus.OK); + } } diff --git a/restservice/src/main/java/com/plannaplan/responses/mappers/ExchangeResponseMappers.java b/restservice/src/main/java/com/plannaplan/responses/mappers/ExchangeResponseMappers.java new file mode 100644 index 0000000..5adc9d6 --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/responses/mappers/ExchangeResponseMappers.java @@ -0,0 +1,14 @@ +package com.plannaplan.responses.mappers; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import com.plannaplan.entities.Exchange; +import com.plannaplan.responses.models.ExchangeResponse; + +public class ExchangeResponseMappers { + public static final List mapToDefaultResponse(List exchanges) { + return exchanges.stream().filter(Objects::nonNull).map(ExchangeResponse::new).collect(Collectors.toList()); + } +} diff --git a/restservice/src/main/java/com/plannaplan/responses/models/ExchangeResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/ExchangeResponse.java new file mode 100644 index 0000000..7e6057c --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/responses/models/ExchangeResponse.java @@ -0,0 +1,36 @@ +package com.plannaplan.responses.models; + +import com.plannaplan.entities.Exchange; + +public class ExchangeResponse { + private Long id; + private GroupDefaultResponse ownedAssignment; + private GroupDefaultResponse desiredGroup; + + public ExchangeResponse(Exchange exchange){ + this.id = exchange.getId(); + this.ownedAssignment = new GroupDefaultResponse(exchange.getOwnedAssignment().getGroup()); + this.desiredGroup = new GroupDefaultResponse(exchange.getDesiredAssignment()); + } + + public GroupDefaultResponse getDesiredGroup() { + return desiredGroup; + } + public void setDesiredGroup(GroupDefaultResponse desiredGroup) { + this.desiredGroup = desiredGroup; + } + public GroupDefaultResponse getOwnedAssignment() { + return ownedAssignment; + } + public void setOwnedAssignment(GroupDefaultResponse ownedAssignment) { + this.ownedAssignment = ownedAssignment; + } + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + +}