Commit c51b3a02 by Bright Sukumpanumet

Tons of changes. See Trello for details

parent d835f0ae
Showing with 283 additions and 239 deletions
......@@ -21,6 +21,9 @@ public class Bid
private Long itemId;
private Date time;
private Status status;
public Bid(){}
public Bid(Long userId, Double amount, Long itemId, Date time)
......@@ -75,4 +78,14 @@ public class Bid
{
this.time = time;
}
public Status getStatus()
{
return status;
}
public void setStatus(Status status)
{
this.status = status;
}
}
......@@ -2,8 +2,6 @@ package edu.uchicago.mpcs.topics.auction;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import javax.persistence.*;
import java.util.Date;
......@@ -34,6 +32,9 @@ public class Item
private String photoUrl;
private Long userId; //seller
private Status status;
@ManyToMany(mappedBy = "items")
@JsonIgnore
private Set<ShoppingCart> shopping_carts = new HashSet<>(); //must have the same name as the table
......@@ -146,4 +147,14 @@ public class Item
shoppingCart.getItems().add(this);
return this;
}
public Status getStatus()
{
return status;
}
public void setStatus(Status status)
{
this.status = status;
}
}
......@@ -5,34 +5,35 @@ import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Entity
public class ItemCategory
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long ItemCategoryId;
private Long itemCategoryId;
@NotBlank
private String ItemCategoryName;
@NotNull
private String itemCategoryName;
public ItemCategory(String itemCategoryName)
{
ItemCategoryName = itemCategoryName;
itemCategoryName = itemCategoryName;
}
public Long getItemCategoryId()
{
return ItemCategoryId;
return itemCategoryId;
}
public String getItemCategoryName()
{
return ItemCategoryName;
return itemCategoryName;
}
public void setItemCategoryName(String itemCategoryName)
{
ItemCategoryName = itemCategoryName;
itemCategoryName = itemCategoryName;
}
}
package edu.uchicago.mpcs.topics.auction;
import edu.uchicago.mpcs.topics.user.Seller;
import java.util.List;
public class Listing {
private String id;
private Item item;
private ItemCategory itemCategory;
private TimeTracker timeTracker;
private Seller owner;
private List<Bid> bids;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public ItemCategory getItemCategory() {
return itemCategory;
}
public void setItemCategory(ItemCategory itemCategory) {
this.itemCategory = itemCategory;
}
public TimeTracker getTimeTracker() {
return timeTracker;
}
public void setTimeTracker(TimeTracker timeTracker) {
this.timeTracker = timeTracker;
}
public Seller getOwner() {
return owner;
}
public void setOwner(Seller owner) {
this.owner = owner;
}
public List<Bid> getBids() {
return bids;
}
public void setBids(List<Bid> bids) {
this.bids = bids;
}
}
package edu.uchicago.mpcs.topics.auction;
import javax.persistence.Entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Bright on 2018-11-27.
*/
@Entity
public class Order
{
@Id
private Long orderId;
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(name = "order_item",
joinColumns = @JoinColumn(name = "order_id", referencedColumnName = "orderId"),
inverseJoinColumns = @JoinColumn(name = "item_id", referencedColumnName = "itemId"))
private Set<Item> items = new HashSet<>();
public Order()
{}
public Order(Long orderId)
{
this.orderId = orderId;
}
public Set<Item> getItems()
{
return items;
}
}
package edu.uchicago.mpcs.topics.transaction;
import edu.uchicago.mpcs.topics.auction.Item;
package edu.uchicago.mpcs.topics.auction;
import javax.persistence.*;
import java.util.HashSet;
......@@ -39,6 +37,17 @@ public class ShoppingCart
public ShoppingCart removeItem(Item item)
{
this.items.remove(item);
item.getShopping_carts().remove(this);
return this;
}
public ShoppingCart removeAllItems()
{
for (Item item : items)
{
this.items.remove(item);
item.getShopping_carts().remove(this);
}
return this;
}
......
package edu.uchicago.mpcs.topics.auction;
/**
* Created by Bright on 2018-11-29.
*/
public enum Status
{
ACTIVE, INACTIVE, FAILED, INAPPROPRIATE, COUNTERFEIT, SUSPENDED, DELETED, HASBID
}
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.Listing;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.User;
public interface BiddingController {
void placeBid(Listing listing, Bid bid);
void buyNow(Listing listing, ShoppingCart shoppingCart);
void notifyUser(Listing listing, User user);
void createListing(Listing listing);
Listing updateListing(Listing listing);
boolean removeListing(Listing listing, User user);
}
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.db.ShoppingCartRepository;
import edu.uchicago.mpcs.topics.service.ShoppingCartService;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.Buyer;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/checkout")
public class CheckoutController
{
private ShoppingCartService shoppingCartService;
private ShoppingCartRepository shoppingCartRepository;
public CheckoutController(ShoppingCartService shoppingCartService, ShoppingCartRepository shoppingCartRepository)
{
this.shoppingCartService = shoppingCartService;
this.shoppingCartRepository = shoppingCartRepository;
}
@GetMapping("/{id}")
public ShoppingCart getShoppingCart(@PathVariable Long id)
{
return shoppingCartRepository.findById(id).orElse(null);
}
@PostMapping("/{id}/add_item") //add item to cart
public ShoppingCart addItem(@PathVariable Long id, @RequestBody Item item)
{
return shoppingCartService.addItem(id, item);
}
}
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.Status;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import edu.uchicago.mpcs.topics.service.ItemService;
import org.springframework.web.bind.annotation.*;
......@@ -50,15 +51,21 @@ public class ItemController
return itemService.addItem(item);
}
@DeleteMapping("/remove")
public void removeItem(@RequestBody Item item) //or change to item ID
@DeleteMapping("/{id}")
public Item deleteItem(@PathVariable Long id)
{
itemService.deleteItem(item.getItemId());
return itemService.deleteItem(id);
}
@PutMapping("/update")
public void updateItem(@RequestBody Item item)
public Item updateItem(@RequestBody Item item)
{
itemService.updateItem(item);
return itemRepository.save(item);
}
@PostMapping("/flag")
public Item flagItem(@RequestBody Item item)
{
return itemRepository.save(item);
}
}
\ No newline at end of file
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.auction.Listing;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface SearchController {
List<Listing> search(Query query);
List<Listing> search(ItemCategory itemCategory);
}
//package edu.uchicago.mpcs.topics.controller;
//
//import edu.uchicago.mpcs.topics.auction.ItemCategory;
//import org.springframework.data.jpa.repository.Query;
//
//
//import java.util.List;
//
//public interface SearchController {
// List<Listing> search(Query query);
// List<Listing> search(ItemCategory itemCategory);
//}
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.Order;
import edu.uchicago.mpcs.topics.db.OrderRepository;
import edu.uchicago.mpcs.topics.db.ShoppingCartRepository;
import edu.uchicago.mpcs.topics.service.OrderService;
import edu.uchicago.mpcs.topics.service.ShoppingCartService;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.auction.ShoppingCart;
import org.springframework.web.bind.annotation.*;
/**
......@@ -16,6 +19,8 @@ public class ShoppingCartController
{
private ShoppingCartService shoppingCartService;
private ShoppingCartRepository shoppingCartRepository;
private OrderService orderService;
private OrderRepository orderRepository;
public ShoppingCartController(ShoppingCartService shoppingCartService, ShoppingCartRepository shoppingCartRepository)
{
......@@ -36,4 +41,18 @@ public class ShoppingCartController
{
return shoppingCartService.addItem(id, item);
}
@DeleteMapping("/{id}/remove_item") //remove item from cart
public ShoppingCart removeItem(@PathVariable Long id, @RequestBody Item item)
{
return shoppingCartService.removeItem(shoppingCartRepository.findById(id).orElse(null), item);
}
@PostMapping ("/{id}/checkout")
public Order checkout(@PathVariable Long id, @RequestBody Order order)
{
// save order (checkout) to db
shoppingCartService.checkout(shoppingCartRepository.findById(id).orElse(null));
return orderService.checkout(order);
}
}
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.db.ItemCategoryRepository;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Bright on 2018-11-29.
*/
@RestController
@RequestMapping("/category")
public class itemCategoryController
{
//repository
ItemCategoryRepository itemCategoryRepository;
public itemCategoryController(ItemCategoryRepository itemCategoryRepository)
{
this.itemCategoryRepository = itemCategoryRepository;
}
//get all category
@GetMapping
public List<ItemCategory> getAllCategories()
{
List<ItemCategory> categories = new ArrayList<>();
itemCategoryRepository.findAll().forEach(categories::add);
return categories;
}
//add category
@PostMapping
public ItemCategory addItemCategory(@RequestBody ItemCategory itemCategory)
{
return itemCategoryRepository.save(itemCategory);
}
//remove category ...disable remove category because of possible consequences
// @DeleteMapping("/{id}")
// public void removeItemCategory(@PathVariable Long id)
// {
// itemCategoryRepository.deleteById(id);
// }
}
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.auction.ItemCategory;
import org.springframework.data.repository.CrudRepository;
/**
* Created by Bright on 2018-11-29.
*/
public interface ItemCategoryRepository extends CrudRepository<ItemCategory, Long>
{
}
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.auction.Listing;
import java.util.List;
public interface ListingDB {
void create(Listing listing);
List<Listing> getAll(Listing listing);
void update(Listing listing);
}
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.auction.Order;
import org.springframework.data.repository.CrudRepository;
/**
* Created by Bright on 2018-11-29.
*/
public interface OrderRepository extends CrudRepository<Order, Long>
{
}
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.auction.ShoppingCart;
import org.springframework.data.repository.CrudRepository;
/**
......
......@@ -2,6 +2,7 @@ package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.Status;
import edu.uchicago.mpcs.topics.db.BidRepository;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -27,10 +28,20 @@ public class BidService
//update item current price
Item itemToUpdate = itemRepository.findById(bid.getItemId()).orElse(null);
itemToUpdate.setItemId(bid.getItemId());
itemToUpdate.setCurrentPrice(bid.getAmount());
itemRepository.save(itemToUpdate);
return bidRepository.save(bid);
if (itemToUpdate.getCurrentPrice() < bid.getAmount())
{
itemToUpdate.setItemId(bid.getItemId());
itemToUpdate.setCurrentPrice(bid.getAmount());
itemRepository.save(itemToUpdate);
bid.setStatus(Status.ACTIVE);
return bidRepository.save(bid);
}
else
{
bid.setStatus(Status.FAILED);
return bidRepository.save(bid);
}
}
}
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.Listing;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.User;
public interface BiddingService {
void placeBid(Listing listing, Bid bid);
void buyNow(Listing listing, ShoppingCart shoppingCart);
void notifyUser(Listing listing, User user);
void createListing(Listing listing);
Listing updateListing(Listing listing);
boolean removeListing(Listing listing, User user);
}
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.Buyer;
public interface CheckoutService {
void manageShoppingCart(ShoppingCart shoppingCart);
void checkout(Buyer buyer);
}
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.Status;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -32,9 +33,17 @@ public class ItemService
return itemRepository.save(item);
}
public void deleteItem(Long id)
public Item deleteItem(Long id)
{
itemRepository.deleteById(id);
Item itemToRemove = itemRepository.findById(id).orElse(null);
// check if status is HASBID, if not then set it DELETED
if (itemToRemove.getStatus() != Status.HASBID)
{
itemToRemove.setStatus(Status.DELETED);
}
return itemRepository.save(itemToRemove);
}
public void updateItem(Item item)
......
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.Order;
import edu.uchicago.mpcs.topics.auction.Status;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import edu.uchicago.mpcs.topics.db.OrderRepository;
import org.springframework.stereotype.Service;
/**
* Created by Bright on 2018-11-29.
*/
@Service
public class OrderService
{
private OrderRepository orderRepository;
private ItemRepository itemRepository;
public OrderService(OrderRepository orderRepository, ItemRepository itemRepository)
{
this.orderRepository = orderRepository;
}
//create an order
public Order checkout(Order order)
{
//set item status as DELETED
for (Item item : order.getItems())
{
item.setStatus(Status.DELETED);
itemRepository.save(item);
}
return orderRepository.save(order);
}
}
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.auction.Listing;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface SearchEngine {
List<Listing> search(Query query);
List<Listing> search(ItemCategory itemCategory);
}
......@@ -3,7 +3,7 @@ package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import edu.uchicago.mpcs.topics.db.ShoppingCartRepository;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.auction.ShoppingCart;
import org.springframework.stereotype.Service;
/**
......@@ -30,4 +30,18 @@ public class ShoppingCartService
return shoppingCartRepository.save(shoppingCartToUpdate);
}
//TODO: will it actually delete?
public ShoppingCart removeItem(ShoppingCart shoppingCart, Item item)
{
shoppingCart.removeItem(item);
return shoppingCartRepository.save(shoppingCart);
}
public ShoppingCart checkout(ShoppingCart shoppingCart)
{
//for each item in order delete item from shopping cart
return shoppingCart.removeAllItems();
}
}
\ No newline at end of file
package edu.uchicago.mpcs.topics.transaction;
import edu.uchicago.mpcs.topics.auction.Listing;
import edu.uchicago.mpcs.topics.user.Buyer;
public class Transaction {
private Listing listing;
private Buyer buyer;
public Listing getListing() {
return listing;
}
public void setListing(Listing listing) {
this.listing = listing;
}
public Buyer getBuyer() {
return buyer;
}
public void setBuyer(Buyer buyer) {
this.buyer = buyer;
}
}
package edu.uchicago.mpcs.topics.user;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import javax.persistence.Entity;
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment