diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b3f84b8 Binary files /dev/null and b/.DS_Store differ diff --git a/Lecture 11/.DS_Store b/Lecture 11/.DS_Store new file mode 100644 index 0000000..b1cec2a Binary files /dev/null and b/Lecture 11/.DS_Store differ diff --git a/Lecture 11/Java Code/.DS_Store b/Lecture 11/Java Code/.DS_Store new file mode 100644 index 0000000..cac70c6 Binary files /dev/null and b/Lecture 11/Java Code/.DS_Store differ diff --git a/Lecture 11/Java Code/Tomato/Main.java b/Lecture 11/Java Code/Tomato/Java Code/Main.java similarity index 100% rename from Lecture 11/Java Code/Tomato/Main.java rename to Lecture 11/Java Code/Tomato/Java Code/Main.java diff --git a/Lecture 11/Java Code/Tomato/TomatoApp.java b/Lecture 11/Java Code/Tomato/Java Code/TomatoApp.java similarity index 100% rename from Lecture 11/Java Code/Tomato/TomatoApp.java rename to Lecture 11/Java Code/Tomato/Java Code/TomatoApp.java diff --git a/Lecture 11/Java Code/Tomato/factories/NowOrderFactory.java b/Lecture 11/Java Code/Tomato/Java Code/factories/NowOrderFactory.java similarity index 100% rename from Lecture 11/Java Code/Tomato/factories/NowOrderFactory.java rename to Lecture 11/Java Code/Tomato/Java Code/factories/NowOrderFactory.java diff --git a/Lecture 11/Java Code/Tomato/factories/OrderFactory.java b/Lecture 11/Java Code/Tomato/Java Code/factories/OrderFactory.java similarity index 100% rename from Lecture 11/Java Code/Tomato/factories/OrderFactory.java rename to Lecture 11/Java Code/Tomato/Java Code/factories/OrderFactory.java diff --git a/Lecture 11/Java Code/Tomato/factories/ScheduledOrderFactory.java b/Lecture 11/Java Code/Tomato/Java Code/factories/ScheduledOrderFactory.java similarity index 100% rename from Lecture 11/Java Code/Tomato/factories/ScheduledOrderFactory.java rename to Lecture 11/Java Code/Tomato/Java Code/factories/ScheduledOrderFactory.java diff --git a/Lecture 11/Java Code/Tomato/managers/OrderManager.java b/Lecture 11/Java Code/Tomato/Java Code/managers/OrderManager.java similarity index 100% rename from Lecture 11/Java Code/Tomato/managers/OrderManager.java rename to Lecture 11/Java Code/Tomato/Java Code/managers/OrderManager.java diff --git a/Lecture 11/Java Code/Tomato/managers/RestaurantManager.java b/Lecture 11/Java Code/Tomato/Java Code/managers/RestaurantManager.java similarity index 100% rename from Lecture 11/Java Code/Tomato/managers/RestaurantManager.java rename to Lecture 11/Java Code/Tomato/Java Code/managers/RestaurantManager.java diff --git a/Lecture 11/Java Code/Tomato/models/Cart.java b/Lecture 11/Java Code/Tomato/Java Code/models/Cart.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/Cart.java rename to Lecture 11/Java Code/Tomato/Java Code/models/Cart.java diff --git a/Lecture 11/Java Code/Tomato/models/DeliveryOrder.java b/Lecture 11/Java Code/Tomato/Java Code/models/DeliveryOrder.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/DeliveryOrder.java rename to Lecture 11/Java Code/Tomato/Java Code/models/DeliveryOrder.java diff --git a/Lecture 11/Java Code/Tomato/models/MenuItem.java b/Lecture 11/Java Code/Tomato/Java Code/models/MenuItem.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/MenuItem.java rename to Lecture 11/Java Code/Tomato/Java Code/models/MenuItem.java diff --git a/Lecture 11/Java Code/Tomato/models/Order.java b/Lecture 11/Java Code/Tomato/Java Code/models/Order.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/Order.java rename to Lecture 11/Java Code/Tomato/Java Code/models/Order.java diff --git a/Lecture 11/Java Code/Tomato/models/PickupOrder.java b/Lecture 11/Java Code/Tomato/Java Code/models/PickupOrder.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/PickupOrder.java rename to Lecture 11/Java Code/Tomato/Java Code/models/PickupOrder.java diff --git a/Lecture 11/Java Code/Tomato/models/Restaurant.java b/Lecture 11/Java Code/Tomato/Java Code/models/Restaurant.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/Restaurant.java rename to Lecture 11/Java Code/Tomato/Java Code/models/Restaurant.java diff --git a/Lecture 11/Java Code/Tomato/models/User.java b/Lecture 11/Java Code/Tomato/Java Code/models/User.java similarity index 100% rename from Lecture 11/Java Code/Tomato/models/User.java rename to Lecture 11/Java Code/Tomato/Java Code/models/User.java diff --git a/Lecture 11/Java Code/Tomato/services/NotificationService.java b/Lecture 11/Java Code/Tomato/Java Code/services/NotificationService.java similarity index 100% rename from Lecture 11/Java Code/Tomato/services/NotificationService.java rename to Lecture 11/Java Code/Tomato/Java Code/services/NotificationService.java diff --git a/Lecture 11/Java Code/Tomato/strategies/CreditCardPaymentStrategy.java b/Lecture 11/Java Code/Tomato/Java Code/strategies/CreditCardPaymentStrategy.java similarity index 100% rename from Lecture 11/Java Code/Tomato/strategies/CreditCardPaymentStrategy.java rename to Lecture 11/Java Code/Tomato/Java Code/strategies/CreditCardPaymentStrategy.java diff --git a/Lecture 11/Java Code/Tomato/strategies/PaymentStrategy.java b/Lecture 11/Java Code/Tomato/Java Code/strategies/PaymentStrategy.java similarity index 100% rename from Lecture 11/Java Code/Tomato/strategies/PaymentStrategy.java rename to Lecture 11/Java Code/Tomato/Java Code/strategies/PaymentStrategy.java diff --git a/Lecture 11/Java Code/Tomato/strategies/UpiPaymentStrategy.java b/Lecture 11/Java Code/Tomato/Java Code/strategies/UpiPaymentStrategy.java similarity index 100% rename from Lecture 11/Java Code/Tomato/strategies/UpiPaymentStrategy.java rename to Lecture 11/Java Code/Tomato/Java Code/strategies/UpiPaymentStrategy.java diff --git a/Lecture 11/Java Code/Tomato/utils/TimeUtils.java b/Lecture 11/Java Code/Tomato/Java Code/utils/TimeUtils.java similarity index 100% rename from Lecture 11/Java Code/Tomato/utils/TimeUtils.java rename to Lecture 11/Java Code/Tomato/Java Code/utils/TimeUtils.java diff --git a/Lecture 11/Java Code/Tomato/TomatoApp.js b/Lecture 11/Java Code/Tomato/TomatoApp.js new file mode 100644 index 0000000..ca04c69 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/TomatoApp.js @@ -0,0 +1,97 @@ +import { Restaurant } from './models/Restaurant.js'; +import { MenuItem } from './models/MenuItem.js'; +import { RestaurantManager } from './managers/RestaurantManager.js'; +import { OrderManager } from './managers/OrderManager.js'; +import { NowOrderFactory } from './factories/NowOrderFactory.js'; +import { ScheduledOrderFactory } from './factories/ScheduledOrderFactory.js'; +import { NotificationService } from './services/NotificationService.js'; + +export class TomatoApp { + constructor() { + this.initializeRestaurants(); + } + + initializeRestaurants() { + const restaurant1 = new Restaurant("Bikaner", "Delhi"); + restaurant1.addMenuItem(new MenuItem("P1", "Chole Bhature", 120)); + restaurant1.addMenuItem(new MenuItem("P2", "Samosa", 15)); + + const restaurant2 = new Restaurant("Haldiram", "Kolkata"); + restaurant2.addMenuItem(new MenuItem("P1", "Raj Kachori", 80)); + restaurant2.addMenuItem(new MenuItem("P2", "Pav Bhaji", 100)); + restaurant2.addMenuItem(new MenuItem("P3", "Dhokla", 50)); + + const restaurant3 = new Restaurant("Saravana Bhavan", "Chennai"); + restaurant3.addMenuItem(new MenuItem("P1", "Masala Dosa", 90)); + restaurant3.addMenuItem(new MenuItem("P2", "Idli Vada", 60)); + restaurant3.addMenuItem(new MenuItem("P3", "Filter Coffee", 30)); + + const restaurantManager = RestaurantManager.getInstance(); + restaurantManager.addRestaurant(restaurant1); + restaurantManager.addRestaurant(restaurant2); + restaurantManager.addRestaurant(restaurant3); + } + + searchRestaurants(location) { + return RestaurantManager.getInstance().searchByLocation(location); + } + + selectRestaurant(user, restaurant) { + const cart = user.getCart(); + cart.setRestaurant(restaurant); + } + + addToCart(user, itemCode) { + const restaurant = user.getCart().getRestaurant(); + if (!restaurant) { + console.log("Please select a restaurant first."); + return; + } + for (const item of restaurant.getMenu()) { + if (item.getCode() === itemCode) { + user.getCart().addItem(item); + break; + } + } + } + + checkoutNow(user, orderType, paymentStrategy) { + return this.checkout(user, orderType, paymentStrategy, new NowOrderFactory()); + } + + checkoutScheduled(user, orderType, paymentStrategy, scheduleTime) { + return this.checkout(user, orderType, paymentStrategy, new ScheduledOrderFactory(scheduleTime)); + } + + checkout(user, orderType, paymentStrategy, orderFactory) { + if (user.getCart().isEmpty()) return null; + + const userCart = user.getCart(); + const orderedRestaurant = userCart.getRestaurant(); + const itemsOrdered = userCart.getItems(); + const totalCost = userCart.getTotalCost(); + + const order = orderFactory.createOrder(user, userCart, orderedRestaurant, itemsOrdered, paymentStrategy, totalCost, orderType); + OrderManager.getInstance().addOrder(order); + return order; + } + + payForOrder(user, order) { + const isPaymentSuccess = order.processPayment(); + + if (isPaymentSuccess) { + NotificationService.notify(order); + user.getCart().clear(); + } + } + + printUserCart(user) { + console.log("Items in cart:"); + console.log("------------------------------------"); + for (const item of user.getCart().getItems()) { + console.log(`${item.getCode()} : ${item.getName()} : ₹${item.getPrice()}`); + } + console.log("------------------------------------"); + console.log(`Grand total : ₹${user.getCart().getTotalCost()}`); + } +} diff --git a/Lecture 11/Java Code/Tomato/UML.png b/Lecture 11/Java Code/Tomato/UML.png new file mode 100644 index 0000000..a308d84 Binary files /dev/null and b/Lecture 11/Java Code/Tomato/UML.png differ diff --git a/Lecture 11/Java Code/Tomato/factories/NowOrderFactory.js b/Lecture 11/Java Code/Tomato/factories/NowOrderFactory.js new file mode 100644 index 0000000..95f6b97 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/factories/NowOrderFactory.js @@ -0,0 +1,28 @@ +import { OrderFactory } from './OrderFactory.js'; +import { DeliveryOrder } from '../models/DeliveryOrder.js'; +import { PickupOrder } from '../models/PickupOrder.js'; +import { TimeUtils } from '../utils/TimeUtils.js'; + +export class NowOrderFactory extends OrderFactory { + createOrder(user, cart, restaurant, menuItems, paymentStrategy, totalCost, orderType) { + let order = null; + + if (orderType === "Delivery") { + const deliveryOrder = new DeliveryOrder(); + deliveryOrder.setUserAddress(user.getAddress()); + order = deliveryOrder; + } else { + const pickupOrder = new PickupOrder(); + pickupOrder.setRestaurantAddress(restaurant.getLocation()); + order = pickupOrder; + } + + order.setUser(user); + order.setRestaurant(restaurant); + order.setItems(menuItems); + order.setPaymentStrategy(paymentStrategy); + order.setScheduled(TimeUtils.getCurrentTime()); + order.setTotal(totalCost); + return order; + } +} diff --git a/Lecture 11/Java Code/Tomato/factories/OrderFactory.js b/Lecture 11/Java Code/Tomato/factories/OrderFactory.js new file mode 100644 index 0000000..7f57d98 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/factories/OrderFactory.js @@ -0,0 +1,5 @@ +export class OrderFactory { + createOrder(user, cart, restaurant, menuItems, paymentStrategy, totalCost, orderType) { + throw new Error("Method 'createOrder()' must be implemented."); + } +} diff --git a/Lecture 11/Java Code/Tomato/factories/ScheduledOrderFactory.js b/Lecture 11/Java Code/Tomato/factories/ScheduledOrderFactory.js new file mode 100644 index 0000000..29d230b --- /dev/null +++ b/Lecture 11/Java Code/Tomato/factories/ScheduledOrderFactory.js @@ -0,0 +1,32 @@ +import { OrderFactory } from './OrderFactory.js'; +import { DeliveryOrder } from '../models/DeliveryOrder.js'; +import { PickupOrder } from '../models/PickupOrder.js'; + +export class ScheduledOrderFactory extends OrderFactory { + constructor(scheduleTime) { + super(); + this.scheduleTime = scheduleTime; + } + + createOrder(user, cart, restaurant, menuItems, paymentStrategy, totalCost, orderType) { + let order = null; + + if (orderType === "Delivery") { + const deliveryOrder = new DeliveryOrder(); + deliveryOrder.setUserAddress(user.getAddress()); + order = deliveryOrder; + } else { + const pickupOrder = new PickupOrder(); + pickupOrder.setRestaurantAddress(restaurant.getLocation()); + order = pickupOrder; + } + + order.setUser(user); + order.setRestaurant(restaurant); + order.setItems(menuItems); + order.setPaymentStrategy(paymentStrategy); + order.setScheduled(this.scheduleTime); + order.setTotal(totalCost); + return order; + } +} diff --git a/Lecture 11/Java Code/Tomato/index.js b/Lecture 11/Java Code/Tomato/index.js new file mode 100644 index 0000000..9037030 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/index.js @@ -0,0 +1,46 @@ +import { TomatoApp } from './TomatoApp.js'; +import { User } from './models/User.js'; +import { UpiPaymentStrategy } from './strategies/UpiPaymentStrategy.js'; + +function main() { + // Simulating a happy flow + // Create TomatoApp Object + const tomato = new TomatoApp(); + + // Simulate a user coming in (Happy Flow) + const user = new User(101, "Aditya", "Delhi"); + console.log(`User: ${user.getName()} is active.`); + + // User searches for restaurants by location + const restaurantList = tomato.searchRestaurants("Delhi"); + + if (restaurantList.length === 0) { + console.log("No restaurants found!"); + return; + } + + console.log("Found Restaurants:"); + for (const restaurant of restaurantList) { + console.log(" - " + restaurant.getName()); + } + + // User selects a restaurant + tomato.selectRestaurant(user, restaurantList[0]); + console.log("Selected restaurant: " + restaurantList[0].getName()); + + // User adds items to the cart + tomato.addToCart(user, "P1"); + tomato.addToCart(user, "P2"); + + tomato.printUserCart(user); + + // User checkout the cart + const order = tomato.checkoutNow(user, "Delivery", new UpiPaymentStrategy("1234567890")); + + // User pays for the cart. If payment is successful, notification is sent. + if (order) { + tomato.payForOrder(user, order); + } +} + +main(); diff --git a/Lecture 11/Java Code/Tomato/managers/OrderManager.js b/Lecture 11/Java Code/Tomato/managers/OrderManager.js new file mode 100644 index 0000000..c10aded --- /dev/null +++ b/Lecture 11/Java Code/Tomato/managers/OrderManager.js @@ -0,0 +1,27 @@ +export class OrderManager { + constructor() { + if (OrderManager.instance) { + return OrderManager.instance; + } + this.orders = []; + OrderManager.instance = this; + } + + static getInstance() { + if (!OrderManager.instance) { + OrderManager.instance = new OrderManager(); + } + return OrderManager.instance; + } + + addOrder(order) { + this.orders.push(order); + } + + listOrders() { + console.log("\n--- All Orders ---"); + for (const order of this.orders) { + console.log(`${order.getType()} order for ${order.getUser().getName()} | Total: ₹${order.getTotal()} | At: ${order.getScheduled()}`); + } + } +} diff --git a/Lecture 11/Java Code/Tomato/managers/RestaurantManager.js b/Lecture 11/Java Code/Tomato/managers/RestaurantManager.js new file mode 100644 index 0000000..44c64f7 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/managers/RestaurantManager.js @@ -0,0 +1,32 @@ +export class RestaurantManager { + constructor() { + if (RestaurantManager.instance) { + return RestaurantManager.instance; + } + this.restaurants = []; + RestaurantManager.instance = this; + } + + static getInstance() { + if (!RestaurantManager.instance) { + RestaurantManager.instance = new RestaurantManager(); + } + return RestaurantManager.instance; + } + + addRestaurant(r) { + this.restaurants.push(r); + } + + searchByLocation(loc) { + const result = []; + loc = loc.toLowerCase(); + for (const r of this.restaurants) { + const rl = r.getLocation().toLowerCase(); + if (rl === loc) { + result.push(r); + } + } + return result; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/Cart.js b/Lecture 11/Java Code/Tomato/models/Cart.js new file mode 100644 index 0000000..f0b1748 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/Cart.js @@ -0,0 +1,43 @@ +export class Cart { + constructor() { + this.restaurant = null; + this.items = []; + } + + addItem(item) { + if (this.restaurant === null) { + console.error("Cart: Set a restaurant before adding items."); + return; + } + this.items.push(item); + } + + getTotalCost() { + let sum = 0; + for (const item of this.items) { + sum += item.getPrice(); + } + return sum; + } + + isEmpty() { + return this.restaurant === null || this.items.length === 0; + } + + clear() { + this.items = []; + this.restaurant = null; + } + + setRestaurant(r) { + this.restaurant = r; + } + + getRestaurant() { + return this.restaurant; + } + + getItems() { + return this.items; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/DeliveryOrder.js b/Lecture 11/Java Code/Tomato/models/DeliveryOrder.js new file mode 100644 index 0000000..648b45a --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/DeliveryOrder.js @@ -0,0 +1,20 @@ +import { Order } from './Order.js'; + +export class DeliveryOrder extends Order { + constructor() { + super(); + this.userAddress = ""; + } + + getType() { + return "Delivery"; + } + + setUserAddress(addr) { + this.userAddress = addr; + } + + getUserAddress() { + return this.userAddress; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/MenuItem.js b/Lecture 11/Java Code/Tomato/models/MenuItem.js new file mode 100644 index 0000000..f2b409f --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/MenuItem.js @@ -0,0 +1,31 @@ +export class MenuItem { + constructor(code, name, price) { + this.code = code; + this.name = name; + this.price = price; + } + + getCode() { + return this.code; + } + + setCode(c) { + this.code = c; + } + + getName() { + return this.name; + } + + setName(n) { + this.name = n; + } + + getPrice() { + return this.price; + } + + setPrice(p) { + this.price = p; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/Order.js b/Lecture 11/Java Code/Tomato/models/Order.js new file mode 100644 index 0000000..d577ebb --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/Order.js @@ -0,0 +1,83 @@ +export class Order { + static nextOrderId = 0; + + constructor() { + if (this.constructor === Order) { + // Abstract class simulation + // throw new Error("Cannot instantiate abstract class Order"); + } + this.user = null; + this.restaurant = null; + this.paymentStrategy = null; + this.total = 0.0; + this.scheduled = ""; + this.orderId = ++Order.nextOrderId; + this.items = []; + } + + processPayment() { + if (this.paymentStrategy !== null) { + this.paymentStrategy.pay(this.total); + return true; + } else { + console.log("Please choose a payment mode first"); + return false; + } + } + + getType() { + throw new Error("Method 'getType()' must be implemented."); + } + + getOrderId() { + return this.orderId; + } + + setUser(u) { + this.user = u; + } + + getUser() { + return this.user; + } + + setRestaurant(r) { + this.restaurant = r; + } + + getRestaurant() { + return this.restaurant; + } + + setItems(its) { + this.items = its; + this.total = 0; + for (const i of this.items) { + this.total += i.getPrice(); + } + } + + getItems() { + return this.items; + } + + setPaymentStrategy(p) { + this.paymentStrategy = p; + } + + setScheduled(s) { + this.scheduled = s; + } + + getScheduled() { + return this.scheduled; + } + + getTotal() { + return this.total; + } + + setTotal(total) { + this.total = total; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/PickupOrder.js b/Lecture 11/Java Code/Tomato/models/PickupOrder.js new file mode 100644 index 0000000..2329fd1 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/PickupOrder.js @@ -0,0 +1,20 @@ +import { Order } from './Order.js'; + +export class PickupOrder extends Order { + constructor() { + super(); + this.restaurantAddress = ""; + } + + getType() { + return "Pickup"; + } + + setRestaurantAddress(addr) { + this.restaurantAddress = addr; + } + + getRestaurantAddress() { + return this.restaurantAddress; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/Restaurant.js b/Lecture 11/Java Code/Tomato/models/Restaurant.js new file mode 100644 index 0000000..86c260f --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/Restaurant.js @@ -0,0 +1,34 @@ +export class Restaurant { + static nextRestaurantId = 0; + + constructor(name, location) { + this.name = name; + this.location = location; + this.restaurantId = ++Restaurant.nextRestaurantId; + this.menu = []; + } + + getName() { + return this.name; + } + + setName(n) { + this.name = n; + } + + getLocation() { + return this.location; + } + + setLocation(loc) { + this.location = loc; + } + + addMenuItem(item) { + this.menu.push(item); + } + + getMenu() { + return this.menu; + } +} diff --git a/Lecture 11/Java Code/Tomato/models/User.js b/Lecture 11/Java Code/Tomato/models/User.js new file mode 100644 index 0000000..2614d80 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/models/User.js @@ -0,0 +1,30 @@ +import { Cart } from './Cart.js'; + +export class User { + constructor(userId, name, address) { + this.userId = userId; + this.name = name; + this.address = address; + this.cart = new Cart(); + } + + getName() { + return this.name; + } + + setName(n) { + this.name = n; + } + + getAddress() { + return this.address; + } + + setAddress(a) { + this.address = a; + } + + getCart() { + return this.cart; + } +} diff --git a/Lecture 11/Java Code/Tomato/package.json b/Lecture 11/Java Code/Tomato/package.json new file mode 100644 index 0000000..41ed224 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/package.json @@ -0,0 +1,12 @@ +{ + "name": "tomato-app", + "version": "1.0.0", + "description": "Online Food Ordering System", + "main": "index.js", + "type": "module", + "scripts": { + "start": "node index.js" + }, + "author": "", + "license": "ISC" +} diff --git a/Lecture 11/Java Code/Tomato/services/NotificationService.js b/Lecture 11/Java Code/Tomato/services/NotificationService.js new file mode 100644 index 0000000..7f38cd5 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/services/NotificationService.js @@ -0,0 +1,20 @@ +export class NotificationService { + static notify(order) { + console.log(`\nNotification: New ${order.getType()} order placed!`); + console.log("---------------------------------------------"); + console.log(`Order ID: ${order.getOrderId()}`); + console.log(`Customer: ${order.getUser().getName()}`); + console.log(`Restaurant: ${order.getRestaurant().getName()}`); + console.log("Items Ordered:"); + + const items = order.getItems(); + for (const item of items) { + console.log(` - ${item.getName()} (₹${item.getPrice()})`); + } + + console.log(`Total: ₹${order.getTotal()}`); + console.log(`Scheduled For: ${order.getScheduled()}`); + console.log("Payment: Done"); + console.log("---------------------------------------------"); + } +} diff --git a/Lecture 11/Java Code/Tomato/strategies/CreditCardPaymentStrategy.js b/Lecture 11/Java Code/Tomato/strategies/CreditCardPaymentStrategy.js new file mode 100644 index 0000000..951ffa3 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/strategies/CreditCardPaymentStrategy.js @@ -0,0 +1,12 @@ +import { PaymentStrategy } from './PaymentStrategy.js'; + +export class CreditCardPaymentStrategy extends PaymentStrategy { + constructor(card) { + super(); + this.cardNumber = card; + } + + pay(amount) { + console.log(`Paid ₹${amount} using Credit Card (${this.cardNumber})`); + } +} diff --git a/Lecture 11/Java Code/Tomato/strategies/PaymentStrategy.js b/Lecture 11/Java Code/Tomato/strategies/PaymentStrategy.js new file mode 100644 index 0000000..df8e499 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/strategies/PaymentStrategy.js @@ -0,0 +1,5 @@ +export class PaymentStrategy { + pay(amount) { + throw new Error("Method 'pay()' must be implemented."); + } +} diff --git a/Lecture 11/Java Code/Tomato/strategies/UpiPaymentStrategy.js b/Lecture 11/Java Code/Tomato/strategies/UpiPaymentStrategy.js new file mode 100644 index 0000000..1bcf1c8 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/strategies/UpiPaymentStrategy.js @@ -0,0 +1,12 @@ +import { PaymentStrategy } from './PaymentStrategy.js'; + +export class UpiPaymentStrategy extends PaymentStrategy { + constructor(mob) { + super(); + this.mobile = mob; + } + + pay(amount) { + console.log(`Paid ₹${amount} using UPI (${this.mobile})`); + } +} diff --git a/Lecture 11/Java Code/Tomato/utils/TimeUtils.js b/Lecture 11/Java Code/Tomato/utils/TimeUtils.js new file mode 100644 index 0000000..d225973 --- /dev/null +++ b/Lecture 11/Java Code/Tomato/utils/TimeUtils.js @@ -0,0 +1,6 @@ +export class TimeUtils { + static getCurrentTime() { + const now = new Date(); + return now.toString(); // Simplified format, or use a library like date-fns/moment if needed, but toString is fine for now matching the Java output roughly + } +}