Skip to content

Cafe Point of Sale (POS) is a terminal app for managing orders, payments, and sales in cafes. It automates standard operations, offers sales insights, and is designed with easy scalability in mind.

Notifications You must be signed in to change notification settings

katereverie/CafePointOfSale

Repository files navigation

Cafe Point of Sale (to be expanded)

Overview

The Cafe Point of Sale (POS) system is designed to manage orders, track sales, and facilitate payment processing for a cafe. This application is built with scalability in mind, allowing for future expansion into tablet and web applications by reusing the core application and data layers. The system is intended for use in terminal view by cafe staff, with plans for future UI development.

Architecture

Pattern (n-Tier-architecture)

  • UI: Provides a CLI for the cafe point of sale system. Contains Utilities for display, input, and menu helpers, as well as Workflows for orders and reports.
  • Application: Contains Services (OrderService and ReportService) and a ServiceFactory, suggesting it handles the business logic and orchestration of operations.
  • Core: Defines the domain models, including:
    • Entities: DTOs (CurrentItem, DailySalesSummary, ItemSummary, Result)
    • Enums: DatabaseMode
    • Tables: Various domain objects like CafeOrder, Category, Item, etc.
    • Interfaces: For AppConfiguration, Repositories, and Services
  • Data: Manages data persistence through repositories (CafeRepository and TimeOfDayRepository) and includes a CafeContext, likely for database operations.
  • UnitTests: Contains mock repositories and test classes to ensure the correctness of the system's components.

Technology Stack

  • Language: C#
  • Frameworks: .NET Core, Entity Framework Core (ORM), Dapper (light ORM)
  • Database-related Operations: Microsoft SQL Server (Database Management), Docker (Containerization), Dapper and Entity Framework Core (Data Access)
  • Tests: NUnit
  • Other tools: Azure Data Studio (Database management), Visual Studio (IDE)

Features

Current Functionalities

  • Order Management:
    • Create new orders with active server validation
    • Add items to existing orders with real-time price updates
    • View open orders
    • Process payments and close orders
    • Cancel open orders that have not been paid.
  • Sales Reporting: Generate and view daily sales reports by category for a specific date.

Future Features to Add

  • UI Expansion: Develop tablet and web interfaces that reuse the existing application and data layers.
  • Advanced Reporting: Add more detailed reporting features, such as filtering by server or item.
  • Integration with Payment Systems: Implement integration with real payment processing systems.

Video Demonstration

Order Workflow

OrderWorkflow.mp4

Report Workflow (Monthly Report to be implemented)

ReportWorkflow.mp4

What I learned

  • N-Tier Architecture: Separating concerns goes a long way. Planning is worth the time it takes to do because lack of planning leads to technical debt, which then makes refractoring a hell. The trade-off is more time efforts now, and less headaches later.

  • Interface Implementation: Implementing interfaces between the layers made testing and refactoring easier for me. I understand now the value of loose coupling in software design.

  • Mocking and Testing: Creating a training mode using mock data was both challenging and educational. It pushed me to think critically about how to simulate different environments and how crucial testing is in catching potential issues early. This experience has made me more aware of the importance of testing in the development cycle and how it contributes to building reliable software.

  • Database Management: Working with the database connection and performing CRUD operations was a great opportunity to strengthen my skills in data management. I gained a deeper understanding of how to efficiently interact with databases and the importance of clean, organized data access layers. This experience has given me more confidence in handling data-driven applications in future projects.

About

Cafe Point of Sale (POS) is a terminal app for managing orders, payments, and sales in cafes. It automates standard operations, offers sales insights, and is designed with easy scalability in mind.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages