{
    "archive_path": "archive/1736015745.600337",
    "base_url": "github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements",
    "basename": "design-amazon-online-shopping-system.md",
    "bookmarked_date": "2025-01-04 18:35",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=github.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": null
    },
    "domain": "github.com",
    "downloaded_at": "2025-01-04T18:35:50.195967+00:00",
    "downloaded_datestr": "2025-01-04 18:35",
    "extension": "md",
    "hash": "31PM1M6MJFPVXMA4239D",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://web.archive.org/save/https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-01-04T18:37:01.978383+00:00",
                "index_texts": null,
                "output": "ArchiveError: Failed to find \"content-location\" URL header in Archive.org response.",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:37:00.363033+00:00",
                "status": "failed"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--proxy-server=socks5://tor-socks-proxy:9150",
                    "--disable-features=DarkMode",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--disable-sync",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--user-data-dir=/data/personas/Default/chrome_profile",
                    "--profile-directory=Default",
                    "--dump-dom",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "131.0.6778",
                "end_ts": "2025-01-04T18:36:22.815443+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:01.494785+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://www.google.com/s2/favicons?domain=github.com"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-01-04T18:35:54.077322+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:35:51.069170+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-01-04T18:35:54.836501+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:35:54.209708+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.8.5rc51",
                "end_ts": "2025-01-04T18:36:51.656463+00:00",
                "index_texts": [
                    "(https://github.githubassets.com) (https://avatars.githubusercontent.com) (https://github-cloud.s3.amazonaws.com) (https://user-images.githubusercontent.com/) (https://github.githubassets.com) (https://avatars.githubusercontent.com) (https://github.githubassets.com/assets/light-0cfd1fd8509e.css) (https://github.githubassets.com/assets/dark-d782f59290e2.css) (https://github.githubassets.com/assets/primer-primitives-953961b66e63.css) (https://github.githubassets.com/assets/primer-4430d3c2c150.css) (https://github.githubassets.com/assets/global-47b8b2ca21ae.css) (https://github.githubassets.com/assets/github-e72829f5538b.css) (https://github.githubassets.com/assets/repository-d031bcc14e1b.css) (https://github.githubassets.com/assets/code-9e1913b328be.css) (https://github.githubassets.com/assets/primer-react.797c8ec006b327590422.module.css) (https://github.githubassets.com/assets/react-code-view.6b587a69b593e23c3657.module.css) (https://github.githubassets.com/assets/primer-react.797c8ec006b327590422.module.css) (https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css) grokking-the-object-oriented-design-interview/object-oriented-design-case-studies/design-amazon-online-shopping-system.md at master \u00b7 tssovi/grokking-the-object-oriented-design-interview \u00b7 GitHub (repo_source) (https://github.githubassets.com/) (/opensearch.xml) (GitHub) (https://github.com/fluidicon.png) (GitHub) (https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg) (https://github.githubassets.com/favicons/favicon.png) (https://github.githubassets.com/favicons/favicon.svg) (/manifest.json)  Skip to content   (https://github.githubassets.com/assets/primer-react.797c8ec006b327590422.module.css)    Navigation Menu Toggle navigation         (/)    (/login?return_to=https%3A%2F%2Fgithub.com%2Ftssovi%2Fgrokking-the-object-oriented-design-interview%2Fblob%2Fmaster%2Fobject-oriented-design-case-studies%2Fdesign-amazon-online-shopping-system.md) Sign in    Product    (https://github.com/features/copilot)    GitHub Copilot Write better code with AI    (https://github.com/features/security)    Security Find and fix vulnerabilities    (https://github.com/features/actions)   Actions Automate any workflow    (https://github.com/features/codespaces)    Codespaces Instant dev environments    (https://github.com/features/issues)   Issues Plan and track work    (https://github.com/features/code-review)    Code Review Manage code changes    (https://github.com/features/discussions)    Discussions Collaborate outside of code    (https://github.com/features/code-search)    Code Search Find more, search less       Explore (https://github.com/features) All features   (https://docs.github.com) Documentation     (https://skills.github.com) GitHub Skills     (https://github.blog) Blog          Solutions    By company size (https://github.com/enterprise) Enterprises   (https://github.com/team) Small and medium teams   (https://github.com/enterprise/startups) Startups     By use case (/solutions/use-case/devsecops) DevSecOps   (/solutions/use-case/devops) DevOps   (/solutions/use-case/ci-cd) CI/CD   (/solutions/use-case) View all use cases      By industry (/solutions/industry/healthcare) Healthcare   (/solutions/industry/financial-services) Financial services   (/solutions/industry/manufacturing) Manufacturing   (/solutions/industry/government) Government   (/solutions/industry) View all industries      (/solutions) View all solutions       Resources    Topics (/resources/articles/ai) AI   (/resources/articles/devops) DevOps   (/resources/articles/security) Security   (/resources/articles/software-development) Software Development   (/resources/articles) View all      Explore (https://resources.github.com/learn/pathways) Learning Pathways     (https://resources.github.com) White papers, Ebooks, Webinars     (https://github.com/customer-stories) Customer Stories   (https://partner.github.com) Partners     (https://github.com/solutions/executive-insights) Executive Insights        Open Source    (/sponsors) GitHub Sponsors Fund open source developers      (https://github.com/readme) The ReadME Project GitHub community articles      Repositories (https://github.com/topics) Topics   (https://github.com/trending) Trending   (https://github.com/collections) Collections        Enterprise    (/enterprise)     Enterprise platform AI-powered developer platform      Available add-ons (https://github.com/enterprise/advanced-security)    Advanced Security Enterprise-grade security features    (/features/copilot#enterprise)    GitHub Copilot Enterprise-grade AI features    (/premium-support)    Premium Support Enterprise-grade 24/7 support         (https://github.com/pricing) Pricing    (Search or jump to...)    Search or jump to...      Search code, repositories, users, issues, pull requests... Search        ()   Clear                (https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax) Search syntax tips          Provide feedback         (GhIxmhkKsm/teCyItmsUjQS8E4jLGqSK4FsdqBkhRnrZnQhi1y9QURCXcaegU1MAC39Nbf0E+6xmfi8ElAGs7Q==) We read every piece of feedback, and take your input very seriously.  Include my email address so I can be contacted    Cancel  Submit feedback     Saved searches  Use saved searches to filter your results more quickly         (FIGuKNGzY3TR1hQYBud9rdpesIiJdfuZ4jwHPL1815xRkKlZS5IvMuuxAldG8PtmXOvKUEbjNSnlDVG5LpJUpg==)  Name (github-ruby) (co1szq5Sv1nxjJ5Z+VbYvdsJfeV4csObRtkis3bw/MpLYDpn1SP2uXf8cOVv9Qx1BmjsapdqXg9QW4V+yjgRdA==)   Query ((repo:mona/a OR repo:mona/b) AND lang:python)  To see all available qualifiers, see our (https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax) documentation .        Cancel  Create saved search        (/login?return_to=https%3A%2F%2Fgithub.com%2Ftssovi%2Fgrokking-the-object-oriented-design-interview%2Fblob%2Fmaster%2Fobject-oriented-design-case-studies%2Fdesign-amazon-online-shopping-system.md) Sign in   (/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo&source_repo=tssovi%2Fgrokking-the-object-oriented-design-interview) Sign up  Reseting focus        You signed in with another tab or window. () Reload to refresh your session. You signed out in another tab or window. () Reload to refresh your session. You switched accounts on another tab or window. () Reload to refresh your session.    Dismiss alert       (/tssovi) tssovi   / (/tssovi/grokking-the-object-oriented-design-interview) grokking-the-object-oriented-design-interview   Public   (/login?return_to=%2Ftssovi%2Fgrokking-the-object-oriented-design-interview)   Notifications  You must be signed in to change notification settings  (/login?return_to=%2Ftssovi%2Fgrokking-the-object-oriented-design-interview)   Fork (2,467) 2.5k   (/login?return_to=%2Ftssovi%2Fgrokking-the-object-oriented-design-interview)   Star  (5,071) 5.1k        (/tssovi/grokking-the-object-oriented-design-interview)   Code (Not available)    (/tssovi/grokking-the-object-oriented-design-interview/issues)    Issues (9) 9   (/tssovi/grokking-the-object-oriented-design-interview/pulls)   Pull requests (1) 1   (/tssovi/grokking-the-object-oriented-design-interview/discussions)   Discussions (Not available)    (/tssovi/grokking-the-object-oriented-design-interview/actions)   Actions (Not available)    (/tssovi/grokking-the-object-oriented-design-interview/projects)   Projects (0) 0   (/tssovi/grokking-the-object-oriented-design-interview/security)   Security   (/tssovi/grokking-the-object-oriented-design-interview/pulse)   Insights (Not available)        Additional navigation options (/tssovi/grokking-the-object-oriented-design-interview)    Code    (/tssovi/grokking-the-object-oriented-design-interview/issues)     Issues    (/tssovi/grokking-the-object-oriented-design-interview/pulls)    Pull requests    (/tssovi/grokking-the-object-oriented-design-interview/discussions)    Discussions    (/tssovi/grokking-the-object-oriented-design-interview/actions)    Actions    (/tssovi/grokking-the-object-oriented-design-interview/projects)    Projects    (/tssovi/grokking-the-object-oriented-design-interview/security)    Security    (/tssovi/grokking-the-object-oriented-design-interview/pulse)    Insights                         Files     master                     (Go to file) ()                 example-codes               media-files               object-oriented-design-and-uml               object-oriented-design-case-studies           design-a-car-rental-system.md            design-a-hotel-management-system.md            design-a-library-management-system.md            design-a-movie-ticket-booking-system.md            design-a-parking-lot.md            design-a-restaurant-management-system.md            design-amazon-online-shopping-system.md            design-an-airline-management-system.md            design-an-atm.md            design-an-online-stock-brokerage-system.md            design-blackjack-and-a-deck-of-cards.md            design-chess.md            design-cricinfo.md            design-facebook.md            design-linkedin.md            design-stack-overflow.md             .gitignore           readme.md                   Breadcrumbs (/tssovi/grokking-the-object-oriented-design-interview/tree/master) grokking-the-object-oriented-design-interview  / (/tssovi/grokking-the-object-oriented-design-interview/tree/master/object-oriented-design-case-studies) object-oriented-design-case-studies    / design-amazon-online-shopping-system.md         Blame    (More file actions)       Blame    (More file actions)                Latest commit (author) (Tusamma Sal Sabil) Tusamma Sal Sabil     (/tssovi/grokking-the-object-oriented-design-interview/commit/61ba22278d49c4f90aa5a3609729cf1347263e09) Add Texts For Use case Diagram    (Sep 23, 2020, 10:33 AM UTC) Sep 23, 2020   (/tssovi/grokking-the-object-oriented-design-interview/commit/61ba22278d49c4f90aa5a3609729cf1347263e09) 61ba222 \u00b7 (Sep 23, 2020, 10:33 AM UTC) Sep 23, 2020   History (/tssovi/grokking-the-object-oriented-design-interview/commits/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md)    History        (/tssovi/grokking-the-object-oriented-design-interview/commits/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md)            (12.4 KB) 396 lines (274 loc) \u00b7 12.4 KB     Breadcrumbs (/tssovi/grokking-the-object-oriented-design-interview/tree/master) grokking-the-object-oriented-design-interview  / (/tssovi/grokking-the-object-oriented-design-interview/tree/master/object-oriented-design-case-studies) object-oriented-design-case-studies    / design-amazon-online-shopping-system.md      Top      File metadata and controls Preview    Code    Blame        (12.4 KB) 396 lines (274 loc) \u00b7 12.4 KB         (https://github.com/tssovi/grokking-the-object-oriented-design-interview/raw/refs/heads/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md) Raw                            (More file actions)          Design Amazon - Online Shopping System     Let's design an online retail store.     We'll cover the following:  System Requirements  Use Case Diagram  Class Diagram  Activity Diagram  Sequence Diagram  Code   Amazon ((https://www.amazon.com/) amazon.com ) is the world\u2019s largest online retailer. The company was originally a bookseller but has expanded to sell a wide variety of consumer goods and digital media. For the sake of this problem, we will focus on their online retail business where users can sell/buy their products. (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/amazon.jpg) (Amazon)  Amazon - Online Shopping System  System Requirements     We will be designing a system with the following requirements: Users should be able to add new products to sell. Users should be able to search for products by their name or category. Users can search and view all the products, but they will have to become a registered member to buy a product. Users should be able to add/remove/modify product items in their shopping cart. Users can check out and buy items in the shopping cart. Users can rate and add a review for a product. The user should be able to specify a shipping address where their order will be delivered. Users can cancel an order if it has not shipped. Users should get notifications whenever there is a change in the order or shipping status. Users should be able to pay through credit cards or electronic bank transfer. Users should be able to track their shipment to see the current state of their order.  Use Case Diagram     We have four main Actors in our system: Admin: Mainly responsible for account management and adding or modifying new product categories. Guest: All guests can search the catalog, add/remove items to the shopping cart, as well as become registered members. Member: Members can perform all the activities that guests can, in addition to which, they can place orders and add new products to sell. System: Mainly responsible for sending notifications for orders and shipping updates.  Here are the top use cases of the Online Shopping System: Add/update products; whenever a product is added or modified, we will update the catalog. Search for products by their name or category. Add/remove product items in the shopping cart. Check-out to buy product items in the shopping cart. Make a payment to place an order. Add a new product category. Send notifications to members with shipment updates.  Here is the use case diagram of our Online Shopping System: (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-use-case.svg) (Online Shoopping System Use Case Diagram)  Use Case Diagram for Online Shoopping System  Class Diagram     Here are the descriptions of the different classes of our Online Shopping System: Account: There are two types of registered accounts in the system: one will be an Admin, who is responsible for adding new product categories and blocking/unblocking members; the other, a Member, who can buy/sell products. Guest: Guests can search for and view products, and add them in the shopping cart. To place an order they have to become a registered member. Catalog: Users of our system can search for products by their name or category. This class will keep an index of all products for faster search. ProductCategory: This will encapsulate the different categories of products, such as books, electronics, etc. Product: This class will encapsulate the entity that the users of our system will be buying and selling. Each Product will belong to a ProductCategory. ProductReview: Any registered member can add a review about a product. ShoppingCart: Users will add product items that they intend to buy to the shopping cart. Item: This class will encapsulate a product item that the users will be buying or placing in the shopping cart. For example, a pen could be a product and if there are 10 pens in the inventory, each of these 10 pens will be considered a product item. Order : This will encapsulate a buying order to buy everything in the shopping cart. OrderLog: Will keep a track of the status of orders, such as unshipped, pending, complete, canceled, etc. ShipmentLog: Will keep a track of the status of shipments, such as pending, shipped, delivered, etc. Notification: This class will take care of sending notifications to customers. Payment: This class will encapsulate the payment for an order. Members can pay through credit card or electronic bank transfer.  (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-class-diagram.png) (Online Shoopping System Class Diagram)  Class Diagram for Online Shoopping System  (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-uml.svg) (Online Shoopping System UML)  UML for Online Shoopping System  Activity Diagram     Following is the activity diagram for a user performing online shopping: (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-activity-diagram.svg) (Online Shoopping System Activity Diagram)  Activity Diagram for Online Shoopping System  Sequence Diagram     Here is the sequence diagram for searching from the catalog:  (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-sequence-diagram-1.svg) (Online Shoopping System Sequence Diagram 1)  Sequence Diagram for Online Shoopping System  Here is the sequence diagram for adding an item to the shopping cart:  (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-sequence-diagram-2.svg) (Online Shoopping System Sequence Diagram 2)  Sequence Diagram for Online Shoopping System  Here is the sequence diagram for checking out to place an order:  (/tssovi/grokking-the-object-oriented-design-interview/blob/master/media-files/online-shopping-sequence-diagram-3.svg) (Online Shoopping System Sequence Diagram 3)  Sequence Diagram for Online Shoopping System  Code     Here is the high-level definition for the classes described above. Enums, data types, and constants: Here are the required enums, data types, and constants: from enum import Enum class Address : def __init__ (self , street , city , state , zip_code , country ): self .__street_address = street self .__city = city self .__state = state self .__zip_code = zip_code self .__country = country class OrderStatus (Enum ): UNSHIPPED , PENDING , SHIPPED , COMPLETED , CANCELED , REFUND_APPLIED = 1 , 2 , 3 , 4 , 5 , 6 class AccountStatus (Enum ): ACTIVE , BLOCKED , BANNED , COMPROMISED , ARCHIVED , UNKNOWN = 1 , 2 , 3 , 4 , 5 , 6 class ShipmentStatus (Enum ): PENDING , SHIPPED , DELIVERED , ON_HOLD = 1 , 2 , 3 , 4 class PaymentStatus (Enum ): UNPAID , PENDING , COMPLETED , FILLED , DECLINED , CANCELLED , ABANDONED , SETTLING , SETTLED , REFUNDED = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10  (from enum import Enum\n\n\nclass Address:\n    def __init__(self, street, city, state, zip_code, country):\n        self.__street_address = street\n        self.__city = city\n        self.__state = state\n        self.__zip_code = zip_code\n        self.__country = country\n\n\nclass OrderStatus(Enum):\n    UNSHIPPED, PENDING, SHIPPED, COMPLETED, CANCELED, REFUND_APPLIED = 1, 2, 3, 4, 5, 6\n\n\nclass AccountStatus(Enum):\n    ACTIVE, BLOCKED, BANNED, COMPROMISED, ARCHIVED, UNKNOWN = 1, 2, 3, 4, 5, 6\n\n\nclass ShipmentStatus(Enum):\n    PENDING, SHIPPED, DELIVERED, ON_HOLD = 1, 2, 3, 4\n\n\nclass PaymentStatus(Enum):\n    UNPAID, PENDING, COMPLETED, FILLED, DECLINED, CANCELLED, ABANDONED, SETTLING, SETTLED, REFUNDED = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)         Account, Customer, Admin, and Guest: These classes represent different people that interact with our system: from abc import ABC from .constants import * # For simplicity, we are not defining getter and setter functions. The reader can # assume that all class attributes are private and accessed through their respective # public getter methods and modified only through their public methods function. class Account : def __init__ (self , user_name , password , name , email , phone , shipping_address , status = AccountStatus ): self .__user_name = user_name self .__password = password self .__name = name self .__email = email self .__phone = phone self .__shipping_address = shipping_address self .__status = status .ACTIVE self .__credit_cards = [] self .__bank_accounts = [] def add_product (self , product ): None def add_productReview (self , review ): None def reset_password (self ): None class Customer (ABC ): def __init__ (self , cart , order ): self .__cart = cart self .__order = order def get_shopping_cart (self ): return self .__cart def add_item_to_cart (self , item ): None def remove_item_from_cart (self , item ): None class Guest (Customer ): def register_account (self ): None class Member (Customer ): def __init__ (self , account ): self .__account = account def place_order (self , order ): None  (from abc import ABC\nfrom .constants import *\n\n\n# For simplicity, we are not defining getter and setter functions. The reader can\n# assume that all class attributes are private and accessed through their respective\n# public getter methods and modified only through their public methods function.\n\n\nclass Account:\n    def __init__(self, user_name, password, name, email, phone, shipping_address, status=AccountStatus):\n        self.__user_name = user_name\n        self.__password = password\n        self.__name = name\n        self.__email = email\n        self.__phone = phone\n        self.__shipping_address = shipping_address\n        self.__status = status.ACTIVE\n        self.__credit_cards = []\n        self.__bank_accounts = []\n\n    def add_product(self, product):\n        None\n\n    def add_productReview(self, review):\n        None\n\n    def reset_password(self):\n        None\n\n\nclass Customer(ABC):\n    def __init__(self, cart, order):\n        self.__cart = cart\n        self.__order = order\n    \n    def get_shopping_cart(self):\n        return self.__cart\n    \n    def add_item_to_cart(self, item):\n        None\n    \n    def remove_item_from_cart(self, item):\n        None\n\n\nclass Guest(Customer):\n    def register_account(self):\n        None\n\n\nclass Member(Customer):\n    def __init__(self, account):\n        self.__account = account\n    \n    def place_order(self, order):\n        None)         ProductCategory, Product, and ProductReview: Here are the classes related to a product: class ProductCategory : def __init__ (self , name , description ): self .__name = name self .__description = description class ProductReview : def __init__ (self , rating , review , reviewer ): self .__rating = rating self .__review = review self .__reviewer = reviewer class Product : def __init__ (self , id , name , description , price , category , seller_account ): self .__product_id = id self .__name = name self .__description = description self .__price = price self .__category = category self .__available_item_count = 0 self .__seller = seller_account def get_available_count (self ): return self .__available_item_count def update_price (self , new_price ): None  (class ProductCategory:\n    def __init__(self, name, description):\n        self.__name = name\n        self.__description = description\n\n\nclass ProductReview:\n    def __init__(self, rating, review, reviewer):\n        self.__rating = rating\n        self.__review = review\n        self.__reviewer = reviewer\n\n\nclass Product:\n    def __init__(self, id, name, description, price, category, seller_account):\n        self.__product_id = id\n        self.__name = name\n        self.__description = description\n        self.__price = price\n        self.__category = category\n        self.__available_item_count = 0\n        \n        self.__seller = seller_account\n    \n    def get_available_count(self):\n        return self.__available_item_count\n    \n    def update_price(self, new_price):\n        None)         ShoppingCart, Item, Order, and OrderLog: Users will add items to the shopping cart and place an order to buy all the items in the cart. from datetime import datetime from .constants import * class Item : def __init__ (self , id , quantity , price ): self .__product_id = id self .__quantity = quantity self .__price = price def update_quantity (self , quantity ): None class ShoppingCart : def __init__ (self ): self .__items = [] def add_item (self , item ): None def remove_item (self , item ): None def update_item_quantity (self , item , quantity ): None def get_items (self ): return self .__items def checkout (self ): None class OrderLog : def __init__ (self , order_number , status = OrderStatus .PENDING ): self .__order_number = order_number self .__creation_date = datetime .date .today () self .__status = status class Order : def __init__ (self , order_number , status = OrderStatus .PENDING ): self .__order_number = 0 self .__status = status self .__order_date = datetime .date .today () self .__order_log = [] def send_for_shipment (self ): None def make_payment (self , payment ): None def add_order_log (self , order_log ): None  (from datetime import datetime\nfrom .constants import *\n\n\nclass Item:\n    def __init__(self, id, quantity, price):\n        self.__product_id = id\n        self.__quantity = quantity\n        self.__price = price\n    \n    def update_quantity(self, quantity):\n        None\n\n\nclass ShoppingCart:\n    def __init__(self):\n        self.__items = []\n    \n    def add_item(self, item):\n        None\n    \n    def remove_item(self, item):\n        None\n    \n    def update_item_quantity(self, item, quantity):\n        None\n    \n    def get_items(self):\n        return self.__items\n    \n    def checkout(self):\n        None\n\n\nclass OrderLog:\n    def __init__(self, order_number, status=OrderStatus.PENDING):\n        self.__order_number = order_number\n        self.__creation_date = datetime.date.today()\n        self.__status = status\n\n\nclass Order:\n    def __init__(self, order_number, status=OrderStatus.PENDING):\n        self.__order_number = 0\n        self.__status = status\n        self.__order_date = datetime.date.today()\n        self.__order_log = []\n\n    def send_for_shipment(self):\n        None\n    \n    def make_payment(self, payment):\n        None\n    \n    def add_order_log(self, order_log):\n        None)         Shipment, ShipmentLog, and Notification: After successfully placing an order, a shipment record will be created: from abc import ABC from datetime import datetime from .constants import * class ShipmentLog : def __init__ (self , shipment_number , status = ShipmentStatus .PENDING ): self .__shipment_number = shipment_number self .__status = status self .__creation_date = datetime .date .today () class Shipment : def __init__ (self , shipment_number , shipment_method ): self .__shipment_number = shipment_number self .__shipment_date = datetime .date .today () self .__estimated_arrival = datetime .date .today () self .__shipment_method = shipment_method self .__shipmentLogs = [] def add_shipment_log (self , shipment_log ): None class Notification (ABC ): def __init__ (self , id , content ): self .__notification_id = id self .__created_on = datetime .date .today () self .__content = content def send_notification (self , account ): None  (from abc import ABC\nfrom datetime import datetime\nfrom .constants import *\n\n\nclass ShipmentLog:\n    def __init__(self, shipment_number, status=ShipmentStatus.PENDING):\n        self.__shipment_number = shipment_number\n        self.__status = status\n        self.__creation_date = datetime.date.today()\n\n\nclass Shipment:\n    def __init__(self, shipment_number, shipment_method):\n        self.__shipment_number = shipment_number\n        self.__shipment_date = datetime.date.today()\n        self.__estimated_arrival = datetime.date.today()\n        self.__shipment_method = shipment_method\n        self.__shipmentLogs = []\n\n    def add_shipment_log(self, shipment_log):\n        None\n\n\nclass Notification(ABC):\n    def __init__(self, id, content):\n        self.__notification_id = id\n        self.__created_on = datetime.date.today()\n        self.__content = content\n    \n    def send_notification(self, account):\n        None)         Search interface and Catalog: Catalog will implement Search to facilitate searching of products. from abc import ABC class Search (ABC ): def search_products_by_name (self , name ): None def search_products_by_category (self , category ): None class Catalog (Search ): def __init__ (self ): self .__product_names = {} self .__product_categories = {} def search_products_by_name (self , name ): return self .product_names .get (name ) def search_products_by_category (self , category ): return self .product_categories .get (category )  (from abc import ABC\n\n\nclass Search(ABC):\n    def search_products_by_name(self, name):\n        None\n    \n    def search_products_by_category(self, category):\n        None\n\n\nclass Catalog(Search):\n    def __init__(self):\n        self.__product_names = {}\n        self.__product_categories = {}\n    \n    def search_products_by_name(self, name):\n        return self.product_names.get(name)\n    \n    def search_products_by_category(self, category):\n        return self.product_categories.get(category))                                   Footer (GitHub) (https://github.com)    \u00a9 2025 GitHub,\u00a0Inc.   Footer navigation (https://docs.github.com/site-policy/github-terms/github-terms-of-service) Terms  (https://docs.github.com/site-policy/privacy-policies/github-privacy-statement) Privacy  (https://github.com/security) Security  (https://www.githubstatus.com/) Status  (https://docs.github.com/) Docs  (https://support.github.com?tags=dotcom-footer) Contact  Manage cookies    Do not share my personal information              You can\u2019t perform that action at this time.             "
                ],
                "output": "htmltotext.txt",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:51.450707+00:00",
                "status": "succeeded"
            }
        ],
        "media": [
            {
                "cmd": [
                    "/usr/local/bin/yt-dlp",
                    "--restrict-filenames",
                    "--trim-filenames",
                    "128",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "--skip-download",
                    "--cache-dir=/data/yt-dlp-cache/",
                    "--cookies=/data/yt-dlp-cache/cookies.txt",
                    "--proxy=socks5://tor-socks-proxy:9150",
                    "--no-playlist",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "2024.10.7",
                "end_ts": "2025-01-04T18:37:00.309530+00:00",
                "index_texts": [],
                "output": "media/",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:54.013428+00:00",
                "status": "succeeded"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/postlight-parser",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "2.2.3",
                "end_ts": "2025-01-04T18:36:51.408896+00:00",
                "index_texts": null,
                "output": "mercury/",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:44.277078+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/readability-extractor",
                    "/tmp/tmpr8ng11em",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2025-01-04T18:36:33.047964+00:00",
                "index_texts": [
                    "Design Amazon - Online Shopping System\nLet's design an online retail store.\nWe'll cover the following:\n\nSystem Requirements\nUse Case Diagram\nClass Diagram\nActivity Diagram\nSequence Diagram\nCode\n\nAmazon (amazon.com) is the world\u2019s largest online retailer. The company was originally a bookseller but has expanded to sell a wide variety of consumer goods and digital media. For the sake of this problem, we will focus on their online retail business where users can sell/buy their products.\n\n    \n    \n    Amazon - Online Shopping System\n\nSystem Requirements\nWe will be designing a system with the following requirements:\n\nUsers should be able to add new products to sell.\nUsers should be able to search for products by their name or category.\nUsers can search and view all the products, but they will have to become a registered member to buy a product.\nUsers should be able to add/remove/modify product items in their shopping cart.\nUsers can check out and buy items in the shopping cart.\nUsers can rate and add a review for a product.\nThe user should be able to specify a shipping address where their order will be delivered.\nUsers can cancel an order if it has not shipped.\nUsers should get notifications whenever there is a change in the order or shipping status.\nUsers should be able to pay through credit cards or electronic bank transfer.\nUsers should be able to track their shipment to see the current state of their order.\n\nUse Case Diagram\nWe have four main Actors in our system:\n\nAdmin: Mainly responsible for account management and adding or modifying new product categories.\nGuest: All guests can search the catalog, add/remove items to the shopping cart, as well as become registered members.\nMember: Members can perform all the activities that guests can, in addition to which, they can place orders and add new products to sell.\nSystem: Mainly responsible for sending notifications for orders and shipping updates.\n\nHere are the top use cases of the Online Shopping System:\n\nAdd/update products; whenever a product is added or modified, we will update the catalog.\nSearch for products by their name or category.\nAdd/remove product items in the shopping cart.\nCheck-out to buy product items in the shopping cart.\nMake a payment to place an order.\nAdd a new product category.\nSend notifications to members with shipment updates.\n\nHere is the use case diagram of our Online Shopping System:\n\n    \n    \n    Use Case Diagram for Online Shoopping System\n\nClass Diagram\nHere are the descriptions of the different classes of our Online Shopping System:\n\nAccount: There are two types of registered accounts in the system: one will be an Admin, who is responsible for adding new product categories and blocking/unblocking members; the other, a Member, who can buy/sell products.\nGuest: Guests can search for and view products, and add them in the shopping cart. To place an order they have to become a registered member.\nCatalog: Users of our system can search for products by their name or category. This class will keep an index of all products for faster search.\nProductCategory: This will encapsulate the different categories of products, such as books, electronics, etc.\nProduct: This class will encapsulate the entity that the users of our system will be buying and selling. Each Product will belong to a ProductCategory.\nProductReview: Any registered member can add a review about a product.\nShoppingCart: Users will add product items that they intend to buy to the shopping cart.\nItem: This class will encapsulate a product item that the users will be buying or placing in the shopping cart. For example, a pen could be a product and if there are 10 pens in the inventory, each of these 10 pens will be considered a product item.\nOrder: This will encapsulate a buying order to buy everything in the shopping cart.\nOrderLog: Will keep a track of the status of orders, such as unshipped, pending, complete, canceled, etc.\nShipmentLog: Will keep a track of the status of shipments, such as pending, shipped, delivered, etc.\nNotification: This class will take care of sending notifications to customers.\nPayment: This class will encapsulate the payment for an order. Members can pay through credit card or electronic bank transfer.\n\n\n    \n    \n    Class Diagram for Online Shoopping System\n\n\n    \n    \n    UML for Online Shoopping System\n\nActivity Diagram\nFollowing is the activity diagram for a user performing online shopping:\n\n    \n    \n    Activity Diagram for Online Shoopping System\n\nSequence Diagram\n\nHere is the sequence diagram for searching from the catalog:\n\n\n    \n    \n    Sequence Diagram for Online Shoopping System\n\n\nHere is the sequence diagram for adding an item to the shopping cart:\n\n\n    \n    \n    Sequence Diagram for Online Shoopping System\n\n\nHere is the sequence diagram for checking out to place an order:\n\n\n    \n    \n    Sequence Diagram for Online Shoopping System\n\nCode\nHere is the high-level definition for the classes described above.\nEnums, data types, and constants: Here are the required enums, data types, and constants:\nfrom enum import Enum\n\n\nclass Address:\n    def __init__(self, street, city, state, zip_code, country):\n        self.__street_address = street\n        self.__city = city\n        self.__state = state\n        self.__zip_code = zip_code\n        self.__country = country\n\n\nclass OrderStatus(Enum):\n    UNSHIPPED, PENDING, SHIPPED, COMPLETED, CANCELED, REFUND_APPLIED = 1, 2, 3, 4, 5, 6\n\n\nclass AccountStatus(Enum):\n    ACTIVE, BLOCKED, BANNED, COMPROMISED, ARCHIVED, UNKNOWN = 1, 2, 3, 4, 5, 6\n\n\nclass ShipmentStatus(Enum):\n    PENDING, SHIPPED, DELIVERED, ON_HOLD = 1, 2, 3, 4\n\n\nclass PaymentStatus(Enum):\n    UNPAID, PENDING, COMPLETED, FILLED, DECLINED, CANCELLED, ABANDONED, SETTLING, SETTLED, REFUNDED = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n\nAccount, Customer, Admin, and Guest: These classes represent different people that interact with our system:\nfrom abc import ABC\nfrom .constants import *\n\n\n# For simplicity, we are not defining getter and setter functions. The reader can\n# assume that all class attributes are private and accessed through their respective\n# public getter methods and modified only through their public methods function.\n\n\nclass Account:\n    def __init__(self, user_name, password, name, email, phone, shipping_address, status=AccountStatus):\n        self.__user_name = user_name\n        self.__password = password\n        self.__name = name\n        self.__email = email\n        self.__phone = phone\n        self.__shipping_address = shipping_address\n        self.__status = status.ACTIVE\n        self.__credit_cards = []\n        self.__bank_accounts = []\n\n    def add_product(self, product):\n        None\n\n    def add_productReview(self, review):\n        None\n\n    def reset_password(self):\n        None\n\n\nclass Customer(ABC):\n    def __init__(self, cart, order):\n        self.__cart = cart\n        self.__order = order\n    \n    def get_shopping_cart(self):\n        return self.__cart\n    \n    def add_item_to_cart(self, item):\n        None\n    \n    def remove_item_from_cart(self, item):\n        None\n\n\nclass Guest(Customer):\n    def register_account(self):\n        None\n\n\nclass Member(Customer):\n    def __init__(self, account):\n        self.__account = account\n    \n    def place_order(self, order):\n        None\n\nProductCategory, Product, and ProductReview: Here are the classes related to a product:\nclass ProductCategory:\n    def __init__(self, name, description):\n        self.__name = name\n        self.__description = description\n\n\nclass ProductReview:\n    def __init__(self, rating, review, reviewer):\n        self.__rating = rating\n        self.__review = review\n        self.__reviewer = reviewer\n\n\nclass Product:\n    def __init__(self, id, name, description, price, category, seller_account):\n        self.__product_id = id\n        self.__name = name\n        self.__description = description\n        self.__price = price\n        self.__category = category\n        self.__available_item_count = 0\n        \n        self.__seller = seller_account\n    \n    def get_available_count(self):\n        return self.__available_item_count\n    \n    def update_price(self, new_price):\n        None\n\nShoppingCart, Item, Order, and OrderLog: Users will add items to the shopping cart and place an order to buy all the items in the cart.\nfrom datetime import datetime\nfrom .constants import *\n\n\nclass Item:\n    def __init__(self, id, quantity, price):\n        self.__product_id = id\n        self.__quantity = quantity\n        self.__price = price\n    \n    def update_quantity(self, quantity):\n        None\n\n\nclass ShoppingCart:\n    def __init__(self):\n        self.__items = []\n    \n    def add_item(self, item):\n        None\n    \n    def remove_item(self, item):\n        None\n    \n    def update_item_quantity(self, item, quantity):\n        None\n    \n    def get_items(self):\n        return self.__items\n    \n    def checkout(self):\n        None\n\n\nclass OrderLog:\n    def __init__(self, order_number, status=OrderStatus.PENDING):\n        self.__order_number = order_number\n        self.__creation_date = datetime.date.today()\n        self.__status = status\n\n\nclass Order:\n    def __init__(self, order_number, status=OrderStatus.PENDING):\n        self.__order_number = 0\n        self.__status = status\n        self.__order_date = datetime.date.today()\n        self.__order_log = []\n\n    def send_for_shipment(self):\n        None\n    \n    def make_payment(self, payment):\n        None\n    \n    def add_order_log(self, order_log):\n        None\n\nShipment, ShipmentLog, and Notification: After successfully placing an order, a shipment record will be created:\nfrom abc import ABC\nfrom datetime import datetime\nfrom .constants import *\n\n\nclass ShipmentLog:\n    def __init__(self, shipment_number, status=ShipmentStatus.PENDING):\n        self.__shipment_number = shipment_number\n        self.__status = status\n        self.__creation_date = datetime.date.today()\n\n\nclass Shipment:\n    def __init__(self, shipment_number, shipment_method):\n        self.__shipment_number = shipment_number\n        self.__shipment_date = datetime.date.today()\n        self.__estimated_arrival = datetime.date.today()\n        self.__shipment_method = shipment_method\n        self.__shipmentLogs = []\n\n    def add_shipment_log(self, shipment_log):\n        None\n\n\nclass Notification(ABC):\n    def __init__(self, id, content):\n        self.__notification_id = id\n        self.__created_on = datetime.date.today()\n        self.__content = content\n    \n    def send_notification(self, account):\n        None\n\nSearch interface and Catalog: Catalog will implement Search to facilitate searching of products.\nfrom abc import ABC\n\n\nclass Search(ABC):\n    def search_products_by_name(self, name):\n        None\n    \n    def search_products_by_category(self, category):\n        None\n\n\nclass Catalog(Search):\n    def __init__(self):\n        self.__product_names = {}\n        self.__product_categories = {}\n    \n    def search_products_by_name(self, name):\n        return self.product_names.get(name)\n    \n    def search_products_by_category(self, category):\n        return self.product_categories.get(category)"
                ],
                "output": "readability/",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:26.166578+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-01-04T18:36:24.226720+00:00",
                "index_texts": null,
                "output": "grokking-the-object-oriented-design-interview/object-oriented-design-case-studies/design-amazon-online-shopping-system.md at master \u00b7 tssovi/grokking-the-object-oriented-design-interview \u00b7 GitHub",
                "pwd": "/data/archive/1736015745.600337",
                "schema": "ArchiveResult",
                "start_ts": "2025-01-04T18:36:23.637549+00:00",
                "status": "succeeded"
            }
        ],
        "wget": []
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "ArchiveError: Failed to find \"content-location\" URL header in Archive.org response.",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "media/",
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "grokking-the-object-oriented-design-interview/object-oriented-design-case-studies/design-amazon-online-shopping-system.md at master \u00b7 tssovi/grokking-the-object-oriented-design-interview \u00b7 GitHub",
        "warc": null,
        "wget": null
    },
    "link_dir": "/data/archive/1736015745.600337",
    "newest_archive_date": "2025-01-04T18:37:00.363033+00:00",
    "num_failures": 1,
    "num_outputs": 8,
    "oldest_archive_date": "2025-01-04T18:35:51.069170+00:00",
    "path": "/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md",
    "schema": "Link",
    "scheme": "https",
    "snapshot_abid": "snp_01JGS9M4NC1039DB3201T0JMK4",
    "snapshot_id": "9172eb6c-dfea-4adf-84af-7786b4095264",
    "sources": [
        "/data/sources/1736015744-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1736015745.600337",
    "title": "grokking-the-object-oriented-design-interview/object-oriented-design-case-studies/design-amazon-online-shopping-system.md at master \u00b7 tssovi/grokking-the-object-oriented-design-interview \u00b7 GitHub",
    "url": "https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-amazon-online-shopping-system.md#system-requirements"
}