Skip to content

Multivendor marketplace with multitenancy. Allows multiple vendors to sell products and services on a single platform. Features include vendor management, product listings, payment processing, and order fulfillment.

Notifications You must be signed in to change notification settings

petrejonn/stuze

Repository files navigation

stuze

This project is a multivendor marketplace implemented using a multitenancy architecture. It allows multiple vendors to sell their products and services on a single platform while maintaining their own separate and secure space within the platform.

Features

  • Vendor management: Each vendor has their own dashboard to manage their products and services.
  • Product and service listings: Vendors can create and manage listings for their products and services.
  • Payment processing: The platform handles payment processing for all transactions.
  • Order fulfillment: Vendors can manage and fulfill orders placed by customers.

Multitenancy

The platform is implemented using a multitenancy architecture, which allows for greater scalability and flexibility in managing multiple vendors. Each vendor has their own separate and secure space within the platform to manage their products and services.

Run

To run the project use this set of commands:

poetry install
poetry run python -m stuze

This will start the server on the configured host.

You can find swagger documentation at /api/docs.

You can read more about poetry here: https://python-poetry.org/

Docker

You can start the project with docker using this command:

docker-compose -f deploy/docker-compose.yml --project-directory . up --build

If you want to develop in docker with autoreload add -f deploy/docker-compose.dev.yml to your docker command. Like this:

docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . up

This command exposes the web application on port 8000, mounts current directory and enables autoreload.

But you have to rebuild image every time you modify poetry.lock or pyproject.toml with this command:

docker-compose -f deploy/docker-compose.yml --project-directory . build

Project structure

$ tree "stuze"
stuze
├── conftest.py  # Fixtures for all tests.
├── db  # module contains db configurations
│   ├── dao  # Data Access Objects. Contains different classes to interact with database.
│   └── models  # Package contains different models for ORMs.
├── __main__.py  # Startup script. Starts uvicorn.
├── services  # Package for different external services such as rabbit or redis etc.
├── settings.py  # Main configuration settings for project.
├── static  # Static content.
├── tests  # Tests for project.
└── web  # Package contains web server. Handlers, startup config.
    ├── api  # Package with all handlers.
    │   └── router.py  # Main router.
    ├── application.py  # FastAPI application configuration.
    └── lifetime.py  # Contains actions to perform on startup and shutdown.

Configuration

This application can be configured with environment variables.

You can create .env file in the root directory and place all environment variables here.

All environment variabels should start with "STUZE_" prefix.

For example if you see in your "stuze/settings.py" a variable named like random_parameter, you should provide the "STUZE_RANDOM_PARAMETER" variable to configure the value. This behaviour can be changed by overriding env_prefix property in stuze.settings.Settings.Config.

An exmaple of .env file:

STUZE_RELOAD="True"
STUZE_PORT="8000"
STUZE_ENVIRONMENT="dev"

You can read more about BaseSettings class here: https://pydantic-docs.helpmanual.io/usage/settings/

Pre-commit

To install pre-commit simply run inside the shell:

pre-commit install

pre-commit is very useful to check your code before publishing it. It's configured using .pre-commit-config.yaml file.

By default it runs:

  • black (formats your code);
  • mypy (validates types);
  • isort (sorts imports in all files);
  • flake8 (spots possibe bugs);
  • yesqa (removes useless # noqa comments).

You can read more about pre-commit here: https://pre-commit.com/

Migrations

If you want to migrate your database, you should run following commands:

# To run all migrations untill the migration with revision_id.
alembic upgrade "<revision_id>"

# To perform all pending migrations.
alembic upgrade "head"

Reverting migrations

If you want to revert migrations, you should run:

# revert all migrations up to: revision_id.
alembic downgrade <revision_id>

# Revert everything.
 alembic downgrade base

Migration generation

To generate migrations you should run:

# For automatic change detection.
alembic revision --autogenerate

# For empty file generation.
alembic revision

Running tests

If you want to run it in docker, simply run:

docker-compose -f deploy/docker-compose.yml --project-directory . run --rm api pytest -vv .
docker-compose -f deploy/docker-compose.yml --project-directory . down

For running tests on your local machine.

  1. you need to start a database.

I prefer doing it with docker:

docker run -p "5432:5432" -e "POSTGRES_PASSWORD=stuze" -e "POSTGRES_USER=stuze" -e "POSTGRES_DB=stuze" postgres:13.8-bullseye
  1. Run the pytest.
pytest -vv .

About

Multivendor marketplace with multitenancy. Allows multiple vendors to sell products and services on a single platform. Features include vendor management, product listings, payment processing, and order fulfillment.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published