AuctionController.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package bidflow.bid.client.controller;
  2. import bidflow.bid.client.client.AuctionClient;
  3. import bidflow.bid.client.client.CatalogClient;
  4. import bidflow.bid.client.client.PersistenceClient;
  5. import bidflow.bid.client.client.UsersClient;
  6. import bidflow.bid.client.dto.CreateAuctionRequest;
  7. import bidflow.bid.client.dto.ItemDTO;
  8. import bidflow.bid.client.dto.User;
  9. import bidflow.bid.client.dto.UserResponse;
  10. import bidflow.bid.client.dto.Auction;
  11. import bidflow.bid.client.dto.AuctionView;
  12. import bidflow.bid.client.dto.BidRequest;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.stream.Collectors;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Controller;
  18. import org.springframework.ui.Model;
  19. import org.springframework.web.bind.annotation.*;
  20. @Controller
  21. public class AuctionController {
  22. @Autowired
  23. private AuctionClient auctionClient;
  24. @Autowired
  25. private CatalogClient catalogClient;
  26. @Autowired
  27. private PersistenceClient persistenceClient;
  28. @Autowired
  29. private UsersClient usersClient;
  30. @GetMapping("/")
  31. public String index(Model model) {
  32. List<ItemDTO> items = auctionClient.getItems();
  33. UserResponse usersResponse = usersClient.getUsers();
  34. List<Auction> historyRaw = persistenceClient.getHistory();
  35. List<User> users = new ArrayList<>();
  36. if (usersResponse != null && usersResponse.getEmbedded() != null) {
  37. users = usersResponse.getEmbedded().getUsers();
  38. }
  39. // Enriquecer histórico
  40. List<AuctionView> history = historyRaw.stream()
  41. .map(auction -> {
  42. ItemDTO item = catalogClient.getItemById(auction.getItemId());
  43. User winner = null;
  44. if (auction.getWinnerUserId() != null && !auction.getWinnerUserId().isEmpty()) {
  45. winner = usersClient.getUserById(auction.getWinnerUserId());
  46. }
  47. User seller = null;
  48. if (auction.getSellerId() != null && !auction.getSellerId().isEmpty()) {
  49. seller = usersClient.getUserById(auction.getSellerId());
  50. }
  51. String itemName = item != null ? item.getName() : "";
  52. String sellerUsername = seller != null ? seller.getUsername() : "";
  53. String winnerUsername = winner != null ? winner.getUsername() : "";
  54. return new AuctionView(
  55. itemName,
  56. sellerUsername,
  57. winnerUsername,
  58. auction.getFinalPrice()
  59. );
  60. })
  61. .collect(Collectors.toList());
  62. model.addAttribute("items", items);
  63. model.addAttribute("users", users);
  64. model.addAttribute("history", history);
  65. return "index";
  66. }
  67. @PostMapping("/create")
  68. public String createAuction(@RequestParam String itemId,
  69. @RequestParam Double startingPrice) {
  70. CreateAuctionRequest request = new CreateAuctionRequest();
  71. request.setItemId(itemId);
  72. request.setStartingPrice(startingPrice);
  73. auctionClient.createAuction(request);
  74. return "redirect:/";
  75. }
  76. @PostMapping("/bid")
  77. public String placeBid(@RequestParam String itemId,
  78. @RequestParam String userId,
  79. @RequestParam Double amount) {
  80. BidRequest request = new BidRequest();
  81. request.setItemId(itemId);
  82. request.setUserId(userId);
  83. request.setAmount(amount);
  84. auctionClient.placeBid(request);
  85. return "redirect:/";
  86. }
  87. }