Commit d835f0ae by Bright Sukumpanumet

- Set H2 database to persistence mode (db is saved to target/h2db); data added…

- Set H2 database to persistence mode (db is saved to target/h2db); data added to db will not disappear after stopping the program
- H2 database can now be viewed at http://localhost:8080/h2-console (JDBC URL:jdbc:h2:file:./target/h2db)
- Add feature adding item to cart; cart, with the same id as user's, automatically create when adding item to cart
- Comment out User and related classes for now
parent 801dac0a
Showing with 629 additions and 444 deletions
...@@ -61,19 +61,17 @@ ...@@ -61,19 +61,17 @@
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-api</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.amazonaws</groupId> <groupId>org.springframework</groupId>
<artifactId>DynamoDBLocal</artifactId> <artifactId>spring-websocket</artifactId>
<version>RELEASE</version>
</dependency> </dependency>
</dependencies>
<repositories>
<repository>
<id>dynamodb-local-oregon</id>
<name>DynamoDB Local Release Repository</name>
<url>https://s3-us-west-2.amazonaws.com/dynamodb-local/release</url>
</repository>
</repositories>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
</dependency>
</dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
......
...@@ -33,36 +33,36 @@ public class Application { ...@@ -33,36 +33,36 @@ public class Application {
SpringApplication.run(Application.class, args); SpringApplication.run(Application.class, args);
} }
@Bean // @Bean
public CommandLineRunner run(ApplicationContext appContext) { // public CommandLineRunner run(ApplicationContext appContext) {
return args -> { // return args -> {
ItemController itemController = appContext.getBean(ItemController.class); // ItemController itemController = appContext.getBean(ItemController.class);
for (int i=0; i<5; i++) { // for (int i=0; i<5; i++) {
Item item = new Item( // Item item = new Item(
"title" + i, // "title" + i,
"desc" + i, // "desc" + i,
(long) i, // (long) i,
5.0, // 5.0,
500.0, // 500.0,
"https://www.sprint.com/content/dam/sprint/commerce/devices/apple/iphone_xr/red/devicenb_650x900.png/jcr:content/renditions/cq5dam.thumbnail.290.370.png", // "https://www.sprint.com/content/dam/sprint/commerce/devices/apple/iphone_xr/red/devicenb_650x900.png/jcr:content/renditions/cq5dam.thumbnail.290.370.png",
(long) i // (long) i
); // );
itemController.addItem(item); // itemController.addItem(item);
System.out.println(i); // System.out.println(i);
} // }
}; // };
} // }
@Bean // @Bean
public WebMvcConfigurer corsConfigurer() { // public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() { // return new WebMvcConfigurer() {
@Override // @Override
public void addCorsMappings(CorsRegistry registry) { // public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // registry.addMapping("/**")
.allowedOrigins("http://localhost:3000") // .allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST","PUT", "DELETE"); // .allowedMethods("GET", "POST","PUT", "DELETE");
} // }
}; // };
} // }
} }
// end::code[] // end::code[]
\ No newline at end of file
...@@ -16,11 +16,14 @@ public class Bid ...@@ -16,11 +16,14 @@ public class Bid
@NotNull @NotNull
private Long userId; private Long userId;
private Long amount; private Double amount;
private String itemId;
private Long itemId;
private Date time; private Date time;
public Bid(Long userId, Long amount, String itemId, Date time) public Bid(){}
public Bid(Long userId, Double amount, Long itemId, Date time)
{ {
this.userId = userId; this.userId = userId;
this.amount = amount; this.amount = amount;
...@@ -43,22 +46,22 @@ public class Bid ...@@ -43,22 +46,22 @@ public class Bid
this.userId = userId; this.userId = userId;
} }
public Long getAmount() public Double getAmount()
{ {
return amount; return amount;
} }
public void setAmount(Long amount) public void setAmount(Double amount)
{ {
this.amount = amount; this.amount = amount;
} }
public String getItemId() public Long getItemId()
{ {
return itemId; return itemId;
} }
public void setItemId(String itemId) public void setItemId(Long itemId)
{ {
this.itemId = itemId; this.itemId = itemId;
} }
......
package edu.uchicago.mpcs.topics.auction; 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 javax.persistence.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@Entity @Entity
public class Item public class Item
...@@ -20,9 +27,16 @@ public class Item ...@@ -20,9 +27,16 @@ public class Item
private double currentPrice; private double currentPrice;
private double buyNowPrice; private double buyNowPrice;
private Date startTime; //Start the auction when the current time matches the start time defined by the user
private Date endTime; //Allowing auction window to be set by the bidder, and begin countdown to the end of the bidding window once auction begins
@Column(length = 2000) @Column(length = 2000)
private String photoUrl; private String photoUrl;
private Long userId; private Long userId; //seller
@ManyToMany(mappedBy = "items")
@JsonIgnore
private Set<ShoppingCart> shopping_carts = new HashSet<>(); //must have the same name as the table
public Item() public Item()
{ {
...@@ -44,6 +58,12 @@ public class Item ...@@ -44,6 +58,12 @@ public class Item
return itemId; return itemId;
} }
public void setItemId(Long itemId)
{
this.itemId = itemId;
}
public String getTitle() public String getTitle()
{ {
return title; return title;
...@@ -113,4 +133,17 @@ public class Item ...@@ -113,4 +133,17 @@ public class Item
{ {
this.userId = userId; this.userId = userId;
} }
@JsonIgnore
public Set<ShoppingCart> getShopping_carts()
{
return shopping_carts;
}
public Item addShoppingCart(ShoppingCart shoppingCart)
{
this.shopping_carts.add(shoppingCart);
shoppingCart.getItems().add(this);
return this;
}
} }
package edu.uchicago.mpcs.topics.auction;
import javax.persistence.Entity;
/**
* Created by Bright on 2018-11-27.
*/
public class Order
{
}
package edu.uchicago.mpcs.topics.controller; //package edu.uchicago.mpcs.topics.controller;
//
import edu.uchicago.mpcs.topics.service.AdminService; //import edu.uchicago.mpcs.topics.service.AdminService;
import edu.uchicago.mpcs.topics.user.User; //import edu.uchicago.mpcs.topics.user.User;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; //import org.springframework.web.bind.annotation.*;
//
import java.util.List; //import java.util.List;
//
/** ///**
* Created by Rex on 2018-11-19 // * Created by Rex on 2018-11-19
*/ // */
//
@RestController //@RestController
@RequestMapping("/user") //@RequestMapping("/user")
public class AdminController { //public class AdminController {
//
@Autowired // @Autowired
private AdminService adminService; // private AdminService adminService;
//
@GetMapping("/list") // @GetMapping("/list")
public List<User> getAllUsers() // public List<User> getAllUsers()
{ // {
return adminService.getAllUsers(); // return adminService.getAllUsers();
} // }
//
@PostMapping("/add") // @PostMapping("/add")
public void addUser(@RequestBody User user) // public void addUser(@RequestBody User user)
{ // {
adminService.addUser(user); // adminService.addUser(user);
} // }
//
//
@DeleteMapping("/remove") // @DeleteMapping("/remove")
public void removeUser(@RequestBody User user) //or change to item ID // public void removeUser(@RequestBody User user) //or change to item ID
{ // {
adminService.deleteUser(user.getUserId()); // adminService.deleteUser(user.getUserId());
} // }
//
@PutMapping("/update") // @PutMapping("/update")
public void updateUser(@RequestBody User user) // public void updateUser(@RequestBody User user)
{ // {
adminService.updateUser(user); // adminService.updateUser(user);
} // }
//
} //}
...@@ -19,8 +19,8 @@ public class BidController ...@@ -19,8 +19,8 @@ public class BidController
private BidService bidService; private BidService bidService;
@PostMapping @PostMapping
public void addItem(@RequestBody Bid bid) public Bid addBid(@RequestBody Bid bid)
{ {
bidService.addBid(bid); return bidService.addBid(bid);
} }
} }
\ No newline at end of file
package edu.uchicago.mpcs.topics.controller; 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.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.Buyer; import edu.uchicago.mpcs.topics.user.Buyer;
import org.springframework.web.bind.annotation.*;
public interface CheckoutController { @RestController
void manageShoppingCart(ShoppingCart shoppingCart); @RequestMapping("/checkout")
void checkout(Buyer buyer); 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; package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Item; import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import edu.uchicago.mpcs.topics.service.ItemService; import edu.uchicago.mpcs.topics.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
...@@ -16,8 +16,14 @@ import java.util.Optional; ...@@ -16,8 +16,14 @@ import java.util.Optional;
@RequestMapping("/item") @RequestMapping("/item")
public class ItemController public class ItemController
{ {
@Autowired
private ItemService itemService; private ItemService itemService;
private ItemRepository itemRepository;
public ItemController(ItemService itemService, ItemRepository itemRepository)
{
this.itemService = itemService;
this.itemRepository = itemRepository;
}
@GetMapping @GetMapping
public Optional<Item> getItem(@RequestBody Item item) public Optional<Item> getItem(@RequestBody Item item)
...@@ -25,13 +31,20 @@ public class ItemController ...@@ -25,13 +31,20 @@ public class ItemController
return itemService.getItem(item); return itemService.getItem(item);
} }
@GetMapping("/{id}")
public Item getItem(@PathVariable Long id)
{
return itemRepository.findById(id).orElse(null);
}
@GetMapping("/list") @GetMapping("/list")
public List<Item> getAllItems() public List<Item> getAllItems()
{ {
return itemService.getAllItems(); return itemService.getAllItems();
} }
@PostMapping("/add") @PostMapping("/add") //add new item
public Item addItem(@RequestBody Item item) public Item addItem(@RequestBody Item item)
{ {
return itemService.addItem(item); return itemService.addItem(item);
......
...@@ -2,6 +2,8 @@ package edu.uchicago.mpcs.topics.controller; ...@@ -2,6 +2,8 @@ package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.ItemCategory; import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.auction.Listing; import edu.uchicago.mpcs.topics.auction.Listing;
import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
......
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 org.springframework.web.bind.annotation.*;
/**
* Created by Bright on 2018-11-26.
*/
@RestController
@RequestMapping("/shoppingcart")
public class ShoppingCartController
{
private ShoppingCartService shoppingCartService;
private ShoppingCartRepository shoppingCartRepository;
public ShoppingCartController(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; //package edu.uchicago.mpcs.topics.controller;
//
<<<<<<< HEAD //
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException; //import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException; //import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
======= //import edu.uchicago.mpcs.topics.service.UserService;
>>>>>>> master //import edu.uchicago.mpcs.topics.user.User;
import edu.uchicago.mpcs.topics.service.UserService; //import org.springframework.beans.factory.annotation.Autowired;
import edu.uchicago.mpcs.topics.user.User; //import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired; //
import org.springframework.web.bind.annotation.*; //
///**
// * Created by Rex on 2018-11-19
/** // */
* Created by Rex on 2018-11-19 //
*/ //@RestController
//@RequestMapping("/user")
@RestController //public class UserController {
@RequestMapping("/user") //
public class UserController { // @Autowired
// private UserService userService;
@Autowired //
private UserService userService; // /**
// * Register new User.
/** // */
* Register new User. // @PostMapping("/add")
*/ // public void register(@RequestBody User user) throws UserAlreadyExistException{
@PostMapping("/add") // userService.register(user);
public void register(@RequestBody User user) throws UserAlreadyExistException{ // }
userService.register(user); //
} // /**
// * User Login.
/** // */
* User Login. // @PostMapping("/add")
*/ // public void login(@RequestBody User user) throws UserNotFoundException {
@PostMapping("/add") // userService.login(user);
public void login(@RequestBody User user) throws UserNotFoundException { // }
userService.login(user); //
} //}
}
package edu.uchicago.mpcs.topics.db.Impl; //package edu.uchicago.mpcs.topics.db.Impl;
//
import edu.uchicago.mpcs.topics.db.UserRepository; //import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.query.UserQuery; //import edu.uchicago.mpcs.topics.query.UserQuery;
import edu.uchicago.mpcs.topics.user.User; //import edu.uchicago.mpcs.topics.user.User;
import org.hibernate.query.Query; //import org.hibernate.query.Query;
import org.hibernate.SessionFactory; //import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; //import org.springframework.stereotype.Repository;
//
import java.io.Serializable; //import java.io.Serializable;
import java.math.BigInteger; //import java.math.BigInteger;
import java.util.Optional; //import java.util.Optional;
//
/** ///**
* Created by Rex on 2018-11-20 // * Created by Rex on 2018-11-20
*/ // */
//
@Repository //@Repository
public class UserRepositoryImpl implements UserRepository { //public class UserRepositoryImpl implements UserRepository {
//
@Autowired // @Autowired
private SessionFactory sessionFactory; // private SessionFactory sessionFactory;
//
@Override // @Override
public User register(User user) { // public User register(User user) {
Serializable userId = sessionFactory.getCurrentSession().save(user); // Serializable userId = sessionFactory.getCurrentSession().save(user);
return user; // return user;
} // }
//
@Override // @Override
public User login(String email, String password) { // public User login(String email, String password) {
Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.IS_AUTHENTICATED); // Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.IS_AUTHENTICATED);
query.setParameter("email", email); // query.setParameter("email", email);
query.setParameter("password", password); // query.setParameter("password", password);
User userFetched = (User) query.uniqueResult(); // User userFetched = (User) query.uniqueResult();
return userFetched; // return userFetched;
} // }
//
@Override // @Override
public boolean isUserAlreadyExist(String email) { // public boolean isUserAlreadyExist(String email) {
Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.IS_USER_ID_EXIST); // Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.IS_USER_ID_EXIST);
query.setParameter("email", email); // query.setParameter("email", email);
BigInteger count = (BigInteger) query.uniqueResult(); // BigInteger count = (BigInteger) query.uniqueResult();
if (count.intValue() > 0) { // if (count.intValue() > 0) {
return true; // return true;
} // }
return false; // return false;
} // }
//
@Override // @Override
public Optional<User> getUserByEmail(String email) { // public Optional<User> getUserByEmail(String email) {
Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.USER_BY_EMAIL); // Query query = sessionFactory.getCurrentSession().createQuery(UserQuery.USER_BY_EMAIL);
query.setParameter("email", email); // query.setParameter("email", email);
User user = (User) query.uniqueResult(); // User user = (User) query.uniqueResult();
return Optional.ofNullable(user); // return Optional.ofNullable(user);
} // }
//
@Override // @Override
public <S extends User> S save(S s) { // public <S extends User> S save(S s) {
return null; // return null;
} // }
//
@Override // @Override
public <S extends User> Iterable<S> saveAll(Iterable<S> iterable) { // public <S extends User> Iterable<S> saveAll(Iterable<S> iterable) {
return null; // return null;
} // }
//
@Override // @Override
public Optional<User> findById(String s) { // public Optional<User> findById(String s) {
return Optional.empty(); // return Optional.empty();
} // }
//
@Override // @Override
public boolean existsById(String s) { // public boolean existsById(String s) {
return false; // return false;
} // }
//
@Override // @Override
public Iterable<User> findAll() { // public Iterable<User> findAll() {
return null; // return null;
} // }
//
@Override // @Override
public Iterable<User> findAllById(Iterable<String> iterable) { // public Iterable<User> findAllById(Iterable<String> iterable) {
return null; // return null;
} // }
//
@Override // @Override
public long count() { // public long count() {
return 0; // return 0;
} // }
//
@Override // @Override
public void deleteById(String s) { // public void deleteById(String s) {
//
} // }
//
@Override // @Override
public void delete(User user) { // public void delete(User user) {
//
} // }
//
@Override // @Override
public void deleteAll(Iterable<? extends User> iterable) { // public void deleteAll(Iterable<? extends User> iterable) {
//
} // }
//
@Override // @Override
public void deleteAll() { // public void deleteAll() {
//
} // }
} //}
\ No newline at end of file \ No newline at end of file
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import org.springframework.data.repository.CrudRepository;
/**
* Created by Bright on 2018-11-26.
*/
public interface ShoppingCartRepository extends CrudRepository<ShoppingCart, Long>
{
}
package edu.uchicago.mpcs.topics.db; //package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.user.User; //import edu.uchicago.mpcs.topics.user.User;
//
import org.springframework.data.repository.CrudRepository; //import org.springframework.data.repository.CrudRepository;
//
import java.util.Optional; //import java.util.Optional;
//
/** ///**
* Modified by Rex on 2018-11-19 // * Modified by Rex on 2018-11-19
*/ // */
//
public interface UserRepository extends CrudRepository<User, String>{ //public interface UserRepository extends CrudRepository<User, String>{
User register(User user); // User register(User user);
//
User login(String email, String password); // User login(String email, String password);
//
boolean isUserAlreadyExist(String userId); // boolean isUserAlreadyExist(String userId);
//
Optional<User> getUserByEmail(String email); // Optional<User> getUserByEmail(String email);
} //}
package edu.uchicago.mpcs.topics.service; //package edu.uchicago.mpcs.topics.service;
//
import edu.uchicago.mpcs.topics.db.UserRepository; //import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.db.UserRepository; //import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.user.User; //import edu.uchicago.mpcs.topics.user.User;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; //import org.springframework.stereotype.Service;
import java.util.List; //import java.util.List;
import java.util.ArrayList; //import java.util.ArrayList;
//
/** ///**
* Modified by Rex on 2018-11-19 // * Modified by Rex on 2018-11-19
*/ // */
//
@Service //@Service
public class AdminService { //public class AdminService {
// void block(User user); //// void block(User user);
// void remove(User user); //// void remove(User user);
// void suspend(User user); //// void suspend(User user);
// void addCategory(ItemCategory itemCategory); //// void addCategory(ItemCategory itemCategory);
// void modifyCategory(ItemCategory itemCategory); //// void modifyCategory(ItemCategory itemCategory);
// void removeCategory(ItemCategory itemCategory); //// void removeCategory(ItemCategory itemCategory);
// void stopAuction(Listing listing, User user); //// void stopAuction(Listing listing, User user);
// List<Listing> viewFlaggedItems(); //// List<Listing> viewFlaggedItems();
// List<Listing> viewInProgressItems(); //// List<Listing> viewInProgressItems();
// List<Listing> viewClosed(Query query); //// List<Listing> viewClosed(Query query);
@Autowired // @Autowired
private UserRepository userDB; // private UserRepository userDB;
//
public List<User> getAllUsers() // public List<User> getAllUsers()
{ // {
List<User> users = new ArrayList<>(); // List<User> users = new ArrayList<>();
userDB.findAll().forEach(users::add); // userDB.findAll().forEach(users::add);
return users; // return users;
} // }
//
public void addUser(User user) // public void addUser(User user)
{ // {
userDB.save(user); // userDB.save(user);
} // }
//
public void deleteUser(String userId) // public void deleteUser(String userId)
{ // {
userDB.deleteById(userId); // userDB.deleteById(userId);
} // }
//
public void updateUser(User user) // public void updateUser(User user)
{ // {
userDB.save(user); // userDB.save(user);
} // }
//
} //}
package edu.uchicago.mpcs.topics.service; package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.Bid; import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.db.BidRepository; import edu.uchicago.mpcs.topics.db.BidRepository;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Optional;
/** /**
* Created by Bright on 2018-11-18. * Created by Bright on 2018-11-18.
*/ */
...@@ -14,9 +18,19 @@ public class BidService ...@@ -14,9 +18,19 @@ public class BidService
{ {
@Autowired @Autowired
private BidRepository bidRepository; private BidRepository bidRepository;
@Autowired
private ItemRepository itemRepository;
public void addBid(Bid bid) public Bid addBid(Bid bid)
{ {
bidRepository.save(bid);
//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);
} }
} }
...@@ -2,6 +2,7 @@ package edu.uchicago.mpcs.topics.service; ...@@ -2,6 +2,7 @@ package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.auction.ItemCategory; import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.auction.Listing; import edu.uchicago.mpcs.topics.auction.Listing;
import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
......
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 org.springframework.stereotype.Service;
/**
* Created by Bright on 2018-11-26.
*/
@Service
public class ShoppingCartService
{
private final ShoppingCartRepository shoppingCartRepository;
private final ItemRepository itemRepository;
public ShoppingCartService(ShoppingCartRepository shoppingCartRepository, ItemRepository itemRepository)
{
this.shoppingCartRepository = shoppingCartRepository;
this.itemRepository = itemRepository;
}
public ShoppingCart addItem(Long shoppingCartId, Item item)
{
ShoppingCart shoppingCartToUpdate = shoppingCartRepository.findById(shoppingCartId)
.orElse(new ShoppingCart(shoppingCartId));
shoppingCartToUpdate.addItem(item);
return shoppingCartRepository.save(shoppingCartToUpdate);
}
}
\ No newline at end of file
package edu.uchicago.mpcs.topics.service.impl;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.auction.Listing;
import edu.uchicago.mpcs.topics.service.BiddingService;
import edu.uchicago.mpcs.topics.transaction.ShoppingCart;
import edu.uchicago.mpcs.topics.user.User;
/**
* Created by HSong on 2018/11/4.
*/
public class BiddingServiceImpl implements BiddingService {
@Override
public void placeBid(Listing listing, Bid bid) {
}
@Override
public void buyNow(Listing listing, ShoppingCart shoppingCart) {
}
@Override
public void notifyUser(Listing listing, User user) {
}
@Override
public void createListing(Listing listing) {
}
@Override
public Listing updateListing(Listing listing) {
return null;
}
@Override
public boolean removeListing(Listing listing, User user) {
return false;
}
}
package edu.uchicago.mpcs.topics.service.impl; //package edu.uchicago.mpcs.topics.service.impl;
//
import edu.uchicago.mpcs.topics.db.UserRepository; //import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException; //import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException; //import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.service.UserService; //import edu.uchicago.mpcs.topics.service.UserService;
import edu.uchicago.mpcs.topics.user.User; //import edu.uchicago.mpcs.topics.user.User;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; //import org.springframework.stereotype.Service;
//
/** ///**
* Created by Rex on 2018-11-20 // * Created by Rex on 2018-11-20
*/ // */
//
@Service //@Service
public class UserServiceImpl implements UserService { //public class UserServiceImpl implements UserService {
//
@Autowired // @Autowired
private UserRepository userRepository; // private UserRepository userRepository;
//
/** // /**
* Register user. // * Register user.
* // *
* @param user // * @param user
* @throws UserAlreadyExistException // * @throws UserAlreadyExistException
*/ // */
@Override // @Override
public void register(User user) throws UserAlreadyExistException { // public void register(User user) throws UserAlreadyExistException {
String email = user.getEmail(); // String email = user.getEmail();
String password = user.getPassword(); // String password = user.getPassword();
boolean isAdmin = user.getIsAdmin(); // boolean isAdmin = user.getIsAdmin();
//
if (!userRepository.isUserAlreadyExist(email)) { // if (!userRepository.isUserAlreadyExist(email)) {
user.setPassword(password); // user.setPassword(password);
user.setEmail(email); // user.setEmail(email);
user.setIsAdmin(isAdmin); // user.setIsAdmin(isAdmin);
userRepository.register(user); // userRepository.register(user);
} else { // } else {
throw new UserAlreadyExistException("user id being used, please try with other."); // throw new UserAlreadyExistException("user id being used, please try with other.");
} // }
} // }
/** // /**
* User login. // * User login.
* // *
* @param user // * @param user
* @return // * @return
* @throws UserNotFoundException // * @throws UserNotFoundException
*/ // */
@Override // @Override
public User login(User user) throws UserNotFoundException { // public User login(User user) throws UserNotFoundException {
String email = user.getEmail(); // String email = user.getEmail();
String password = user.getPassword(); // String password = user.getPassword();
//
user = userRepository.login(email, password); // user = userRepository.login(email, password);
if (user == null) { // if (user == null) {
throw new UserNotFoundException(String.format("User not found %s", email)); // throw new UserNotFoundException(String.format("User not found %s", email));
} // }
return user; // return user;
} // }
} //}
package edu.uchicago.mpcs.topics.transaction; package edu.uchicago.mpcs.topics.transaction;
import edu.uchicago.mpcs.topics.auction.Listing; import edu.uchicago.mpcs.topics.auction.Item;
import java.util.List; import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
public class ShoppingCart { @Entity
private List<Listing> listings; @Table(name = "shopping_cart")
public class ShoppingCart
{
public List<Listing> getListings() {
return listings; @Id
private Long shoppingCartId;
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(name = "cart_item",
joinColumns = @JoinColumn(name = "cart_id", referencedColumnName = "shoppingCartId"),
inverseJoinColumns = @JoinColumn(name = "item_id", referencedColumnName = "itemId"))
private Set<Item> items = new HashSet<>();
public ShoppingCart()
{}
public ShoppingCart(Long shoppingCartId)
{
this.shoppingCartId = shoppingCartId;
}
public ShoppingCart addItem(Item item)
{
this.items.add(item);
item.getShopping_carts().add(this);
return this;
}
public ShoppingCart removeItem(Item item)
{
this.items.remove(item);
return this;
}
public Long getShoppingCartId()
{
return shoppingCartId;
} }
public void setListings(List<Listing> listings) { public Set<Item> getItems()
this.listings = listings; {
return items;
} }
} }
spring.data.rest.base-path=/api spring.data.rest.base-path=/api
spring.h2.console.enabled=true spring.h2.console.enabled=true
\ No newline at end of file spring.jpa.hibernate.ddl-auto = update
spring.datasource.url=jdbc:h2:file:./target/h2db;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.driver-class-name=org.h2.Driver
\ No newline at end of file
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