From 7d62bf413889c54f13bffff0cd5b0197a00ef03c Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 13:25:41 +0530 Subject: [PATCH 01/21] trial #1 for without orders fks --- .../gomart/GomartUser/Admin/AdminService.java | 26 +++++----- .../GomartUser/Customer/CustomerService.java | 37 +++++++------ .../gomart/GomartUser/GomartUser.java | 4 -- .../gomart/Order/CustomerSnapshot.java | 52 +++++++++++++++++++ .../com/ecommerce/gomart/Order/Order.java | 29 ++--------- .../gomart/Order/ProductSnapshot.java | 49 +++++++++++++++++ .../com/ecommerce/gomart/Product/Product.java | 7 --- .../com/ecommerce/gomart/Stubs/SendOrder.java | 3 +- 8 files changed, 138 insertions(+), 69 deletions(-) create mode 100644 src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java create mode 100644 src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index 0723cc7..f426efb 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -10,6 +10,7 @@ import com.ecommerce.gomart.GomartUser.Role; import com.ecommerce.gomart.Order.Order; import com.ecommerce.gomart.Order.OrderRepository; +import com.ecommerce.gomart.Order.ProductSnapshot; import com.ecommerce.gomart.Product.Product; import com.ecommerce.gomart.Product.ProductRepository; import com.ecommerce.gomart.Stubs.SendCart; @@ -80,7 +81,7 @@ public List getOrdersOfCustomerInDateRange(Long adminId, Long userId, if(checkAdminStatus(adminId)){ GomartUser user = gomartUserRepository.findById(userId).get(); List orders = orderRepository.findByCustomerAndOrderDateBetween(user, startDate, endDate); - List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(), makeSnapshotProduct(order.getProduct(), order), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); + List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(), order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; } else{ @@ -130,7 +131,7 @@ public List getPendingManagers(Long adminId){ public List getItemsSoldOnADate(Long adminId, LocalDate date){ if(checkAdminStatus(adminId)){ List orders = orderRepository.findByOrderDate(date); - List send = orders.stream().map(order -> new SendCart(makeSnapshotProduct(order.getProduct(), order), order.getQuantity())).collect(Collectors.toList()); + List send = orders.stream().map(order -> new SendCart(snapshotToProduct(order.getProduct()), order.getQuantity())).collect(Collectors.toList()); return send; } else{ @@ -138,17 +139,16 @@ public List getItemsSoldOnADate(Long adminId, LocalDate date){ } } - private Product makeSnapshotProduct(Product product, Order order){ - Product snapshotProduct = new Product(); - snapshotProduct.setProductId(product.getProductId()); - snapshotProduct.setName(order.getProductNameSnapshot()); - snapshotProduct.setCategory(product.getCategory()); - snapshotProduct.setPrice(order.getProductPriceSnapshot()); - snapshotProduct.setQuantity(product.getQuantity()); - snapshotProduct.setOffer(order.getProductOfferSnapshot()); - snapshotProduct.setDeliveryTime(product.getDeliveryTime()); - snapshotProduct.setImage(product.getImage()); - return snapshotProduct; + + private Product snapshotToProduct(ProductSnapshot productSnapshot){ + Product product = new Product(); + product.setName(productSnapshot.getName()); + product.setPrice(productSnapshot.getPrice()); + product.setOffer(productSnapshot.getOffer()); + product.setImage(productSnapshot.getImage()); + product.setDeliveryTime(productSnapshot.getDeliveryTime()); + return product; + } diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index 9e324f6..fe617d2 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -10,8 +10,10 @@ import com.ecommerce.gomart.GomartUser.Manager.Manager; import com.ecommerce.gomart.GomartUser.Manager.ManagerStatus; import com.ecommerce.gomart.GomartUser.Role; +import com.ecommerce.gomart.Order.CustomerSnapshot; import com.ecommerce.gomart.Order.Order; import com.ecommerce.gomart.Order.OrderRepository; +import com.ecommerce.gomart.Order.ProductSnapshot; import com.ecommerce.gomart.Product.Category; import com.ecommerce.gomart.Product.Product; import com.ecommerce.gomart.Product.ProductRepository; @@ -192,7 +194,7 @@ public List getOrders(Long userId){ if(checkIfUserLoggedIn(userId)){ GomartUser user = gomartUserRepository.findById(userId).get(); List orders = orderRepository.findByCustomer(user); - List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),makeSnapshotProduct(order.getProduct(), order), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); + List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; } else{ @@ -200,19 +202,6 @@ public List getOrders(Long userId){ } } - private Product makeSnapshotProduct(Product product, Order order){ - Product snapshotProduct = new Product(); - snapshotProduct.setProductId(product.getProductId()); - snapshotProduct.setName(order.getProductNameSnapshot()); - snapshotProduct.setCategory(product.getCategory()); - snapshotProduct.setPrice(order.getProductPriceSnapshot()); - snapshotProduct.setQuantity(product.getQuantity()); - snapshotProduct.setOffer(order.getProductOfferSnapshot()); - snapshotProduct.setDeliveryTime(product.getDeliveryTime()); - snapshotProduct.setImage(product.getImage()); - return snapshotProduct; - - } @Transactional public List getOrdersByOrderDate(Long userId, LocalDate date){ @@ -366,14 +355,24 @@ public ResponseEntity checkOutFromCart(Long userId){ } for(Cart cart: cartList){ Order order = new Order().builder() - .customer(cart.getCustomer()) - .product(cart.getProduct()) .quantity(cart.getQuantity()) .orderDate(LocalDate.now()) - .productNameSnapshot(cart.getProduct().getName()) - .productPriceSnapshot(cart.getProduct().getPrice()) - .productOfferSnapshot(cart.getProduct().getOffer()) .build(); + CustomerSnapshot customerSnapshot = new CustomerSnapshot(); + ProductSnapshot productSnapshot = new ProductSnapshot(); + customerSnapshot.setAddress(user.getAddress()); + customerSnapshot.setEmail(user.getEmail()); + customerSnapshot.setPhoneNumber(user.getPhoneNumber()); + customerSnapshot.setFirstName(user.getFirstName()); + customerSnapshot.setLastName(user.getLastName()); + customerSnapshot.setUserId(user.getUserId()); + order.setCustomer(customerSnapshot); + productSnapshot.setName(cart.getProduct().getName()); + productSnapshot.setPrice(cart.getProduct().getPrice()); + productSnapshot.setOffer(cart.getProduct().getOffer()); + productSnapshot.setImage(cart.getProduct().getImage()); + productSnapshot.setDeliveryTime(cart.getProduct().getDeliveryTime()); + order.setProduct(productSnapshot); orderRepository.save(order); cartRepository.deleteById(cart.getEntryId()); // decrease quantity of product diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/GomartUser.java b/src/main/java/com/ecommerce/gomart/GomartUser/GomartUser.java index b739b49..24ff221 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/GomartUser.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/GomartUser.java @@ -114,10 +114,6 @@ public class GomartUser { @JsonIgnore private List carts; - // one to many relationship with orders - @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL) - @JsonIgnore - private List orders; } diff --git a/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java b/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java new file mode 100644 index 0000000..a0a0f45 --- /dev/null +++ b/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java @@ -0,0 +1,52 @@ +package com.ecommerce.gomart.Order; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; + +@Embeddable +@Data +@AllArgsConstructor +@RequiredArgsConstructor +public class CustomerSnapshot { + + @Column( + name = "email", + nullable = false + ) + private String email; + + @Column( + name = "phone_number", + nullable = false + ) + private String phoneNumber; + + @Column( + name = "first_name", + nullable = false +) + private String firstName; + + @Column( + name = "last_name", + nullable = false +) + private String lastName; + + @Column( + name = "address", + nullable = false + ) + private String address; + + @Column( + name = "user_id", + nullable = false, + updatable = false + ) + private Long userId; +} diff --git a/src/main/java/com/ecommerce/gomart/Order/Order.java b/src/main/java/com/ecommerce/gomart/Order/Order.java index c73aaf3..55a60eb 100644 --- a/src/main/java/com/ecommerce/gomart/Order/Order.java +++ b/src/main/java/com/ecommerce/gomart/Order/Order.java @@ -32,14 +32,6 @@ public class Order { ) private Long orderTransactionId; - @ManyToOne - @JoinColumn( - name = "product_id", - nullable = false - ) - private Product product; - - @Column( name = "quantity", nullable = false @@ -51,26 +43,13 @@ public class Order { ) private LocalDate orderDate; - @Column( - name = "product_name_snapshot" - ) - private String productNameSnapshot; - @Column( - name = "product_price_snapshot" - ) - private Double productPriceSnapshot; + @Embedded + private CustomerSnapshot customer; - @Column( - name = "product_offer_snapshot" - ) - private Double productOfferSnapshot; + @Embedded + private ProductSnapshot product; - @ManyToOne - @JoinColumn( - name = "user_id" - ) - private GomartUser customer; } diff --git a/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java b/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java new file mode 100644 index 0000000..ea69a82 --- /dev/null +++ b/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java @@ -0,0 +1,49 @@ +package com.ecommerce.gomart.Order; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.Lob; + +import com.ecommerce.gomart.Product.Category; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; + +@Embeddable +@Data +@AllArgsConstructor +@RequiredArgsConstructor +public class ProductSnapshot{ + @Column( + name = "product_name", + nullable = false + ) + private String name; + + @Column( + name = "product_price", + nullable = false + ) + private double price; + + @Column( + name = "product_image" + ) + @Lob + private byte[] image; + + @Column( + name = "offer", + nullable = false + ) + private Double offer; + + @Column( + name = "delivery_time", + nullable = false + ) + private Integer deliveryTime; + +} + diff --git a/src/main/java/com/ecommerce/gomart/Product/Product.java b/src/main/java/com/ecommerce/gomart/Product/Product.java index cfc37c9..308398a 100644 --- a/src/main/java/com/ecommerce/gomart/Product/Product.java +++ b/src/main/java/com/ecommerce/gomart/Product/Product.java @@ -89,11 +89,4 @@ public class Product { @JsonIgnore private List carts; - // one to many relationship with orders - @OneToMany(mappedBy = "product", cascade = CascadeType.ALL) - @JsonIgnore - private List orders; - - - } diff --git a/src/main/java/com/ecommerce/gomart/Stubs/SendOrder.java b/src/main/java/com/ecommerce/gomart/Stubs/SendOrder.java index 650d584..e8acf66 100644 --- a/src/main/java/com/ecommerce/gomart/Stubs/SendOrder.java +++ b/src/main/java/com/ecommerce/gomart/Stubs/SendOrder.java @@ -1,5 +1,6 @@ package com.ecommerce.gomart.Stubs; +import com.ecommerce.gomart.Order.ProductSnapshot; import com.ecommerce.gomart.Product.Product; import lombok.AllArgsConstructor; import lombok.Builder; @@ -14,7 +15,7 @@ @Builder public class SendOrder { private Long transactionId; - private Product product; + private ProductSnapshot product; private int quantity; private LocalDate orderDate; From 8322191eceea4d976aacd981da146fe4cf6c0c2d Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 13:27:33 +0530 Subject: [PATCH 02/21] updated readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 54d4e6f..11bff4f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # gomart -E commerce backend built using Spring Boot +E-commerce backend built using Spring Boot Current API: gomart-production.up.railway.app +Frontend: gomart.vercel.app + By default admin is added every time From a6088cdb1328cd1e42ae70cc9c02d0abacad7ae5 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 14:17:58 +0530 Subject: [PATCH 03/21] shifted to create drop for changing table style --- src/main/resources/application.properties | 2 +- target/classes/application.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3dcbb21..ff650dd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true diff --git a/target/classes/application.properties b/target/classes/application.properties index 3dcbb21..ff650dd 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true From 936f7575a64bc5697dfce37f31db6e355ec29bd3 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 14:32:00 +0530 Subject: [PATCH 04/21] converted users to snapshots in service layer --- .../gomart/GomartUser/Admin/AdminService.java | 11 ++++++- .../GomartUser/Customer/CustomerService.java | 30 +++++++++++++++++-- .../gomart/Order/CustomerSnapshot.java | 2 ++ .../gomart/Order/OrderRepository.java | 6 ++-- .../gomart/Order/ProductSnapshot.java | 2 ++ src/main/resources/application.properties | 2 +- target/classes/application.properties | 2 +- 7 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index f426efb..6fdf65d 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -8,6 +8,7 @@ import com.ecommerce.gomart.GomartUser.Manager.ManagerService; import com.ecommerce.gomart.GomartUser.Manager.ManagerStatus; import com.ecommerce.gomart.GomartUser.Role; +import com.ecommerce.gomart.Order.CustomerSnapshot; import com.ecommerce.gomart.Order.Order; import com.ecommerce.gomart.Order.OrderRepository; import com.ecommerce.gomart.Order.ProductSnapshot; @@ -80,7 +81,15 @@ public void removeManagerAccess(Long adminId, Long userId){ public List getOrdersOfCustomerInDateRange(Long adminId, Long userId, LocalDate startDate, LocalDate endDate){ if(checkAdminStatus(adminId)){ GomartUser user = gomartUserRepository.findById(userId).get(); - List orders = orderRepository.findByCustomerAndOrderDateBetween(user, startDate, endDate); + CustomerSnapshot customerSnapshot = new CustomerSnapshot().builder() + .userId(user.getUserId()) + .firstName(user.getFirstName()) + .lastName(user.getLastName()) + .email(user.getEmail()) + .phoneNumber(user.getPhoneNumber()) + .address(user.getAddress()) + .build(); + List orders = orderRepository.findByCustomerAndOrderDateBetween(customerSnapshot, startDate, endDate); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(), order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; } diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index fe617d2..01849b3 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -193,7 +193,15 @@ public List getCart(Long userId){ public List getOrders(Long userId){ if(checkIfUserLoggedIn(userId)){ GomartUser user = gomartUserRepository.findById(userId).get(); - List orders = orderRepository.findByCustomer(user); + CustomerSnapshot customerSnapshot = new CustomerSnapshot().builder() + .userId(user.getUserId()) + .firstName(user.getFirstName()) + .lastName(user.getLastName()) + .email(user.getEmail()) + .phoneNumber(user.getPhoneNumber()) + .address(user.getAddress()) + .build(); + List orders = orderRepository.findByCustomer(customerSnapshot); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; } @@ -207,7 +215,15 @@ public List getOrders(Long userId){ public List getOrdersByOrderDate(Long userId, LocalDate date){ if(checkIfUserLoggedIn(userId)){ GomartUser user = gomartUserRepository.findById(userId).get(); - List orders = orderRepository.findByCustomerAndOrderDate(user, date); + CustomerSnapshot customerSnapshot = new CustomerSnapshot().builder() + .userId(user.getUserId()) + .firstName(user.getFirstName()) + .lastName(user.getLastName()) + .email(user.getEmail()) + .phoneNumber(user.getPhoneNumber()) + .address(user.getAddress()) + .build(); + List orders = orderRepository.findByCustomerAndOrderDate(customerSnapshot, date); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; } @@ -220,7 +236,15 @@ public List getOrdersByOrderDate(Long userId, LocalDate date){ public List getOrdersByOrderDateRange(Long userId, LocalDate startDate, LocalDate endDate){ if(checkIfUserLoggedIn(userId)){ GomartUser user = gomartUserRepository.findById(userId).get(); - List orders = orderRepository.findByCustomerAndOrderDateBetween(user, startDate, endDate); + CustomerSnapshot customerSnapshot = new CustomerSnapshot().builder() + .userId(user.getUserId()) + .firstName(user.getFirstName()) + .lastName(user.getLastName()) + .email(user.getEmail()) + .phoneNumber(user.getPhoneNumber()) + .address(user.getAddress()) + .build(); + List orders = orderRepository.findByCustomerAndOrderDateBetween(customerSnapshot, startDate, endDate); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); return send; diff --git a/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java b/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java index a0a0f45..fe1d592 100644 --- a/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java +++ b/src/main/java/com/ecommerce/gomart/Order/CustomerSnapshot.java @@ -4,6 +4,7 @@ import javax.persistence.Embeddable; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -11,6 +12,7 @@ @Data @AllArgsConstructor @RequiredArgsConstructor +@Builder public class CustomerSnapshot { @Column( diff --git a/src/main/java/com/ecommerce/gomart/Order/OrderRepository.java b/src/main/java/com/ecommerce/gomart/Order/OrderRepository.java index 7e88e5e..8a4ee9e 100644 --- a/src/main/java/com/ecommerce/gomart/Order/OrderRepository.java +++ b/src/main/java/com/ecommerce/gomart/Order/OrderRepository.java @@ -10,11 +10,11 @@ @Repository public interface OrderRepository extends JpaRepository { - List findByCustomer(GomartUser user); + List findByCustomer(CustomerSnapshot customer); - List findByCustomerAndOrderDate(GomartUser user, LocalDate date); + List findByCustomerAndOrderDate(CustomerSnapshot customer, LocalDate date); - List findByCustomerAndOrderDateBetween(GomartUser user, LocalDate startDate, LocalDate endDate); + List findByCustomerAndOrderDateBetween(CustomerSnapshot customer, LocalDate startDate, LocalDate endDate); List findByOrderDate(LocalDate date); diff --git a/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java b/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java index ea69a82..a6c6074 100644 --- a/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java +++ b/src/main/java/com/ecommerce/gomart/Order/ProductSnapshot.java @@ -7,6 +7,7 @@ import com.ecommerce.gomart.Product.Category; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -14,6 +15,7 @@ @Data @AllArgsConstructor @RequiredArgsConstructor +@Builder public class ProductSnapshot{ @Column( name = "product_name", diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ff650dd..3dcbb21 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true diff --git a/target/classes/application.properties b/target/classes/application.properties index ff650dd..3dcbb21 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true From 77ee30eeff43fb3a5eb4cb3466ee8d53d32f71c8 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 14:35:04 +0530 Subject: [PATCH 05/21] shifted back to create drop --- src/main/resources/application.properties | 2 +- target/classes/application.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3dcbb21..ff650dd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true diff --git a/target/classes/application.properties b/target/classes/application.properties index 3dcbb21..ff650dd 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true From ba6845d7b7a403270b086692150192909d0f2fe7 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 15:07:21 +0530 Subject: [PATCH 06/21] made it back to update --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ff650dd..3dcbb21 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true From befc0135a8e6f5025b23fd62c16a9f27c501dc22 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 18:25:41 +0530 Subject: [PATCH 07/21] removed cors for now for local front end testing --- .../com/ecommerce/gomart/GomartUser/Admin/AdminController.java | 3 ++- .../gomart/GomartUser/Customer/CustomerController.java | 3 ++- .../ecommerce/gomart/GomartUser/Manager/ManagerController.java | 3 ++- target/classes/application.properties | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java index 4766827..f6c4efd 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java @@ -14,7 +14,8 @@ import java.util.List; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/admin") public class AdminController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java index 847efdf..e84ba9a 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java @@ -9,7 +9,8 @@ import java.util.List; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/user") public class CustomerController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java index 0604e07..5e3fc9a 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java @@ -9,7 +9,8 @@ import java.io.IOException; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/manager") public class ManagerController { private final ManagerService managerService; diff --git a/target/classes/application.properties b/target/classes/application.properties index ff650dd..3dcbb21 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,7 +1,7 @@ spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true From 6594a84d736da924150c9981a234ea16ebc187b8 Mon Sep 17 00:00:00 2001 From: majimearun Date: Mon, 5 Dec 2022 23:44:07 +0530 Subject: [PATCH 08/21] added cors back --- .../ecommerce/gomart/GomartUser/Admin/AdminController.java | 4 ++-- .../gomart/GomartUser/Customer/CustomerController.java | 4 ++-- .../gomart/GomartUser/Manager/ManagerController.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java index f6c4efd..cdfde8f 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java @@ -14,8 +14,8 @@ import java.util.List; @RestController -// @CrossOrigin(origins = "https://gomart.vercel.app/") -@CrossOrigin +@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin @RequestMapping(path = "/admin") public class AdminController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java index e84ba9a..285f691 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java @@ -9,8 +9,8 @@ import java.util.List; @RestController -// @CrossOrigin(origins = "https://gomart.vercel.app/") -@CrossOrigin +@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin @RequestMapping(path = "/user") public class CustomerController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java index 5e3fc9a..025d123 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java @@ -9,8 +9,8 @@ import java.io.IOException; @RestController -// @CrossOrigin(origins = "https://gomart.vercel.app/") -@CrossOrigin +@CrossOrigin(origins = "https://gomart.vercel.app/") +// @CrossOrigin @RequestMapping(path = "/manager") public class ManagerController { private final ManagerService managerService; From 4c74a80ec27f6cbdedde1c58b0e1f0f952a83db0 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:05:03 +0530 Subject: [PATCH 09/21] removed admin from getcustomers --- .../java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index 6fdf65d..b1825cf 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -103,6 +103,7 @@ public List getOrdersOfCustomerInDateRange(Long adminId, Long userId, public List getCustomers(Long adminId){ if(checkAdminStatus(adminId)){ List users = gomartUserRepository.findAll(); + users.removeIf(user -> user.getRole() == Role.ADMIN); List send = users.stream().map(user -> new UserInfo(user.getUserId(), user.getFirstName(), user.getMiddleName(), user.getLastName(), user.getEmail(), user.getDob(), user.getAddress(), user.getPhoneNumber())).collect(Collectors.toList()); return send; } From f01bc9447b378f5e564b3c5d45cf882ef36896a8 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:12:48 +0530 Subject: [PATCH 10/21] added endpoint to delete user --- .../gomart/GomartUser/Admin/AdminController.java | 5 +++++ .../gomart/GomartUser/Admin/AdminService.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java index cdfde8f..e7f872a 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java @@ -81,4 +81,9 @@ public List generateReportByDate(@RequestBody GetOrder getOrder){ return adminService.getItemsSoldOnADate(getOrder.getSenderId(), getOrder.getStartDate()); } + @PostMapping(path="/delete/user") + public void deleteUser(@RequestBody GetInfo getInfo){ + adminService.deleteUser(getInfo.getSenderId(), getInfo.getUserId()); + } + } diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index b1825cf..8f039f2 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -150,6 +150,22 @@ public List getItemsSoldOnADate(Long adminId, LocalDate date){ } + @Transactional + public void deleteUser(Long adminId, Long userId){ + if(checkAdminStatus(adminId)){ + GomartUser user = gomartUserRepository.findById(userId).get(); + if(user.getRole() == Role.ADMIN){ + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Cannot delete an Admin"); + } + else{ + gomartUserRepository.delete(user); + } + } + else{ + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User does not have Admin level access or is not logged in"); + } + } + private Product snapshotToProduct(ProductSnapshot productSnapshot){ Product product = new Product(); product.setName(productSnapshot.getName()); From d5e229164b3ff9587d0aa4f34b4c04c7cd59f298 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:17:05 +0530 Subject: [PATCH 11/21] added last secind features --- .../ecommerce/gomart/GomartUser/Admin/AdminController.java | 4 ++-- .../com/ecommerce/gomart/GomartUser/Admin/AdminService.java | 3 ++- .../gomart/GomartUser/Customer/CustomerController.java | 4 ++-- .../gomart/GomartUser/Customer/CustomerService.java | 6 ++++-- .../gomart/GomartUser/Manager/ManagerController.java | 4 ++-- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java index e7f872a..3d3646b 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminController.java @@ -14,8 +14,8 @@ import java.util.List; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") -// @CrossOrigin +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/admin") public class AdminController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index 8f039f2..6ff2aa8 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -91,7 +91,8 @@ public List getOrdersOfCustomerInDateRange(Long adminId, Long userId, .build(); List orders = orderRepository.findByCustomerAndOrderDateBetween(customerSnapshot, startDate, endDate); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(), order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); - return send; + // reverse the list so that the most recent order is at the top + return send.stream().sorted((o1, o2) -> o2.getOrderDate().compareTo(o1.getOrderDate())).collect(Collectors.toList()); } else{ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User does not have Admin level access or is not logged in"); diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java index 285f691..e84ba9a 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerController.java @@ -9,8 +9,8 @@ import java.util.List; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") -// @CrossOrigin +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/user") public class CustomerController { diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index 01849b3..38e2382 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -225,7 +225,8 @@ public List getOrdersByOrderDate(Long userId, LocalDate date){ .build(); List orders = orderRepository.findByCustomerAndOrderDate(customerSnapshot, date); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); - return send; + // reverse the list to get the latest order first + return send.stream().sorted((o1, o2) -> o2.getOrderDate().compareTo(o1.getOrderDate())).collect(Collectors.toList()); } else{ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User not logged in"); @@ -246,7 +247,8 @@ public List getOrdersByOrderDateRange(Long userId, LocalDate startDat .build(); List orders = orderRepository.findByCustomerAndOrderDateBetween(customerSnapshot, startDate, endDate); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); - return send; + // reverse the list so that the most recent order is at the top + return send.stream().sorted((o1, o2) -> o2.getOrderDate().compareTo(o1.getOrderDate())).collect(Collectors.toList()); } else{ diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java index 025d123..5e3fc9a 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Manager/ManagerController.java @@ -9,8 +9,8 @@ import java.io.IOException; @RestController -@CrossOrigin(origins = "https://gomart.vercel.app/") -// @CrossOrigin +// @CrossOrigin(origins = "https://gomart.vercel.app/") +@CrossOrigin @RequestMapping(path = "/manager") public class ManagerController { private final ManagerService managerService; From 326816b543bbdb5f45b524b8f30e0a5eb3f16fae Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:35:08 +0530 Subject: [PATCH 12/21] sending mails for account deletion --- .../ecommerce/gomart/GomartUser/Admin/AdminService.java | 2 ++ .../gomart/GomartUser/Customer/CustomerService.java | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index 6ff2aa8..e3bd7b0 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -159,6 +159,8 @@ public void deleteUser(Long adminId, Long userId){ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Cannot delete an Admin"); } else{ + Email email = new Email(user.getEmail(), "Account Deleted", "Your account has been deletedby the Admin. Please contact the Admin for more information."); + emailService.sendSimpleMail(email); gomartUserRepository.delete(user); } } diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index 38e2382..c5d350e 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -146,7 +146,7 @@ public List getProductsByName(String name) { } @Transactional - public List getProductsByFuzzyName(String name) { + private List getProductsByFuzzyName(String name) { List products = getProducts(); List filtered = products.stream() .filter(product -> FuzzySearch.weightedRatio(product.getName(), name) > 50) @@ -277,8 +277,14 @@ public ResponseEntity updateUserInfo(Long userId, String firstName, Stri public ResponseEntity deleteUserInfo(Long userId){ if(checkIfUserLoggedIn(userId)){ + Email email = new Email(); + email.setTo(gomartUserRepository.findById(userId).get().getEmail()); + email.setSubject("Account Deletion"); + email.setBody("Your GoMart account has been deleted successfully. We're sorry to see you go."); + emailService.sendSimpleMail(email); gomartUserRepository.deleteById(userId); return new ResponseEntity("User info deleted successfully", HttpStatus.OK); + } else{ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User not logged in"); From c2e5036c6a35b6f6a72d88c481b248d501572fc6 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:50:23 +0530 Subject: [PATCH 13/21] made fuzzy search for description also --- .../ecommerce/gomart/GomartUser/Customer/CustomerService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index c5d350e..166c634 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -151,6 +151,10 @@ private List getProductsByFuzzyName(String name) { List filtered = products.stream() .filter(product -> FuzzySearch.weightedRatio(product.getName(), name) > 50) .collect(Collectors.toList()); + List filteredByDescription = products.stream() + .filter(product -> FuzzySearch.weightedRatio(product.getDescription(), name) > 50) + .collect(Collectors.toList()); + filtered.addAll(filteredByDescription); List fProducts = filtered.stream() .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) .collect(Collectors.toList()); From a62a2f1b596254c876207eca0e51f6eaed830a47 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 15:56:34 +0530 Subject: [PATCH 14/21] made filtering by description even better --- .../gomart/GomartUser/Customer/CustomerService.java | 10 ++++++++-- .../ecommerce/gomart/Product/ProductRepository.java | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index 166c634..484608f 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -151,10 +151,16 @@ private List getProductsByFuzzyName(String name) { List filtered = products.stream() .filter(product -> FuzzySearch.weightedRatio(product.getName(), name) > 50) .collect(Collectors.toList()); - List filteredByDescription = products.stream() + List byDescription = productRepository.findByDescriptionIgnoreCaseContaining(name); + if(byDescription.isEmpty()){ + List filteredByDescription = products.stream() .filter(product -> FuzzySearch.weightedRatio(product.getDescription(), name) > 50) .collect(Collectors.toList()); - filtered.addAll(filteredByDescription); + filtered.addAll(filteredByDescription); + } + else{ + filtered.addAll(byDescription); + } List fProducts = filtered.stream() .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) .collect(Collectors.toList()); diff --git a/src/main/java/com/ecommerce/gomart/Product/ProductRepository.java b/src/main/java/com/ecommerce/gomart/Product/ProductRepository.java index 39b0848..34f2e27 100644 --- a/src/main/java/com/ecommerce/gomart/Product/ProductRepository.java +++ b/src/main/java/com/ecommerce/gomart/Product/ProductRepository.java @@ -14,6 +14,8 @@ public interface ProductRepository extends JpaRepository { List findByNameIgnoreCaseContaining(String name); + List findByDescriptionIgnoreCaseContaining(String description); + Product findByName(String name); From 9c903e95bf28085e09ef9bf17c51e4b5d0beae4f Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 16:00:47 +0530 Subject: [PATCH 15/21] removing duplicates --- .../ecommerce/gomart/GomartUser/Customer/CustomerService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index 484608f..e6a5ec3 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -161,6 +161,8 @@ private List getProductsByFuzzyName(String name) { else{ filtered.addAll(byDescription); } + // remove dulicates + return filtered.stream().distinct().collect(Collectors.toList()); List fProducts = filtered.stream() .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) .collect(Collectors.toList()); From 72998eda70fcf6d5282c19cc9cf4ac75658c8d4b Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 16:01:31 +0530 Subject: [PATCH 16/21] fixed error in filtering --- .../ecommerce/gomart/GomartUser/Customer/CustomerService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index e6a5ec3..af52c35 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -162,8 +162,8 @@ private List getProductsByFuzzyName(String name) { filtered.addAll(byDescription); } // remove dulicates - return filtered.stream().distinct().collect(Collectors.toList()); - List fProducts = filtered.stream() + List filteredFinal = filtered.stream().distinct().collect(Collectors.toList()); + List fProducts = filteredFinal.stream() .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) .collect(Collectors.toList()); return fProducts.subList(0, Math.min(5, fProducts.size())); From c69207e22ce75198ed3bb384ef0321df0268015e Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 16:15:34 +0530 Subject: [PATCH 17/21] made fuzzy into 4 sep functions --- .../GomartUser/Customer/CustomerService.java | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index af52c35..ec18733 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -140,9 +140,23 @@ public List getProductsByCategory(int category) { public List getProductsByName(String name) { List products = productRepository.findByNameIgnoreCaseContaining(name); if(products.isEmpty()){ - return getProductsByFuzzyName(name); + List fuzzyName = getProductsByFuzzyName(name); + if(fuzzyName.isEmpty()){ + List productsByDescription = getProductsByDescription(name); + if(productsByDescription.isEmpty()){ + return getProductsByFuzzyDescription(name); + } + else{ + return productsByDescription; + } + } + else{ + return fuzzyName; + } + } + else{ + return products; } - return products; } @Transactional @@ -151,20 +165,29 @@ private List getProductsByFuzzyName(String name) { List filtered = products.stream() .filter(product -> FuzzySearch.weightedRatio(product.getName(), name) > 50) .collect(Collectors.toList()); - List byDescription = productRepository.findByDescriptionIgnoreCaseContaining(name); - if(byDescription.isEmpty()){ - List filteredByDescription = products.stream() - .filter(product -> FuzzySearch.weightedRatio(product.getDescription(), name) > 50) + List fProducts = filtered.stream() + .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) .collect(Collectors.toList()); - filtered.addAll(filteredByDescription); - } - else{ - filtered.addAll(byDescription); + return fProducts.subList(0, Math.min(5, fProducts.size())); + } + + @Transactional + private List getProductsByDescription(String name) { + List products = productRepository.findByDescriptionIgnoreCaseContaining(name); + if(products.isEmpty()){ + return getProductsByFuzzyDescription(name); } - // remove dulicates - List filteredFinal = filtered.stream().distinct().collect(Collectors.toList()); - List fProducts = filteredFinal.stream() - .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getName(), name) - FuzzySearch.weightedRatio(p1.getName(), name)) + return products; + } + + @Transactional + private List getProductsByFuzzyDescription(String name) { + List products = getProducts(); + List filtered = products.stream() + .filter(product -> FuzzySearch.weightedRatio(product.getDescription(), name) > 50) + .collect(Collectors.toList()); + List fProducts = filtered.stream() + .sorted((p1, p2) -> FuzzySearch.weightedRatio(p2.getDescription(), name) - FuzzySearch.weightedRatio(p1.getDescription(), name)) .collect(Collectors.toList()); return fProducts.subList(0, Math.min(5, fProducts.size())); } From 3a47a75cac965164b368beaf3d84649f0922adef Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 16:21:27 +0530 Subject: [PATCH 18/21] switched up the order for fuzzy check --- .../gomart/GomartUser/Customer/CustomerService.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index ec18733..e7fd878 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -140,18 +140,19 @@ public List getProductsByCategory(int category) { public List getProductsByName(String name) { List products = productRepository.findByNameIgnoreCaseContaining(name); if(products.isEmpty()){ - List fuzzyName = getProductsByFuzzyName(name); - if(fuzzyName.isEmpty()){ - List productsByDescription = getProductsByDescription(name); - if(productsByDescription.isEmpty()){ + List productsByDescription = getProductsByDescription(name); + + if(productsByDescription.isEmpty()){ + List fuzzyName = getProductsByFuzzyName(name); + if(fuzzyName.isEmpty()){ return getProductsByFuzzyDescription(name); } else{ - return productsByDescription; + return fuzzyName; } } else{ - return fuzzyName; + return productsByDescription; } } else{ From 38f839fc3f6a50209a16d9db1103e4203f0a60db Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 16:40:47 +0530 Subject: [PATCH 19/21] made application.prop for local hosting the server --- src/main/resources/application.properties | 10 +++++----- target/classes/application.properties | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3dcbb21..0c89c17 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ -spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} -spring.datasource.username=${DB_USER} -spring.datasource.password=${DB_PASSWORD} +spring.datasource.url=jdbc:postgresql://localhost:5432/gomart +spring.datasource.username=postgres +spring.datasource.password=admin@123 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect @@ -10,7 +10,7 @@ spring.servlet.multipart.max-file-size=1MB spring.servlet.multipart.max-request-size=1MB spring.mail.host=smtp.gmail.com spring.mail.port=587 -spring.mail.username=${MAIL_USER} -spring.mail.password=${MAIL_PASSWORD} +spring.mail.username=gomart.ecommerce@gmail.com +spring.mail.password=ifybkfhxogwqrxxn spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true \ No newline at end of file diff --git a/target/classes/application.properties b/target/classes/application.properties index 3dcbb21..0c89c17 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,6 +1,6 @@ -spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} -spring.datasource.username=${DB_USER} -spring.datasource.password=${DB_PASSWORD} +spring.datasource.url=jdbc:postgresql://localhost:5432/gomart +spring.datasource.username=postgres +spring.datasource.password=admin@123 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect @@ -10,7 +10,7 @@ spring.servlet.multipart.max-file-size=1MB spring.servlet.multipart.max-request-size=1MB spring.mail.host=smtp.gmail.com spring.mail.port=587 -spring.mail.username=${MAIL_USER} -spring.mail.password=${MAIL_PASSWORD} +spring.mail.username=gomart.ecommerce@gmail.com +spring.mail.password=ifybkfhxogwqrxxn spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true \ No newline at end of file From 403ca9f897312ba4a6d001102d20f9d2eee5f370 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 17:39:42 +0530 Subject: [PATCH 20/21] made max request size as 10mb --- src/main/resources/application.properties | 4 ++-- target/classes/application.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0c89c17..a09c5b9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,8 +6,8 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true server.error.include-message=always -spring.servlet.multipart.max-file-size=1MB -spring.servlet.multipart.max-request-size=1MB +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=gomart.ecommerce@gmail.com diff --git a/target/classes/application.properties b/target/classes/application.properties index 0c89c17..a09c5b9 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -6,8 +6,8 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true server.error.include-message=always -spring.servlet.multipart.max-file-size=1MB -spring.servlet.multipart.max-request-size=1MB +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=gomart.ecommerce@gmail.com From 13ffe471edbc2e969b1ced2a8cbbb969250a6539 Mon Sep 17 00:00:00 2001 From: majimearun Date: Tue, 6 Dec 2022 23:28:37 +0530 Subject: [PATCH 21/21] fixed some report errors --- .../gomart/GomartUser/Admin/AdminService.java | 18 +++++++++++++++++- .../GomartUser/Customer/CustomerService.java | 13 ++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java index e3bd7b0..789b302 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Admin/AdminService.java @@ -25,7 +25,10 @@ import java.io.IOException; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -142,8 +145,21 @@ public List getPendingManagers(Long adminId){ public List getItemsSoldOnADate(Long adminId, LocalDate date){ if(checkAdminStatus(adminId)){ List orders = orderRepository.findByOrderDate(date); - List send = orders.stream().map(order -> new SendCart(snapshotToProduct(order.getProduct()), order.getQuantity())).collect(Collectors.toList()); + Map productToQuantity = new HashMap<>(); + for(Order order : orders){ + if(productToQuantity.containsKey(order.getProduct())){ + productToQuantity.put(order.getProduct(), productToQuantity.get(order.getProduct()) + order.getQuantity()); + } + else{ + productToQuantity.put(order.getProduct(), order.getQuantity()); + } + } + List send = new ArrayList<>(); + for(Map.Entry entry : productToQuantity.entrySet()){ + send.add(new SendCart(snapshotToProduct(entry.getKey()), entry.getValue())); + } return send; + } else{ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User does not have Admin level access or is not logged in"); diff --git a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java index e7fd878..8fbe917 100644 --- a/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java +++ b/src/main/java/com/ecommerce/gomart/GomartUser/Customer/CustomerService.java @@ -140,7 +140,7 @@ public List getProductsByCategory(int category) { public List getProductsByName(String name) { List products = productRepository.findByNameIgnoreCaseContaining(name); if(products.isEmpty()){ - List productsByDescription = getProductsByDescription(name); + List productsByDescription = productRepository.findByDescriptionIgnoreCaseContaining(name); if(productsByDescription.isEmpty()){ List fuzzyName = getProductsByFuzzyName(name); @@ -172,15 +172,6 @@ private List getProductsByFuzzyName(String name) { return fProducts.subList(0, Math.min(5, fProducts.size())); } - @Transactional - private List getProductsByDescription(String name) { - List products = productRepository.findByDescriptionIgnoreCaseContaining(name); - if(products.isEmpty()){ - return getProductsByFuzzyDescription(name); - } - return products; - } - @Transactional private List getProductsByFuzzyDescription(String name) { List products = getProducts(); @@ -239,7 +230,7 @@ public List getOrders(Long userId){ .build(); List orders = orderRepository.findByCustomer(customerSnapshot); List send = orders.stream().map(order -> new SendOrder(order.getOrderTransactionId(),order.getProduct(), order.getQuantity(), order.getOrderDate())).collect(Collectors.toList()); - return send; + return send.stream().sorted((o1, o2) -> o2.getOrderDate().compareTo(o1.getOrderDate())).collect(Collectors.toList()); } else{ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User not logged in");