Food Delivery Application
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;
}
}- 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
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 sortCancellation 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.