This repository has been archived on 2026-02-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cart/README.md
giles 967303093d
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
feat: initialize cart app with blueprints, templates, and CI
Extract cart, order, and orders blueprints with their service layer,
templates, Dockerfile (APP_MODULE=app:app, IMAGE=cart), entrypoint,
and Gitea CI workflow from the coop monolith.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 23:17:41 +00:00

72 lines
2.2 KiB
Markdown

# Cart App
Shopping cart, checkout, and order management service for the Rose Ash cooperative marketplace.
## Overview
This is the **cart** microservice, split from the Rose Ash monolith. It handles:
- **Shopping cart** - Add/remove products, view cart, cart summary API
- **Checkout** - SumUp payment integration with hosted checkout
- **Orders** - Order listing, detail view, payment status tracking
- **Calendar bookings** - Calendar entry cart items and checkout integration
## Architecture
- **Framework:** Quart (async Flask)
- **Database:** PostgreSQL 16 via SQLAlchemy 2.0 (async)
- **Payments:** SumUp Hosted Checkout
- **Frontend:** HTMX + Jinja2 templates + Tailwind CSS
## Directory Structure
```
app.py # Quart application factory
bp/
cart/ # Cart blueprint (add, view, checkout, webhooks)
routes.py
api.py # Internal API (server-to-server, CSRF-exempt)
login_helper.py # Cart merge on login
services/ # Business logic layer
order/ # Single order detail blueprint
routes.py
filters/qs.py # Query string helpers
orders/ # Order listing blueprint
routes.py
filters/qs.py
templates/
_types/cart/ # Cart templates
_types/order/ # Single order templates
_types/orders/ # Order listing templates
entrypoint.sh # Docker entrypoint (migrations + server start)
Dockerfile # Container build
.gitea/workflows/ci.yml # CI/CD pipeline
```
## Running
```bash
# Set environment variables
export APP_MODULE=app:app
export DATABASE_URL_ASYNC=postgresql+asyncpg://user:pass@localhost/coop
export REDIS_URL=redis://localhost:6379/0
export SECRET_KEY=your-secret-key
# Run the server
hypercorn app:app --reload --bind 0.0.0.0:8002
```
## Cross-App Communication
The cart app exposes internal API endpoints at `/internal/cart/` for other services:
- `GET /internal/cart/summary` - Cart count and total for the current session/user
- `POST /internal/cart/adopt` - Adopt anonymous cart items after user login
## Docker
```bash
docker build -t cart:latest .
docker run -p 8002:8000 --env-file .env cart:latest
```