diff --git a/JtProject/pom.xml b/JtProject/pom.xml index f3314f61..d06cfbee 100644 --- a/JtProject/pom.xml +++ b/JtProject/pom.xml @@ -19,60 +19,53 @@ - - org.junit.jupiter - junit-jupiter - 5.10.0 - test + org.springframework.boot + spring-boot-starter-web - org.springframework.boot - spring-boot-starter-web + spring-boot-starter-data-jpa - org.springframework.boot - spring-boot-starter-test - test + spring-boot-starter-security - org.springframework.boot - spring-boot-devtools + mysql + mysql-connector-java + 8.0.33 javax.servlet jstl - - org.springframework.boot - spring-boot-starter-data-jpa - org.apache.tomcat.embed tomcat-embed-jasper - - mysql - mysql-connector-java - 8.0.33 + javax.servlet + javax.servlet-api + 4.0.1 + provided - + - org.springframework.boot - spring-boot-starter-security + org.springframework.boot + spring-boot-starter-test + test + diff --git a/JtProject/src/main/java/DTO/AddToCartRequest.java b/JtProject/src/main/java/DTO/AddToCartRequest.java new file mode 100644 index 00000000..4efe02af --- /dev/null +++ b/JtProject/src/main/java/DTO/AddToCartRequest.java @@ -0,0 +1,22 @@ +package DTO; + +public class AddToCartRequest { + private int userId; + private int productId; + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getProductId() { + return productId; + } + + public void setProductId(int productId) { + this.productId = productId; + } +} diff --git a/JtProject/src/main/java/DTO/DiscountPrice.java b/JtProject/src/main/java/DTO/DiscountPrice.java new file mode 100644 index 00000000..d7c226f1 --- /dev/null +++ b/JtProject/src/main/java/DTO/DiscountPrice.java @@ -0,0 +1,31 @@ +package DTO; + +public class DiscountPrice { + public int productid; + public int oldprice; + public int newprice; + + public int getOldprice() { + return oldprice; + } + + public void setOldprice(int oldprice) { + this.oldprice = oldprice; + } + + public int getProductid() { + return productid; + } + + public void setProductid(int productid) { + this.productid = productid; + } + + public int getNewprice() { + return newprice; + } + + public void setNewprice(int newprice) { + this.newprice = newprice; + } +} diff --git a/JtProject/src/main/java/DTO/OrderRequest.java b/JtProject/src/main/java/DTO/OrderRequest.java new file mode 100644 index 00000000..45562b03 --- /dev/null +++ b/JtProject/src/main/java/DTO/OrderRequest.java @@ -0,0 +1,13 @@ +package DTO; + +public class OrderRequest { + private long userId; + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } +} diff --git a/JtProject/src/main/java/DTO/productdto.java b/JtProject/src/main/java/DTO/productdto.java new file mode 100644 index 00000000..77409357 --- /dev/null +++ b/JtProject/src/main/java/DTO/productdto.java @@ -0,0 +1,7 @@ +package DTO; + +public class productdto { + public int id; + public int oldprice; + public int newprice; +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/configuration/SecurityConfiguration.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/configuration/SecurityConfiguration.java index 8689a569..de9bb3ec 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/configuration/SecurityConfiguration.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/configuration/SecurityConfiguration.java @@ -12,14 +12,14 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import com.jtspringproject.JtSpringProject.models.User; -import com.jtspringproject.JtSpringProject.services.userService; +import com.jtspringproject.JtSpringProject.services.UserService; @Configuration public class SecurityConfiguration { - userService UserService; + UserService UserService; - public SecurityConfiguration(userService UserService) { + public SecurityConfiguration(UserService UserService) { this.UserService = UserService; } @@ -32,6 +32,7 @@ SecurityFilterChain adminFilterChain(HttpSecurity http) throws Exception { http.antMatcher("/admin/**") .authorizeHttpRequests(requests -> requests .requestMatchers(new AntPathRequestMatcher("/admin/login")).permitAll() + .requestMatchers(new AntPathRequestMatcher("/admin/setprice")).permitAll() .requestMatchers(new AntPathRequestMatcher("/admin/**")).hasRole("ADMIN") ) .formLogin(login -> login @@ -62,7 +63,7 @@ public static class UserConfigurationAdapter{ @Bean SecurityFilterChain userFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(requests -> requests - .antMatchers("/login", "/register", "/newuserregister" ,"/test", "/test2").permitAll() + .antMatchers("/login", "/register", "/newuserregister" ,"/test", "/test2","/products","/allusers","/searchproducts","/logs","/Placeorder","/addtocart","/getallcarts","/newuser","/allorders","/Discounts").permitAll() .antMatchers("/**").hasRole("USER")) .formLogin(login -> login .loginPage("/login") @@ -97,15 +98,11 @@ UserDetailsService userDetailsService() { return org.springframework.security.core.userdetails.User .withUsername(username) - .passwordEncoder(input->passwordEncoder().encode(input)) .password(user.getPassword()) .roles(role) .build(); }; } - @Bean - PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/AdminController.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/AdminController.java index fd2c46a3..13b3805c 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/AdminController.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/AdminController.java @@ -6,42 +6,52 @@ import java.sql.ResultSet; import java.util.List; +import DTO.productdto; +import com.jtspringproject.JtSpringProject.models.Logs; +import com.jtspringproject.JtSpringProject.services.LogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import com.jtspringproject.JtSpringProject.models.Category; import com.jtspringproject.JtSpringProject.models.Product; import com.jtspringproject.JtSpringProject.models.User; -import com.jtspringproject.JtSpringProject.services.categoryService; -import com.jtspringproject.JtSpringProject.services.productService; -import com.jtspringproject.JtSpringProject.services.userService; +import com.jtspringproject.JtSpringProject.services.CategoryService; +import com.jtspringproject.JtSpringProject.services.ProductService; +import com.jtspringproject.JtSpringProject.services.UserService; @Controller @RequestMapping("/admin") public class AdminController { - private final userService userService; - private final categoryService categoryService; - private final productService productService; + private final UserService userService; + private final CategoryService categoryService; + private final ProductService productService; + private final LogService logservice; @Autowired - public AdminController(userService userService, categoryService categoryService, productService productService) { + public AdminController(UserService userService, CategoryService categoryService, ProductService productService, LogService logservice) { this.userService = userService; this.categoryService = categoryService; this.productService = productService; + this.logservice= logservice; } - + @GetMapping("/logs") + public List getalllogs(){ + return logservice.getalllogs(); + } + + @PostMapping("/setprice") + @ResponseBody + public void setprice( @RequestBody productdto product){ + this.productService.updateProductPrice(product.id,product); + } + @GetMapping("/index") public String index(Model model) { String username = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -250,4 +260,5 @@ public String updateUserProfile(@RequestParam("userid") int userid,@RequestParam return "redirect:index"; } + } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/UserController.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/UserController.java index 05d5834c..a5ec5b75 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/UserController.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/controller/UserController.java @@ -1,54 +1,73 @@ package com.jtspringproject.JtSpringProject.controller; -import com.jtspringproject.JtSpringProject.models.Cart; -import com.jtspringproject.JtSpringProject.models.Product; -import com.jtspringproject.JtSpringProject.models.User; - -import java.io.Console; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; +import DTO.AddToCartRequest; +import DTO.OrderRequest; +import com.jtspringproject.JtSpringProject.models.*; + import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; -import com.jtspringproject.JtSpringProject.services.cartService; +import com.jtspringproject.JtSpringProject.services.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import com.jtspringproject.JtSpringProject.services.userService; -import com.jtspringproject.JtSpringProject.services.productService; -import com.jtspringproject.JtSpringProject.services.cartService; - -@Controller +@RestController public class UserController{ - private final userService userService; - private final productService productService; + private final UserService userService; + private final ProductService productService; + private final LogService logService; + private final OrderService orderservice; + private final CartService cartservice; @Autowired - public UserController(userService userService, productService productService) { + public UserController(UserService userService, ProductService productService,LogService logService, + OrderService orderservice, CartService cartservice) { this.userService = userService; this.productService = productService; + this.logService=logService; + this.orderservice=orderservice; + this.cartservice=cartservice; } + @Autowired + DiscountService discountService; + @GetMapping("/logs") + public List getalllogs(){ + return logService.getalllogs(); + } @GetMapping("/register") public String registerUser() { return "register"; } - @GetMapping("/buy") - public String buy() - { - return "buy"; + @PostMapping("/Placeorder") + @ResponseBody + public ResponseEntity placeOrderTest(@RequestBody OrderRequest order) { + orderservice.placeorder(order); + return ResponseEntity.ok("Order placed for userId=" + order.getUserId()); + } + @GetMapping("/allorders") + public List getallorders(){ + return this.orderservice.getallorders(); + } + @GetMapping("/Discounts") + public List getalldiscount(){ + return discountService.getalldiscount(); + } + @PostMapping("/addtocart") + @ResponseBody + public ResponseEntity addtocart(@RequestBody AddToCartRequest req){ + cartservice.addProductToCart(req.getUserId(),req.getProductId()); + return ResponseEntity.ok("Product added to the cart"); } @GetMapping("/login") @@ -59,7 +78,21 @@ public ModelAndView userlogin(@RequestParam(required = false) String error) { } return mv; } - + @GetMapping("/allusers") + public List getall(){ + return this.userService.getUsers(); + } + + @GetMapping("/searchproducts") + @ResponseBody + public Product getproductbyname(@RequestParam Long userid,@RequestParam String keyword){ + return productService.getProductByName(keyword,userid); + } + + @GetMapping("/getallcarts") + public List getallcarts(){ + return cartservice.getCarts(); + } @GetMapping("/") public ModelAndView indexPage() { @@ -75,7 +108,11 @@ public ModelAndView indexPage() } return mView; } - + @GetMapping("/products") + public List getallproduct(){ + return this.productService.getProducts(); + } + @GetMapping("/user/products") public ModelAndView getproduct() { @@ -91,7 +128,13 @@ public ModelAndView getproduct() { return mView; } - + // /newuser endpoint is made for testing the buying logic + @PostMapping("/newuser") + @ResponseBody + public void adduser(@RequestBody User user){ + this.userService.addUser(user); + this.cartservice.addCart(user); + } @RequestMapping(value = "newuserregister", method = RequestMethod.POST) public ModelAndView newUseRegister(@ModelAttribute User user) { @@ -102,7 +145,7 @@ public ModelAndView newUseRegister(@ModelAttribute User user) System.out.println(user.getEmail()); user.setRole("ROLE_NORMAL"); this.userService.addUser(user); - + this.cartservice.addCart(user); System.out.println("New user created: " + user.getUsername()); ModelAndView mView = new ModelAndView("userLogin"); return mView; diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/DiscountDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/DiscountDao.java new file mode 100644 index 00000000..2974633a --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/DiscountDao.java @@ -0,0 +1,32 @@ +package com.jtspringproject.JtSpringProject.dao; + +import com.jtspringproject.JtSpringProject.models.Discount; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public class DiscountDao { + @Autowired + SessionFactory session; + @Transactional + public Discount addDiscount(Discount discount){ + session.getCurrentSession().save(discount); + return discount; + } + @Transactional + public void removeDiscount(int productid){ + Discount discount=session.getCurrentSession().createQuery("FROM Discount d where d.productid= :id", Discount.class). + setParameter("id",productid).uniqueResult(); + + session.getCurrentSession().remove(discount); + } + @Transactional + public List getalldiscounts(){ + return session.getCurrentSession().createQuery("FROM Discount", Discount.class).list(); + } + +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/LogsDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/LogsDao.java new file mode 100644 index 00000000..5c207abb --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/LogsDao.java @@ -0,0 +1,32 @@ +package com.jtspringproject.JtSpringProject.dao; + +import com.jtspringproject.JtSpringProject.models.Logs; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + + +@Repository +public class LogsDao { + @Autowired + private SessionFactory sessionFactory; + + @Transactional + public void savelog(long userid,String keyword){ + LocalDateTime date=LocalDateTime.now(); + Logs log=new Logs(); + log.setDate(date); + log.setSearchkeyword(keyword); + log.setUserid(userid); + sessionFactory.getCurrentSession().save(log); + System.out.println("Saved the log in the database"); + } + @Transactional + public List getall(){ + return sessionFactory.getCurrentSession().createQuery("FROM Logs",Logs.class).list(); + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/OrderDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/OrderDao.java new file mode 100644 index 00000000..3f6dc67f --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/OrderDao.java @@ -0,0 +1,74 @@ +package com.jtspringproject.JtSpringProject.dao; + +import com.jtspringproject.JtSpringProject.models.*; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import javax.persistence.LockModeType; +import java.time.LocalDateTime; +import java.util.List; +import static com.jtspringproject.JtSpringProject.models.OrderStatus.Accepted; + +@Repository +public class OrderDao { + @Autowired + private SessionFactory sessionFactory; + @Autowired + private productDao productrepo; + + @Transactional + public List getallordersperuser(long userid){ + return sessionFactory.getCurrentSession().createQuery("FROM ORDERS O where O.user.id= :userid",Order.class). + setParameter("userid",userid) + .list(); + } + @Transactional + public Order getorder(long orderid){ + return sessionFactory.getCurrentSession().createQuery("FROM ORDERS O where O.orderId= :orderid",Order.class). + setParameter("orderid",orderid).uniqueResult(); + + } + @Transactional + public List getallorder() { + return sessionFactory.getCurrentSession() + .createQuery( + "SELECT DISTINCT o FROM ORDER o LEFT JOIN FETCH o.orderedProducts", + Order.class + ) + .list(); + } + @Transactional + public void placeOrder(List cartProducts, long userId) { + + Session session = sessionFactory.getCurrentSession(); + User user = session.get(User.class, userId); + + Order order = new Order(); + order.setUser(user); + order.setStatus(OrderStatus.ACCEPTED); + order.setDate(LocalDateTime.now()); + session.save(order); + + for (CartProduct cp : cartProducts) { + + Product product = session.find( + Product.class, + cp.getProduct().getId(), + LockModeType.PESSIMISTIC_WRITE + ); + int qtyToBuy = cp.getQuantity(); + int currentQty = product.getQuantity(); + + if (currentQty < qtyToBuy) { + throw new RuntimeException("Out of stock: " + product.getName()); + } + + product.setQuantity(currentQty - qtyToBuy); + + cp.setOrder(order); + session.update(cp); + } + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartDao.java index 8bbe4ca2..f904756c 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartDao.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartDao.java @@ -4,6 +4,7 @@ import com.jtspringproject.JtSpringProject.models.Cart; import com.jtspringproject.JtSpringProject.models.Category; +import com.jtspringproject.JtSpringProject.models.User; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -19,11 +20,18 @@ public void setSessionFactory(SessionFactory sf) { } @Transactional - public Cart addCart(Cart cart) { + public Cart addCart(User user) { + Cart cart=new Cart(); + cart.setCustomer(user); this.sessionFactory.getCurrentSession().save(cart); return cart; } + @Transactional + public Cart getcart(long userid){ + return sessionFactory.getCurrentSession().createQuery("From CART c where c.customer.id= :id",Cart.class) + .setParameter("id",userid).uniqueResult(); + } @Transactional public List getCarts() { return this.sessionFactory.getCurrentSession().createQuery("from CART").list(); diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartProductDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartProductDao.java index d0556eec..d4d54232 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartProductDao.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/cartProductDao.java @@ -31,7 +31,7 @@ public List getCartProducts() { } @Transactional - public List getProductByCartID(Integer cart_id) { + public List getProductByCartID(int cart_id) { String sql = "SELECT product_id FROM cart_product WHERE cart_id = :cart_id"; List productIds = this.sessionFactory.getCurrentSession() .createNativeQuery(sql) @@ -44,7 +44,13 @@ public List getProductByCartID(Integer cart_id) { .setParameterList("product_ids", productIds) .list(); } - + @Transactional + public List getProductByID(int cartId) { + return sessionFactory.getCurrentSession() + .createQuery("FROM CartProduct cp WHERE cp.id.cartId = :cartId", CartProduct.class) + .setParameter("cartId", cartId) + .list(); + } @Transactional public void updateCartProduct(CartProduct cartProduct) { this.sessionFactory.getCurrentSession().update(cartProduct); @@ -54,4 +60,15 @@ public void updateCartProduct(CartProduct cartProduct) { public void deleteCartProduct(CartProduct cartProduct) { this.sessionFactory.getCurrentSession().delete(cartProduct); } + @Transactional + public CartProduct findByCartAndProduct(int cartId, int productId) { + return sessionFactory.getCurrentSession() + .createQuery( + "FROM CartProduct cp WHERE cp.id.cartId = :cid AND cp.id.productId = :pid", + CartProduct.class + ) + .setParameter("cid", cartId) + .setParameter("pid", productId) + .uniqueResult(); + } } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/productDao.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/productDao.java index b8199678..0e801173 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/productDao.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/dao/productDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -14,43 +15,73 @@ @Repository public class productDao { @Autowired - private SessionFactory sessionFactory; - + private SessionFactory sessionFactory; + public void setSessionFactory(SessionFactory sf) { - this.sessionFactory = sf; - } - + this.sessionFactory = sf; + } + @Transactional - public List getProducts(){ + public List getProducts() { return this.sessionFactory.getCurrentSession().createQuery("from PRODUCT").list(); } - + @Transactional public Product addProduct(Product product) { this.sessionFactory.getCurrentSession().save(product); return product; } - + @Transactional public Product getProduct(int id) { return this.sessionFactory.getCurrentSession().get(Product.class, id); } - public Product updateProduct(Product product){ - this.sessionFactory.getCurrentSession().update(String.valueOf(Product.class),product); + public Product updateProduct(Product product) { + this.sessionFactory.getCurrentSession().update(String.valueOf(Product.class), product); return product; } - @Transactional - public Boolean deletProduct(int id) { - Session session = this.sessionFactory.getCurrentSession(); - Object persistanceInstance = session.load(Product.class, id); + @Transactional + public void updateproductprice(int id,int price){ + Product product=this.sessionFactory.getCurrentSession().get(Product.class,id); + product.setPrice(price); + this.sessionFactory.getCurrentSession().update(product); + } + @Transactional + public boolean deleteProduct(int id) { + Session session = sessionFactory.getCurrentSession(); + Product product = session.get(Product.class, id); - if (persistanceInstance != null) { - session.delete(persistanceInstance); + if (product != null) { + session.delete(product); return true; } return false; } + @Transactional + public Product getProductByname(String name) { + Session session = sessionFactory.getCurrentSession(); + return session.createQuery("from PRODUCT p where p.name= :name", Product.class). + setParameter("name", name).uniqueResult(); + + } + + @Transactional + public List sortonprice() { + Session session = sessionFactory.getCurrentSession(); + return session.createQuery("from PRODUCT P order by p.price asc", + Product.class).list(); + } + @Transactional + public List sortonCategory(String Category) { + Session session = sessionFactory.getCurrentSession(); + return session.createQuery("from PRODUCT P where p.category.name= :catname order by p.price asc", + Product.class) + .setParameter("catname", Category).list(); + } } + + + diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/CartProduct.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/CartProduct.java index aeb9ef7b..37e5d24e 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/CartProduct.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/CartProduct.java @@ -19,6 +19,13 @@ public class CartProduct { @JoinColumn(name = "product_id") private Product product; + @ManyToOne + @JoinColumn(name = "order_id") + private Order order; + + @Column(nullable = false) + private int quantity; + public CartProduct() {} public CartProduct(Cart cart, Product product) { @@ -50,4 +57,19 @@ public Product getProduct() { public void setProduct(Product product) { this.product = product; } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } + public Order getOrder() { + return order; + } + + public void setOrder(Order order) { + this.order = order; + } } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Discount.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Discount.java new file mode 100644 index 00000000..720bcdbb --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Discount.java @@ -0,0 +1,40 @@ +package com.jtspringproject.JtSpringProject.models; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity(name="Discount") +public class Discount { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public int id; + public int productid; + public int oldprice; + public int newprice; + + public int getProductid() { + return productid; + } + + public void setProductid(int productid) { + this.productid = productid; + } + + public int getOldprice() { + return oldprice; + } + + public void setOldprice(int oldprice) { + this.oldprice = oldprice; + } + + public int getNewprice() { + return newprice; + } + + public void setNewprice(int newprice) { + this.newprice = newprice; + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/DiscountListener.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/DiscountListener.java new file mode 100644 index 00000000..06fbd472 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/DiscountListener.java @@ -0,0 +1,24 @@ +package com.jtspringproject.JtSpringProject.models; + +import DTO.DiscountPrice; +import com.jtspringproject.JtSpringProject.services.DiscountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +@Component +public class DiscountListener { + @Autowired + DiscountService discountService; + + @EventListener + public ResponseEntity adddiscount(DiscountPrice discountPrice){ + Discount discount=new Discount(); + discount.setProductid(discountPrice.productid); + discount.setOldprice(discountPrice.oldprice); + discount.setNewprice(discountPrice.newprice); + discountService.adddiscount(discount); + return ResponseEntity.ok("Discount has been saved"); + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Logs.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Logs.java new file mode 100644 index 00000000..dfec5443 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Logs.java @@ -0,0 +1,42 @@ +package com.jtspringproject.JtSpringProject.models; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.time.LocalDateTime; + +@Entity(name="Logs") +public class Logs { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public int logid; + public long userid; + public String searchkeyword; + public LocalDateTime date; + + + public long getUserid() { + return userid; + } + + public void setUserid(long userid) { + this.userid = userid; + } + + public String getSearchkeyword() { + return searchkeyword; + } + + public void setSearchkeyword(String searchkeyword) { + this.searchkeyword = searchkeyword; + } + + public LocalDateTime getDate() { + return date; + } + + public void setDate(LocalDateTime date) { + this.date = date; + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Order.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Order.java new file mode 100644 index 00000000..ca04731b --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/Order.java @@ -0,0 +1,60 @@ +package com.jtspringproject.JtSpringProject.models; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.List; + +@Entity(name="ORDER") +@Table(name = "ORDERS") +public class Order { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long orderId; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; + + @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) + private List orderedProducts; + + @Enumerated(EnumType.STRING) + private OrderStatus status; + + private LocalDateTime date; + public Order() { + } + + public OrderStatus getStatus() { + return status; + } + + public void setStatus(OrderStatus status) { + this.status = status; + } + + public LocalDateTime getDate() { + return date; + } + + public void setDate(LocalDateTime date) { + this.date = date; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public List getOrderedProducts() { + return orderedProducts; + } + + public void setOrderedProducts(List orderedProducts) { + this.orderedProducts = orderedProducts; + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/OrderStatus.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/OrderStatus.java new file mode 100644 index 00000000..8642cca9 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/OrderStatus.java @@ -0,0 +1,5 @@ +package com.jtspringproject.JtSpringProject.models; + +public enum OrderStatus { + Accepted,Packed,Shipped,Cancelled, ACCEPTED, Delivered +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/User.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/User.java index 106cf85b..7d272d29 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/User.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/models/User.java @@ -16,7 +16,7 @@ public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) - private int id; + private long id; @Column(unique = true) private String username; @@ -30,7 +30,7 @@ public class User { private String address; - public int getId() { + public long getId() { return id; } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/repository/CartProductRepository.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/repository/CartProductRepository.java deleted file mode 100644 index c305f576..00000000 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/repository/CartProductRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.jtspringproject.JtSpringProject.repository; - -import com.jtspringproject.JtSpringProject.models.CartProduct; -import com.jtspringproject.JtSpringProject.models.CartProductId; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface CartProductRepository extends JpaRepository { -} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/DiscountService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/DiscountService.java new file mode 100644 index 00000000..76d2c6d5 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/DiscountService.java @@ -0,0 +1,29 @@ +package com.jtspringproject.JtSpringProject.services; + +import com.jtspringproject.JtSpringProject.dao.DiscountDao; +import com.jtspringproject.JtSpringProject.dao.productDao; +import com.jtspringproject.JtSpringProject.models.Discount; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class DiscountService { + @Autowired + productDao productrepo; + @Autowired + DiscountDao disrepo; + + + public Discount adddiscount(Discount discount){ + disrepo.addDiscount(discount); + return discount; + } + public void deletediscount(int id){ + disrepo.removeDiscount(id); + } + public List getalldiscount(){ + return disrepo.getalldiscounts(); + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/LogService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/LogService.java new file mode 100644 index 00000000..a6668120 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/LogService.java @@ -0,0 +1,22 @@ +package com.jtspringproject.JtSpringProject.services; + +import com.jtspringproject.JtSpringProject.dao.LogsDao; +import com.jtspringproject.JtSpringProject.models.Logs; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class LogService { + @Autowired + LogsDao logrepo; + + public void savelogs(long userid,String keyword){ + logrepo.savelog(userid,keyword); + } + public List getalllogs(){ + return logrepo.getall(); + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/OrderService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/OrderService.java new file mode 100644 index 00000000..aa08e979 --- /dev/null +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/OrderService.java @@ -0,0 +1,38 @@ +package com.jtspringproject.JtSpringProject.services; + +import DTO.OrderRequest; +import com.jtspringproject.JtSpringProject.dao.OrderDao; +import com.jtspringproject.JtSpringProject.dao.cartDao; +import com.jtspringproject.JtSpringProject.dao.cartProductDao; +import com.jtspringproject.JtSpringProject.models.Cart; +import com.jtspringproject.JtSpringProject.models.CartProduct; +import com.jtspringproject.JtSpringProject.models.Order; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class OrderService { + @Autowired + OrderDao orderrepo; + @Autowired + cartProductDao cartproductrepo; + @Autowired + cartDao cartrepo; + + public void placeorder(OrderRequest order){ + Cart cart= cartrepo.getcart(order.getUserId()); + List products=cartproductrepo.getProductByID(cart.getId()); + orderrepo.placeOrder(products, order.getUserId()); + } + public List getallorders(){ + return orderrepo.getallorder(); + } + public List getordersperuser(long userid){ + return orderrepo.getallordersperuser(userid); + } + public Order getorder(long orderid){ + return orderrepo.getorder(orderid); + } +} diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/cartService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/cartService.java index 9dc0ad36..04784320 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/cartService.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/cartService.java @@ -1,20 +1,26 @@ package com.jtspringproject.JtSpringProject.services; import com.jtspringproject.JtSpringProject.dao.cartDao; -import com.jtspringproject.JtSpringProject.models.Cart; -import com.jtspringproject.JtSpringProject.models.Category; +import com.jtspringproject.JtSpringProject.dao.cartProductDao; +import com.jtspringproject.JtSpringProject.dao.productDao; +import com.jtspringproject.JtSpringProject.models.*; +import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service -public class cartService { +public class CartService { @Autowired - private cartDao cartDao; + public cartDao cartDao; + @Autowired + public cartProductDao cartproductrepo; + @Autowired + public productDao productrepo; - public Cart addCart(Cart cart) { - return cartDao.addCart(cart); + public Cart addCart(User user) { + return cartDao.addCart(user); } // public Cart getCart(int id) @@ -33,6 +39,35 @@ public void deleteCart(Cart cart) { cartDao.deleteCart(cart); } + public Cart getcart(int id){ + return cartDao.getcart(id); + } + + public void addProductToCart(int userId, int productId) { + + Cart cart = cartDao.getcart(userId); + Product product = productrepo.getProduct(productId); // or productDao + + if (cart == null || product == null) { + throw new RuntimeException("Cart or Product not found"); + } + + CartProduct cartProduct = + cartproductrepo.findByCartAndProduct(cart.getId(), productId); + + if (cartProduct == null) { + CartProduct cp = new CartProduct(); + cp.setId(new CartProductId(cart.getId(), productId)); + cp.setCart(cart); + cp.setProduct(product); + cp.setQuantity(1); + + cartproductrepo.addCartProduct(cp); + } else { + cartProduct.setQuantity(cartProduct.getQuantity() + 1); + cartproductrepo.updateCartProduct(cartProduct); + } + } // pubiic List getCartByUserId(int customer_id){ // return cartDao.getCartsByCustomerID(customer_id); // } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/categoryService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/categoryService.java index d8bcb570..cc4c5294 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/categoryService.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/categoryService.java @@ -11,7 +11,7 @@ import net.bytebuddy.dynamic.DynamicType.Builder.InnerTypeDefinition; @Service -public class categoryService { +public class CategoryService { @Autowired private categoryDao categoryDao; diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/productService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/productService.java index 335b525f..02d78042 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/productService.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/productService.java @@ -1,37 +1,76 @@ package com.jtspringproject.JtSpringProject.services; +import java.time.LocalDateTime; import java.util.List; +import DTO.DiscountPrice; +import DTO.productdto; +import com.jtspringproject.JtSpringProject.dao.DiscountDao; +import com.jtspringproject.JtSpringProject.dao.LogsDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - +import org.springframework.context.ApplicationEventPublisher; import com.jtspringproject.JtSpringProject.dao.productDao; import com.jtspringproject.JtSpringProject.models.Product; @Service -public class productService { +public class ProductService { @Autowired - private productDao productDao; - + public productDao ProductDao; + @Autowired + public LogService logservice; + @Autowired + public DiscountDao discountDao; + @Autowired + public ApplicationEventPublisher eventPublisher; + public List getProducts(){ - return this.productDao.getProducts(); + return ProductDao.getProducts(); } public Product addProduct(Product product) { - return this.productDao.addProduct(product); + return ProductDao.addProduct(product); } public Product getProduct(int id) { - return this.productDao.getProduct(id); + return ProductDao.getProduct(id); + } + + public Product getProductByName(String name, long userid){ + LocalDateTime now= LocalDateTime.now(); + logservice.savelogs(userid,name); + return ProductDao.getProductByname(name); } public Product updateProduct(int id,Product product){ product.setId(id); - return this.productDao.updateProduct(product); + return ProductDao.updateProduct(product); + } + public void updateProductPrice(int id,productdto product){ + System.out.println(product); + if(product.oldprice>product.newprice){ + DiscountPrice disprice=new DiscountPrice(); + disprice.setProductid(id); + disprice.setOldprice(product.oldprice); + disprice.setNewprice(product.newprice); + ProductDao.updateproductprice(id,product.newprice); + eventPublisher.publishEvent( + disprice + ); + } + else{ + discountDao.removeDiscount(id); + ProductDao.updateproductprice(id,product.newprice); + } } public boolean deleteProduct(int id) { - return this.productDao.deletProduct(id); + return ProductDao.deleteProduct(id); + } + public List sortonprice(){ + return ProductDao.sortonprice(); + } + public List sortoncategory(String name){ + return ProductDao.sortonCategory(name); } - } diff --git a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/userService.java b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/userService.java index 92f48166..ca3509ec 100644 --- a/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/userService.java +++ b/JtProject/src/main/java/com/jtspringproject/JtSpringProject/services/userService.java @@ -1,6 +1,5 @@ package com.jtspringproject.JtSpringProject.services; -import com.jtspringproject.JtSpringProject.models.*; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -11,7 +10,7 @@ import com.jtspringproject.JtSpringProject.models.User; @Service -public class userService { +public class UserService { @Autowired private userDao userDao; diff --git a/JtProject/src/main/resources/application.properties b/JtProject/src/main/resources/application.properties index fa9181f4..ff6c0ab9 100644 --- a/JtProject/src/main/resources/application.properties +++ b/JtProject/src/main/resources/application.properties @@ -4,16 +4,13 @@ spring.mvc.view.prefix=/views/ spring.mvc.view.suffix=.jsp #Database related properties -#database.driver=com.mysql.cj.jdbc.Driver -#database.url=jdbc:mysql://localhost:3306/ecomjava -#database.user=root -#database.password= -# +Database.driver=com.mysql.cj.jdbc.Driver +database.url=jdbc:mysql://localhost:3306/ecomjava +database.user=root +database.password= + ##Hibernate related properties -#hibernate.dialect=org.hibernate.dialect.MySQL5Dialect -#hibernate.show_sql=true -#hibernate.format_sql=true -#hibernate.hbm2ddl.auto=update + # Hibernate @@ -31,10 +28,10 @@ db.username= root db.password= entitymanager.packagesToScan= com -#spring.datasource.url=jdbc:mysql://localhost:3306/ecommjava?createDatabaseIfNotExist=true -#spring.datasource.username=root -#spring.datasource.password= -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect -#spring.jpa.show-sql=true -#spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.datasource.url=jdbc:mysql://localhost:3306/ecommjava?createDatabaseIfNotExist=true +spring.datasource.username=root +spring.datasource.password= +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto=update