Loading repository data…
Loading repository data…
9meows / repository
# online-store-api REST API for an online store: authentication, product categories, product management, and a feedback system.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Полнофункциональный REST API интернет-магазина с JWT-аутентификацией, системой заказов, интеграцией платежей, фоновыми задачами и email-уведомлениями.
Современный асинхронный REST API для интернет-магазина с полным циклом обработки заказов: от регистрации пользователя до оплаты и отправки email-уведомлений.
git clone https://github.com/9meows/online-store-api.git
cd online-store-api
cp .env.example .env
# Отредактируйте .env файл (SECRET_KEY, YooKassa credentials)
# Сборка образов
docker-compose build
# Запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Миграции БД
docker-compose exec api alembic upgrade head
# Создание первого администратора
docker-compose exec api python -m app.scripts.create_first_admin
git clone https://github.com/9meows/online-store-api.git
cd online-store-api
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
# PostgreSQL
createdb online_store
# Redis (должен быть запущен)
redis-cli ping # Проверка
cp .env.example .env
# Отредактируйте .env:
# - DB_HOST=localhost
# - CELERY_BROKER_URL=redis://localhost:6379/0
# - SMTP_HOST=localhost (или ваш SMTP)
alembic upgrade head
python -m app.scripts.create_first_admin
# Терминал 1: FastAPI
uvicorn app.main:app --reload --port 8000
# Терминал 2: Celery Worker
celery -A app.celery_app worker --loglevel=info
POST /users/ # Регистрация (→ email-уведомление)
POST /users/token # Логин (получение токенов)
POST /users/refresh-token # Обновление access токена
GET /categories/ # Список категорий
POST /categories/ # Создание
PUT /categories/{id} # Обновление
DELETE /categories/{id} # Удаление (soft delete)
GET /products/ # Список (фильтры + полнотекстовый поиск)
POST /products/ # Создание (seller)
GET /products/{id} # Детали товара
PUT /products/{id} # Обновление (seller, свои товары)
DELETE /products/{id} # Удаление (seller, свои товары)
GET /products/category/{id} # Товары по категории
Примеры фильтров:
GET /products/?search=iphone&min_price=500&max_price=2000&category_id=1&in_stock=true
GET /reviews/ # Все отзывы
GET /products/{id}/reviews/ # Отзывы товара
POST /reviews/ # Создание (buyer, 1 на товар)
DELETE /reviews/{id} # Удаление (admin)
GET /cart/ # Просмотр корзины
POST /cart/items # Добавление товара
POST /cart/items/{id} # Обновление количества
DELETE /cart/items/{id} # Удаление товара
DELETE /cart/ # Очистка корзины
POST /orders/checkout # Оформление заказа → YooKassa
GET /orders/ # История заказов (пагинация)
GET /orders/{id} # Детали заказа
GET /orders/{id}/status # Статус заказа
POST /payments/yookassa/webhook # Webhook от YooKassa
GET / # Приветственное сообщение
users (пользователи)
├── cart_items (корзина)
├── orders (заказы)
│ └── order_items (позиции заказов)
└── products (товары)
├── reviews (отзывы)
└── categories (категории)
| Роль | Права |
|---|---|
| Admin | Управление категориями, модерация отзывов |
| Seller | CRUD своих товаров, загрузка изображений |
| Buyer | Корзина, заказы, отзывы, просмотр товаров |
-- PostgreSQL TSVECTOR с GIN индексом
CREATE INDEX ix_products_tsv_gin ON products USING gin(tsv);
-- Веса: название (A) > описание (B)
tsv = setweight(to_tsvector('english', name), 'A')
|| setweight(to_tsvector('english', description), 'B')
# Текущие задачи:
- send_email_task: Отправка email-уведомлений
# Идеи для расширения:
- generate_report_task: Генерация отчётов
- optimize_images_task: Оптимизация изображений
- cleanup_old_orders_task: Очистка старых заказов (через Celery Beat)
# URL: http://localhost:8080
# Все отправленные email отображаются здесь
# Docker
docker-compose logs -f api
docker-compose logs -f celery_worker
# Локально
tail -f info.log
# 1. Проверьте Celery worker
docker-compose logs celery_worker
# 2. Проверьте MailDev
open http://localhost:8080
# 3. Проверьте настройки SMTP в .env
SMTP_HOST=maildev
SMTP_PORT=1025
# Сбросить БД и пересоздать
docker-compose down -v
docker-compose up -d
docker-compose exec api alembic upgrade head
# Проверьте Redis
docker-compose exec redis redis-cli ping
# Проверьте переменные окружения
docker-compose exec celery_worker env | grep CELERY
└── online-store-api/
├── Dockerfile
├── README.md
├── alembic.ini
├── app
│ ├── __init__.py
│ ├── auth.py
│ ├── celery_app.py
│ ├── config.py
│ ├── database.py
│ ├── db_depends.py
│ ├── email_service
│ │ ├── __init__.py
│ │ └── send_email.py
│ ├── log.py
│ ├── main.py
│ ├── migrations
│ │ ├── README
│ │ ├── env.py
│ │ ├── script.py.mako
│ │ └── versions
│ ├── models
│ │ ├── __init__.py
│ │ ├── cart_items.py
│ │ ├── categories.py
│ │ ├── orders.py
│ │ ├── products.py
│ │ ├── reviews.py
│ │ └── users.py
│ ├── payments.py
│ ├── routers
│ │ ├── cart.py
│ │ ├── categories.py
│ │ ├── orders.py
│ │ ├── payments.py
│ │ ├── products.py
│ │ ├── reviews.py
│ │ └── users.py
│ ├── schemas.py
│ ├── scripts
│ │ └── create_first_admin.py
│ └── tasks
│ ├── __init__.py
│ └── email_tasks.py
├── docker-compose.yml
│── requirements.txt
├── .env.example
└── .dockerignore