BottleDrop ‐ Project Documentation - CodingF0X/BottleDrop GitHub Wiki

BottleDrop - An event location management system

Summary

BottleDrop is a distributed microservices application designed to manage beverage services at an event. It consists of four contexts: Warehouse, Bar, Drop Point and Bar. The Bar microservice handles beverage stock management and visitor orders, while relying on the Warehouse for inventory replenishment. Drop Point service communicates with the Warehouse for bottle returns.

This repo contains a sample application based on a bottle drop system.
The primary goal of this sample is to demonstrate several software-architecture and concepts like:

  • Microservices
  • MVC and N-Tiered Architecture
  • Domain Driven Design (DDD)

Application functionality

The system should support automated as well as manual replenishment operations, where the warehouse sends beverages to the bar. Warehouse provides real time visbility of available beverages, empty bottles and record of beverages sent to bars. Each bar should be able to view its beverage stock and orders placed by guests. The application also provides functionality of returning empty bottles to the Drop Point after purchasing from the Bar. When drop point is full, it sends notification to warehouse to collect empty bottles. Each beverage is assigned a unique ID, allowing its life cycle to be tracked by all services. The journey of a beverage begins at the warehouse, where it is filled and sent to the bar. The warehouse stores the ID of each beverage sent to bars in a log to act as a record. After the beverage is consumed, it travels from the bar to the drop point and is eventually returned as an empty bottle back to the warehouse. The warehouse then stores the ID of the empty beverage in an empties record.

The domain and functionality of this application is not very complex. The system includes four bounded contexts: Warehouse, Bar, Drop Point and User Management. The system uses HTTP/REST APIs for communication between these contexts.

Functionality

Functional requirements

Requirement 1
Unique Identifier: FR-001
Name: Manage Beverage Stock
Short Description: The system must allow the warehouse to manage beverage stock, including adding, updating, and removing beverage items.
Priority: High
Actors/Roles: Warehouse Assistant

Requirement 2
Unique Identifier: FR-002
Name: Replenish Bar Stock
Short Description: The system must support automated as well as manual replenishment of bar stock by allowing the warehouse to send beverages to the bar.
Priority: High
Actors/Roles: Warehouse Assistant, Bartender

Requirement 3
Unique Identifier: FR-003
Name: Place Order Short Description: Guests should be able to place orders for beverages at the bar, with the system tracking order details and updating stock levels accordingly. Priority: High
Actors/Roles: Visitor, Bartender\

Requirement 4
Unique Identifier: FR-004
Name: Process Empty Bottles
Short Description: The system must allow the drop point to record empty bottles returned by guests and notify the warehouse of the empties to be collected.
Priority: Medium
Actors/Roles: Stockist, Guest

Requirement 5
Unique Identifier: FR-005
Name: View Stock Levels Short
Description: The system must provide real-time visibility into stock levels at both the warehouse and the bar.
Priority: High
Actors/Roles: Warehouse Asistant, Bartender

Requirement 6
Unique Identifier: FR-006
Name: View log
Short Description: The system must provide real-time visibility into stock sent to each bar.
Priority: low
Actors/Roles: Warehouse Asistant

Requirement 7
Unique Identifier: FR-007
Name: View empties
Short Description: The system must provide real-time visibility into empties in Drop Point.
Priority: High Actors/Roles: Stockist

Requirement 8
Unique Identifier: FR-008
Name: Track Order History
Short Description: The system must maintain a history of all orders placed at the bars.
Priority: Medium
Actors/Roles: Bartender.

Requirement 9
Unique Identifier: FR-009
Name: User Interface
Short Description: The system must provide a user-friendly interface for managing stock, placing orders, and processing returns.
Priority: High
Actors/Roles: Warehouse Assistance, Bartender, Stockist, Planner, and Visitor.