Skip to content
← All projects

Coursework, team project

distributed-inventory-manager

A command-line inventory and sales tool for a liquor store, built by a student team for our Software Engineering module. The code mattered, but the module was really about running a proper Agile project with CI/CD from start to finish.

Architecture

  1. Interface

    • CLI menus (app.py)

      Separate manager and clerk menus, dashboard on login

    • Login (auth.py)

      Role-based access, bcrypt-hashed passwords

  2. Feature modules

    • Products

      Add, update, search

    • Inventory

      Receive stock, log losses

    • Sales

      Record sales, receipts, history

    • Reporting

      Low stock, value, CSV/JSON export

  3. Data

    • Database manager

      All SQL in one place, backed by SQLite

The CLI only talks to the feature modules, and only the database manager touches SQLite.

CI pipeline

    • Checkout

      Pull from GitHub

    • Set up

      Virtual env and dependencies

    • Lint

      Pylint report

    • Test

      Pytest with coverage

    • Analyse

      SonarCloud quality gate

Jenkins runs every stage on each change. SonarCloud reads the coverage and Pylint reports from the earlier stages.

How we ran it

  • Jira held the backlog. We broke the work into epics and user stories, planned it in sprints, and tracked it on the board.
  • Confluence held the project overview, the architecture and design document, and the requirements package.
  • Jenkins ran the tests and coverage on every change, and SonarCloud checked the code quality before anything was merged.

What the tool does

Managers and clerks log in with their own roles, with passwords hashed using bcrypt. Managers add and update products, check low-stock and inventory value reports, and export them to CSV or JSON. Clerks record sales and print receipts, take in new stock, and log losses. Everything runs in a colour-coded command-line menu backed by SQLite.

Testing

Each module has its own Pytest suite with coverage reporting, and Pylint runs as part of the pipeline, so a failing test or a drop in quality showed up straight away.