🛵
Marketplace & Logistics

Food Delivery Application

Swiggy/Zomato Ka Core Design
💡 Food delivery EK TRIPLE MATCHMAKING hai — customer, restaurant aur delivery partner, teeno ko sahi waqt par jodna. Koi ek der kare to poora order bigadta hai.

Teen alag actors hain aur teeno ka apna lifecycle hai. Order ek State machine hai: PLACED → ACCEPTED → PREPARING → READY → PICKED_UP → DELIVERED. Har transition par notification jaati hai — yahan Observer pattern natural fit hai.

Delivery partner assignment sabse interesting hissa hai. DeliveryAssignmentStrategy interface banao: simplest hai "nearest available partner" (geohash ya quadtree se), better hai jo partner ki current direction aur batch delivery bhi dekhe. Restaurant search ke liye location-based indexing mention karo.

enum OrderStatus { PLACED, ACCEPTED, PREPARING, READY, PICKED_UP, DELIVERED, CANCELLED }

interface OrderObserver { void onStatusChange(Order o, OrderStatus from, OrderStatus to); }
// Implementations: CustomerNotifier, RestaurantNotifier, DeliveryPartnerNotifier

interface DeliveryAssignmentStrategy {
  Optional<DeliveryPartner> assign(Order order, List<DeliveryPartner> nearby);
}

class Order {
  void transitionTo(OrderStatus next) {
    if (!current.canTransitionTo(next)) throw new InvalidTransitionException();
    observers.forEach(o -> o.onStatusChange(this, current, next));
    this.current = next;
  }
}
🛵
Food delivery EK TRIPLE MATCHMAKING hai — customer, restaurant aur delivery partner, teeno ko sahi waqt par jodna. Koi ek der kare to poora order bigadta hai.
1 / 2
⚡ Quick Recap
  • Order ek state machine hai, invalid transitions block karo
  • Observer pattern se customer/restaurant/partner sabko notify karo
  • DeliveryAssignmentStrategy alag — nearest se batching tak upgrade ho
Is page mein (2 subtopics)

Search location-based hai: user ke pincode/coordinates se X km ke andar ke restaurants. Iske liye geospatial index chahiye (geohash, PostGIS, ya Elasticsearch geo_point) — poora table scan nahi.

Ranking multi-factor hoti hai: distance, rating, delivery time, aur sponsored placement. Ise RankingStrategy banao. Aur filters (veg, cuisine, price range) ko index par apply karo, results par nahi.

interface RestaurantSearchStrategy {
  List<Restaurant> search(Location userLocation, SearchFilters filters);
}
// Geo index se candidates -> filters -> RankingStrategy se sort

Cancellation ka rule state par depend karta hai: PLACED par free cancel, PREPARING par partial charge (restaurant ne saamaan laga diya), PICKED_UP ke baad cancel nahi. Ye state machine ka hi extension hai.

Teen actors cancel kar sakte hain — customer, restaurant (item khatam), aur system (koi delivery partner nahi mila). Teeno ke refund aur notification alag hain. Ye batana completeness dikhata hai.

💡Tip: "Delivery partner nahi mila to?" ka jawab rakho — timeout ke baad radius badhao, phir bhi na mile to order cancel karke full refund. Har marketplace mein ye case hota hai.