Commit 99535670 by Hao-Hsiang Song

updated socket

parents 8f643c72 59d1d75e
Showing with 148 additions and 129 deletions
......@@ -2,4 +2,6 @@
*.iml
.DS_Store
node_modules
target
target/classes
target/node/
......@@ -73,8 +73,15 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>spring-boot-freemarker-email</artifactId>
<version>0.6.3</version>
</dependency>
</dependencies>
<build>
<plugins>
......
......@@ -19,6 +19,9 @@ import edu.uchicago.mpcs.topics.auction.Item;
import edu.uchicago.mpcs.topics.auction.ItemCategory;
import edu.uchicago.mpcs.topics.db.ItemCategoryRepository;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import edu.uchicago.mpcs.topics.db.UserDB;
import edu.uchicago.mpcs.topics.user.User;
import it.ozimov.springboot.mail.configuration.EnableEmailTools;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -28,6 +31,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// tag::code[]
@SpringBootApplication
@EnableEmailTools
public class Application {
public static void main(String[] args) {
......
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.auction.Bid;
import edu.uchicago.mpcs.topics.db.BidRepository;
import edu.uchicago.mpcs.topics.db.SearchRepository;
import edu.uchicago.mpcs.topics.service.BidService;
import edu.uchicago.mpcs.topics.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
......@@ -15,12 +19,34 @@ import java.util.List;
@RequestMapping("/bid")
public class BidController
{
private final BidService bidService;
private final MailService mailService;
private final BidRepository bidRepository;
@Autowired
private BidService bidService;
public BidController(BidService bidService, MailService mailService, BidRepository bidRepository)
{
this.bidService = bidService;
this.mailService = mailService;
this.bidRepository = bidRepository;
}
@PostMapping
public Bid addBid(@RequestBody Bid bid)
public Bid addBid(@RequestBody Bid bid) throws UnsupportedEncodingException
{
return bidService.addBid(bid);
}
@GetMapping("/email") // JUST FOR TESTING
public void email() throws UnsupportedEncodingException
{
mailService.sendEmailWithoutTemplating();
}
@GetMapping("/{userId}")
public List<Bid> getBidsByUser(@PathVariable Long userId)
{
//search all bid made by user
return bidRepository.findAllByUserIdEquals(userId);
}
}
\ No newline at end of file
package edu.uchicago.mpcs.topics.controller;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.service.UserService;
import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.user.User;
......@@ -16,7 +13,7 @@ import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
......
......@@ -3,10 +3,12 @@ package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.auction.Bid;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Created by Bright on 2018-11-18.
*/
public interface BidRepository extends CrudRepository<Bid, Long>
{
List<Bid> findAllByUserIdEquals(Long userId);
}
......@@ -10,6 +10,6 @@ import java.util.List;
@RepositoryRestResource
public interface UserDB extends CrudRepository<User, String> {
User findByEmail(@Param("email") String email);
User findByUserId(@Param("user_id") String userId);
User findByUserId(@Param("user_id") Long userId);
}
\ No newline at end of file
......@@ -8,9 +8,9 @@ import java.util.Optional;
* Modified by Rex on 2018-11-19
*/
public interface UserRepository extends JpaRepository<User, String>{
public interface UserRepository extends JpaRepository<User, Long>{
User register(User user);
User findByUserId( String userId );
User findByUserId(Long userId );
User login(String email, String password);
boolean isUserAlreadyExist(String userId);
......
package edu.uchicago.mpcs.topics.db;
import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.service.UserService;
import edu.uchicago.mpcs.topics.user.User;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Optional;
......@@ -63,7 +57,7 @@ public class UserRepositoryImpl implements UserRepository {
* @param userId
*/
@Override
public User findByUserId(String userId) {
public User findByUserId(Long userId) {
User u = userRepository.findByUserId(userId);
return u;
}
......@@ -111,7 +105,7 @@ public class UserRepositoryImpl implements UserRepository {
}
@Override
public List<User> findAllById(Iterable<String> iterable) {
public List<User> findAllById(Iterable<Long> iterable) {
return null;
}
......@@ -121,7 +115,7 @@ public class UserRepositoryImpl implements UserRepository {
}
@Override
public void deleteById(String s) {
public void deleteById(Long s) {
}
......@@ -151,12 +145,12 @@ public class UserRepositoryImpl implements UserRepository {
}
@Override
public Optional<User> findById(String s) {
public Optional<User> findById(Long s) {
return Optional.empty();
}
@Override
public boolean existsById(String s) {
public boolean existsById(Long s) {
return false;
}
......@@ -181,7 +175,7 @@ public class UserRepositoryImpl implements UserRepository {
}
@Override
public User getOne(String s) {
public User getOne(Long s) {
return null;
}
......
......@@ -6,9 +6,12 @@ import edu.uchicago.mpcs.topics.auction.Status;
import edu.uchicago.mpcs.topics.controller.ItemController;
import edu.uchicago.mpcs.topics.db.BidRepository;
import edu.uchicago.mpcs.topics.db.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import edu.uchicago.mpcs.topics.db.UserDB;
import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.user.User;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.util.Optional;
/**
......@@ -21,15 +24,20 @@ public class BidService
private BidRepository bidRepository;
private ItemRepository itemRepository;
private ItemController itemController;
private MailService mailService;
private UserRepository userRepository;
public BidService(BidRepository bidRepository, ItemRepository itemRepository, ItemController itemController)
public BidService(BidRepository bidRepository, ItemRepository itemRepository, ItemController itemController,
MailService mailService,UserRepository userRepository)
{
this.bidRepository = bidRepository;
this.itemRepository = itemRepository;
this.itemController = itemController;
this.mailService = mailService;
this.userRepository = userRepository;
}
public Bid addBid(Bid bid)
public Bid addBid(Bid bid) throws UnsupportedEncodingException
{
//update item current price
......@@ -40,16 +48,30 @@ public class BidService
itemToUpdate.setItemId(bid.getItemId());
itemToUpdate.setCurrentPrice(bid.getAmount());
//Assign highest bidder
//send email to seller for the first bid;
if (itemToUpdate.getStatus() != Status.HASBID)
{
User seller = userRepository.findById(itemToUpdate.getSellerId()).orElseThrow(NullPointerException::new);
mailService.sendEmailfirstBid(seller.getEmail());
}
//send email to previous bidder
User currentBidder = userRepository.findById(itemToUpdate.getCurrentBidderID()).orElseThrow(NullPointerException::new);
mailService.sendEmailoutBid(currentBidder.getEmail());
//Assign highest bidder and set status
itemToUpdate.setCurrentBidderID(bid.getUserId());
itemToUpdate.setStatus(Status.HASBID);
itemRepository.save(itemToUpdate);
//websocket update item
//web socket update item
itemController.webSocketUpdateItem(itemToUpdate);
//set highestBidder
return bidRepository.save(bid);
}
......
package edu.uchicago.mpcs.topics.service;
import com.google.common.collect.Lists;
import edu.uchicago.mpcs.topics.auction.Item;
import it.ozimov.springboot.mail.model.Email;
import it.ozimov.springboot.mail.model.defaultimpl.DefaultEmail;
import it.ozimov.springboot.mail.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import java.io.UnsupportedEncodingException;
/**
* Created by Bright on 2018-11-30.
*/
@Service
public class MailService
{
@Autowired
public EmailService emailService;
public void sendEmailoutBid(String emailAddress) throws UnsupportedEncodingException
{
// this.sendEmailWithoutTemplating();
}
public void sendEmailfirstBid(String emailAddress) throws UnsupportedEncodingException
{
// this.sendEmailWithoutTemplating();
}
public void sendEmailWithoutTemplating() throws UnsupportedEncodingException
{
final Email email = DefaultEmail.builder()
.from(new InternetAddress("topicsauction@gmail.com", "Topics Auction"))
.to(Lists.newArrayList(new InternetAddress("topicsauction@gmail.com", "Pomponius Attĭcus")))
.subject("You have been outbid!")
.body("Firmamentum autem stabilitatis constantiaeque eius, quam in amicitia quaerimus, fides est.")
.encoding("UTF-8").build();
emailService.send(email);
}
}
package edu.uchicago.mpcs.topics.service;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.user.User;
......@@ -11,7 +9,7 @@ import edu.uchicago.mpcs.topics.user.User;
public interface UserService {
User findByUserId(String userId);
User findByUserId(Long userId);
User register(User user);
......
......@@ -2,16 +2,10 @@ package edu.uchicago.mpcs.topics.service.impl;
import edu.uchicago.mpcs.topics.db.UserRepository;
import edu.uchicago.mpcs.topics.exceptions.UserAlreadyExistException;
import edu.uchicago.mpcs.topics.exceptions.UserNotFoundException;
import edu.uchicago.mpcs.topics.service.UserService;
import edu.uchicago.mpcs.topics.user.User;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
/**
......@@ -59,7 +53,7 @@ public class UserServiceImpl implements UserService {
* @throws UserAlreadyExistException
*/
@Override
public User findByUserId(String userId) {
public User findByUserId(Long userId) {
User u = userRepository.findByUserId(userId);
return u;
}
......
package edu.uchicago.mpcs.topics.support;
import edu.uchicago.mpcs.topics.user.User;
/**
* Created by HSong on 2018/11/4.
*/
public class Email {
private String id;
private User from;
private User to;
private String subject;
private String content;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public User getFrom() {
return from;
}
public void setFrom(User from) {
this.from = from;
}
public User getTo() {
return to;
}
public void setTo(User to) {
this.to = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
......@@ -2,4 +2,15 @@ spring.data.rest.base-path=/api
spring.h2.console.enabled=true
#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
#spring.datasource.driver-class-name=org.h2.Driver
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=topicsauction@gmail.com
spring.mail.password=mpcs1234
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.scheduler.persistence.enabled=false
spring.mail.scheduler.persistence.redis.embedded=false
spring.mail.scheduler.persistence.redis.enabled=false
\ No newline at end of file
spring.data.rest.base-path=/api
spring.h2.console.enabled=true
#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
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
table {
border-collapse: collapse;
}
td, th {
border: 1px solid #999;
padding: 0.5rem;
text-align: left;
}
\ No newline at end of file
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8"/>
<title>ReactJS + Spring Data REST</title>
<link rel="stylesheet" href="/main.css" />
</head>
<body>
<div id="react"></div>
<script src="built/bundle.js"></script>
</body>
</html>
\ 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