=========================== Major Project Development ============================ Project Name : e-Commerce App Technology Stack : JAVA + Spring Boot + Microservices + MySQL DB + Angular + AWS Cloud + DevOps tools Project Requirements : https://www.youtube.com/watch?v=IbOMX4OYjSM ================= Database Design ================= 1) PRODUCT_CATEGORY category_id PK category_name 2) PRODUCT product_id PK name desc title unit_price image_url active units_stock date_created last_updated category_id FK 3) CUSTOMER customer_id PK name email (UNIQUE) pwd phno pwd_updated 4) SHIPPING_ADDRESS addr_id PK house_num street city state zipcode country customer_id FK 5) ORDER order_id PK order_tracking_num total_quantity total_price order_status (CREATED, CANCELLED, DELIVERED) created_date last_updated delivery_date payment_status razor_pay_order_id razor_pay_payment_id invoice_url customer_id FK addr_id FK 6) ORDER_ITEMS order_item_id PK image_url unit_price quanity product_id FK order_id FK ===================== Entity Classes ===================== ----------------------------------------------------------------- @Entity @Table(name = "product_category") @Setter @Getter public class ProductCategory { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long categoryId; private String categoryName; @OneToMany(mappedBy = "category", cascade = CascadeType.ALL) private List products; } ------------------------------------------------------------------- @Entity @Table(name = "product") @Setter @Getter public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long productId; private String name; private String description; private String title; private BigDecimal unitPrice; private String imageUrl; private boolean active; private int unitsInStock; @CreationTimestamp private LocalDate dateCreated; @UpdateTimestamp private LocalDate lastUpdated; @ManyToOne @JoinColumn(name = "category_id", nullable = false) private ProductCategory category; } --------------------------------------------------------------- @Entity @Table(name = "customer") @Setter @Getter public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long customerId; private String name; private String email; private String password; private String pwdUpdated; private Long phno; @CreationTimestamp private LocalDate dateCreated; @UpdateTimestamp private LocalDate lastUpdated; } -------------------------------------------------------------------- @Entity @Table(name = "address") @Setter @Getter public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long addrId; private String street; private String houseNum; private String city; private String state; private String zipCode; private String country; @CreationTimestamp private LocalDate dateCreated; @UpdateTimestamp private LocalDate lastUpdated; @ManyToOne @JoinColumn(name = "customer_id") private Customer customer; } ----------------------------------------------------------------------------- @Entity @Table(name = "order") @Setter @Getter public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer orderId; private String orderTrackingNum; private String razorPayOrderId; private String razorPayPaymentId; private String email; private String orderStatus; private Double totalPrice; private Integer totalQuantity; private LocalDate deliveryDate; @ManyToOne @JoinColumn(name = "customer_id") private Customer customer; @ManyToOne @JoinColumn(name = "addr_id") private Address address; @CreationTimestamp private LocalDate dateCreated; @UpdateTimestamp private LocalDate lastUpdated; } ------------------------------------------- @Entity @Table(name = "order_item") @Setter @Getter public class OrderItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer itemId; private String itemName; private Double unitPrice; private String imageUrl; private Integer quantity; @ManyToOne @JoinColumn(name = "order_id") private Order order; @ManyToOne @JoinColumn(name = "product_id") private Product product; } ------------------------------------------------------------- ===================== Backend Microservices ===================== 1) Product_API 2) Customer_API 3) Orders_API 4) Notifications_API 5) Admin_API ================= Product API ================ => We have to implement below functionalities in Product API 1) GET product_categories for side menu bar display 2) GET products based on category id 3) GET products based on product name (search option) 4) GET product by product id (for product master view)