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