Skip to main content

GrooveShop Django Backend

Project description

Coverage Status

Grooveshop Django API

Overview

A headless e-commerce API built with Django 5.2 and Django REST Framework. Supports both WSGI (Gunicorn) and ASGI (Daphne/Uvicorn) with real-time WebSocket notifications via Django Channels. Uses Knox + Django Allauth for authentication (token API + social/MFA), Celery with RabbitMQ broker for background tasks, PostgreSQL 17 for data storage, Redis for caching and Channels layer, and Meilisearch for federated search. Features include multi-language support (Greek, English, German), Stripe payments via dj-stripe, comprehensive test coverage, and a Django Unfold admin panel.

Project Structure

All Django apps live at the project root (flat structure, no src/ directory):

  • core/ — Shared infrastructure: base views, serializers, permissions, middleware, filters, caching, Celery config, URL routing
  • user/ — User accounts, authentication, and profile management
  • product/ — Product catalog, categories, reviews, favourites, images, and stock management
  • order/ — Order processing and management
  • cart/ — Shopping cart functionalities
  • blog/ — Blog posts, categories, comments, authors, and tags
  • search/ — Meilisearch integration with federated search, Greeklish expansion, and analytics
  • meili/ — Meilisearch model definitions and indexing via IndexMixin with MeiliMeta config
  • notification/ — Real-time notifications via WebSocket (Django Channels)
  • loyalty/ — Points, XP, tiers, and rewards system
  • country/ — Country-specific configurations
  • region/ — Regional data and settings
  • vat/ — VAT calculation and management
  • pay_way/ — Payment method configurations
  • tag/ — Tagging system for products and blog posts
  • contact/ — Contact form and communication
  • admin/ — Custom admin app with Django Unfold dashboard
  • devtools/CustomDjangoModelFactory base class for all test factories

Features

  • Authentication and User Management: Knox token auth for API, Django Allauth for account management with social providers (Google, Facebook, GitHub, Discord), MFA/WebAuthn/Passkeys support
  • Multi-Language Support: django-parler translations for Greek (default), English, and German
  • Advanced Search and Filtering: Meilisearch-powered federated search with Greeklish support, instant search, and analytics tracking
  • Payments: Stripe integration via dj-stripe
  • Loyalty System: Points, XP, tiers, and rewards
  • Task Scheduling: Celery with RabbitMQ for background task management (stock cleanup, cart expiry, notifications, Meilisearch sync)
  • Real-time Notifications: WebSocket via Django Channels with per-user and admin groups
  • Performance Optimization: Redis caching, optimized querysets with for_list()/for_detail() patterns
  • Testing: Comprehensive unit and integration tests with pytest-xdist parallel execution
  • Admin Panel: Django Unfold admin panel with custom dashboard
  • API Documentation: OpenAPI 3.0 via drf-spectacular (Swagger UI and Redoc)
  • Containerization: Docker Compose for full-stack deployment

Technologies

  • Frameworks: Django 5.2, Django REST Framework 3.16
  • Authentication: Django REST Knox (API tokens), Django Allauth (accounts, social, MFA)
  • Database: PostgreSQL 17
  • Cache / Channels: Redis
  • Task Management: Celery
  • Message Broker: RabbitMQ
  • Search: Meilisearch v1.22.3
  • Payments: Stripe (dj-stripe)
  • Server: Uvicorn (ASGI), Gunicorn (WSGI), Daphne (Channels)
  • Containerization: Docker
  • Package Management: uv

Setup

Prerequisites

  • Python 3.14 or higher
  • Django 5.2 or higher
  • PostgreSQL 17
  • Redis
  • RabbitMQ
  • Meilisearch v1.22.3 or higher

Meilisearch Setup

Installation

Using Docker:

docker run -d \
  --name meilisearch \
  -p 7700:7700 \
  -e MEILI_MASTER_KEY=YOUR_MASTER_KEY \
  -v $(pwd)/meili_data:/meili_data \
  getmeili/meilisearch:v1.22.3

Using Docker Compose:

services:
  meilisearch:
    image: getmeili/meilisearch:v1.22.3
    ports:
      - "7700:7700"
    environment:
      - MEILI_MASTER_KEY=YOUR_MASTER_KEY
    volumes:
      - ./meili_data:/meili_data

Configuration

Add Meilisearch settings to your .env file:

MEILISEARCH_HOST=http://localhost:7700
MEILISEARCH_MASTER_KEY=YOUR_MASTER_KEY

Enable Experimental Features

Enable the CONTAINS operator for substring matching:

python manage.py meilisearch_enable_experimental --feature containsFilter

Configure Index Settings

Update index settings for optimal performance:

