This app connects users with restaurants and stores that offer surplus food at a discount, making it easy for consumers to access quality food affordably while reducing food waste in Tunisia.
This app connects users with restaurants and stores that offer surplus food at a discount, making it easy for consumers to access quality food affordably while reducing food waste in Tunisia.
# App Main Features
- User Authentication
- User Profile Management
- Store Management
- Store Search and Discovery
- Surprise Bag Management
- Order and Reservation
- Review and Rating
- Analytics and Reporting
- System Administration
# Main Class Diagram
```mermaid
classDiagram
%% User Management
class User {
-int userId
-string firstName
-string lastName
-string email
-string password
-string phoneNumber
-string address
-DateTime createdAt
-UserStatus status
+register() bool
+login() bool
+updateProfile() bool
+resetPassword() bool
}
class Customer {
-List~Order~ orderHistory
-List~Store~ favoriteStores
-float rating
+searchNearbyStores(location: Location) List~Store~
+makeReservation(surpriseBag: SurpriseBag) Order
+cancelReservation(order: Order) bool
+rateStore(store: Store, rating: Rating) bool
+addToFavorites(store: Store) bool
+viewOrderHistory() List~Order~
}
class Store {
-string storeName
-string description
-StoreCategory category
-Schedule pickupWindows
-bool isVerified
-float averageRating
-List~SurpriseBag~ activeBags
-Location location
-string photoUrl
-float averageBagValue
+updateStoreInfo() bool
+addSurpriseBag(bag: SurpriseBag) bool
+removeSurpriseBag(bagId: int) bool
+updatePickupWindows(windows: Schedule) bool
+viewStatistics() Statistics
+respondToReview(review: Review, response: string) bool
}
class SurpriseBag {
-int bagId
-string name
-string description
-float originalValue
-float discountedPrice
-int quantity
-MealType mealType
-List~string~ allergenInfo
-DateTime pickupStart
-DateTime pickupEnd
-BagStatus status
+createBag() bool
+updateBag() bool
+updateQuantity(quantity: int) bool
+markAsReserved() bool
+markAsCollected() bool
}
class Order {
-int orderId
-DateTime orderDate
-OrderStatus status
-SurpriseBag bag
-PickupWindow pickupTime
-s …