# ProductTranslation index
python manage.py meilisearch_update_index_settings \
    --index ProductTranslation \
    --max-total-hits 50000 \
    --search-cutoff-ms 1500 \
    --max-values-per-facet 100

# BlogPostTranslation index
python manage.py meilisearch_update_index_settings \
    --index BlogPostTranslation \
    --max-total-hits 50000 \
    --search-cutoff-ms 1500 \
    --max-values-per-facet 100

Configure Ranking Rules

Set up custom ranking rules for e-commerce:

# Prioritize in-stock products and discounts
python manage.py meilisearch_update_ranking \
    --index ProductTranslation \
    --rules "words,typo,proximity,attribute,sort,stock:desc,discount_percent:desc,exactness"

# Prioritize popular blog posts
python manage.py meilisearch_update_ranking \
    --index BlogPostTranslation \
    --rules "words,typo,proximity,attribute,sort,view_count:desc,exactness"

Sync Data to Meilisearch

# Sync all indexes
python manage.py meilisearch_sync_all_indexes

# Or sync specific indexes
python manage.py meilisearch_sync_index --model ProductTranslation
python manage.py meilisearch_sync_index --model BlogPostTranslation

Test Federated Search

python manage.py meilisearch_test_federated \
    --query "laptop" \
    --language-code en \
    --limit 20

OpenAPI Schema Generation

Generate TypeScript types and Zod schemas for the frontend:

# Generate OpenAPI schema
uv run python manage.py spectacular --color --file schema.yml

# Frontend will use this schema to generate types
# See grooveshop-storefront-ui-node-nuxt/README.md for frontend setup

Common Commands

# Install dependencies (uses uv, not pip)
uv sync --locked --all-extras --dev

# Run all tests (parallel by default)
uv run pytest

# Run a single test file
uv run pytest tests/unit/path/to/test_file.py

# Run tests with coverage (sequential)
uv run pytest --cov=. --cov-report=term --cov-report=html --cov-config=pyproject.toml -n0

# Lint and format
uv run ruff check --fix
uv run ruff format

# Run all pre-commit hooks
uv run pre-commit run --all-files

# Django management
uv run python manage.py makemigrations
uv run python manage.py migrate
uv run python manage.py runserver
uv run python manage.py createsuperuser
uv run python manage.py seed_all

# Generate OpenAPI schema (used by Nuxt frontend for types)
uv run python manage.py spectacular --color --file schema.yml

# Meilisearch index management
uv run python manage.py meilisearch_sync_all_indexes
uv run python manage.py meilisearch_sync_index --model ProductTranslation

# Celery (local development)
celery -A core beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
celery -A core worker -E -l info --pool=solo
celery -A core flower --broker=amqp://guest:guest@localhost:5672// --broker_api=http://guest:guest@localhost:15672/api// --port=5555

# Docker (full stack)
docker compose up -d --build

Meilisearch Management

Index Management

uv run python manage.py meilisearch_sync_all_indexes
uv run python manage.py meilisearch_sync_index --model ProductTranslation
uv run python manage.py meilisearch_clear_index --index ProductTranslation
uv run python manage.py meilisearch_drop --index ProductTranslation
uv run python manage.py meilisearch_inspect_index --index ProductTranslation

Configuration

uv run python manage.py meilisearch_enable_experimental --feature containsFilter
uv run python manage.py meilisearch_update_index_settings --index ProductTranslation --max-total-hits 50000 --search-cutoff-ms 1500
uv run python manage.py meilisearch_update_ranking --index ProductTranslation --rules "words,typo,proximity,attribute,sort,stock:desc,discount_percent:desc,exactness"

Testing and Analytics

uv run python manage.py meilisearch_test_federated --query "laptop" --language-code en --limit 20
uv run python manage.py meilisearch_export_analytics --start-date 2024-01-01 --end-date 2024-12-31 --output analytics.json

For detailed documentation, see:

License

This project is open-sourced under the MIT License. See the LICENSE file for more details.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grooveshop_django_api-1.89.2.tar.gz (904.7 kB view details)

Uploaded Source

File details

Details for the file grooveshop_django_api-1.89.2.tar.gz.

File metadata

  • Download URL: grooveshop_django_api-1.89.2.tar.gz
  • Upload date:
  • Size: 904.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for grooveshop_django_api-1.89.2.tar.gz
Algorithm Hash digest
SHA256 eff17aab1ae24d7672353a88a9ee3df6216a9314a7577b2acd72e7da45aaf2bc
MD5 96dd79dd5886ecdb2a22938e11a07b8a
BLAKE2b-256 74828f640ec43dabc3fb5b007829d5b81afe4a9a5f32b8672f6a80387f1aa16b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page