Это асинхронный API-сервис на FastAPI для ведения благотворительных проектов c распределением пожертвований. Проекты финансируются по принципу FIFO — средства сначала идут в самый ранний открытый проект. Приложение не обрабатывает реальные денежные переводы, но имеет архитектуру, готовую к интеграции с платежными системами.
- Регистрация и авторизация пользователей (JWT-аутентификация)
- Создание суперпользователя с правами редактирования проектов
- CRUD для благотворительных проектов (только для суперпользователей)
- Создание пожертвований зарегистрированными пользователями
- Автоматическое распределение пожертвований по открытым проектам
- Нельзя редактировать/удалять закрытые или частично инвестированные проекты
- Пользователи видят только свои пожертвования
- Формирование отчёта в Google Sheets по закрытым проектам, отсортированным по скорости сбора средств (только для суперпользователей)
-
Клонируйте проект с репозитория:
git clone https://github.com/KuznetcovIvan/QRkot_spreadsheets.git
-
Перейдите в директорию с проектом:
cd QRkot_spreadsheets
-
Создайте виртуальное окружение в директории проекта:
python -m venv venv
, и активируйте его:venv\Scripts\activate
(для Linux/macOS:source venv/bin/activate
) -
Установите зависимости:
pip install -r requirements.txt
-
Создайте файл
.env
в корне проекта и задайте переменные окружения.- Пример содержимого указан в файле
.env.example
- Второй блок переменных окружения заполняется из json файла с учётными данными вашего сервисного аккаунта Google Cloud
- Не забудьте указать
EMAIL
- Google Account для предоставления доступа к созданной таблице с отчётом.
- Пример содержимого указан в файле
-
Примените миграции
alembic upgrade head
. -
Запустите приложение
uvicorn app.main:app
- Приложение запустится на http://127.0.0.1:8000/.
- При первом запуске приложения, при наличии в файле
.env
переменныхFIRST_SUPERUSER_EMAIL
иFIRST_SUPERUSER_PASSWORD
, будет создан суперпользователь с соответствующимEMAIL
иPASSWORD
.
Просмотреть все доступные эндпоинты, их параметры, а также выполнять запросы прямо из браузера можно здесь:
Используется FastAPI Users и JWT.
Метод | Эндпоинт | Описание | Пример запроса |
---|---|---|---|
POST | /auth/register |
Регистрация пользователя | json { "email": "[email protected]", "password": "strongpassword" } |
POST | /auth/jwt/login |
Вход (JWT-аутентификация) | json { "username": "[email protected]", "password": "strongpassword" } |
GET | /users/me |
Получение данных текущего пользователя | (Требуется авторизация, заголовок: Authorization: Bearer <token> ) |
- Эндпоинт удаления пользователя отключён.
Метод | Эндпоинт | Описание | Пример запроса |
---|---|---|---|
GET | /charity_project/ |
Получить список всех проектов | - |
POST | /charity_project/ |
Создать новый проект (только суперпользователь) | json { "name": "Обустройство колонии", "description": "Будки и кормушки", "full_amount": 20000 } |
PATCH | /charity_project/{id} |
Обновить описание или сумму проекта | json { "description": "Обновленное описание", "full_amount": 25000 } |
DELETE | /charity_project/{id} |
Удалить проект без инвестиций | - |
-
Любой посетитель сайта (в том числе неавторизованный) может посмотреть список всех проектов.
-
Суперпользователь может:
- создавать проекты,
- удалять проекты, в которые не было внесено средств,
- изменять название и описание существующего проекта, устанавливать для него новую требуемую сумму (но не меньше уже внесённой).
-
Никто не может менять через API размер внесённых средств, удалять или модифицировать закрытые проекты, изменять даты создания и закрытия проектов.
Метод | Эндпоинт | Описание | Пример запроса |
---|---|---|---|
GET | /donation/ |
Получить список всех пожертвований (только суперпользователь) | - |
POST | /donation/ |
Сделать пожертвование | json { "full_amount": 5000, "comment": "На корм хвостикам" } |
GET | /donation/my |
Просмотреть свои пожертвования | - (Требуется авторизация, заголовок: Authorization: Bearer <token> ) |
-
Любой зарегистрированный пользователь может сделать пожертвование.
-
Зарегистрированный пользователь может просматривать только свои пожертвования.
-
Информация о том, инвестировано пожертвование в какой-то проект или нет, обычному пользователю недоступна.
-
Суперпользователь может просматривать список всех пожертвований.
-
Редактировать или удалять пожертвования не может никто.
Метод | Эндпоинт | Описание | Пример запроса |
---|---|---|---|
GET | /google/ |
Формирование отчёта со всеми закрытыми проектами (только для суперпользователей) | - |
- В таблице отображены все закрытые проекты, отсортированные по скорости сбора средств: от тех, что закрылись быстрее всего, до тех, что долго собирали нужную сумму.
app/
├── api/ # Роутеры FastAPI
├── core/ # Настройки, база, JWT
├── crud/ # CRUD-классы
├── models/ # SQLAlchemy модели
├── schemas/ # Pydantic схемы
├── services/ # Бизнес логика сервиса
├── main.py # Точка входа
Поле | Тип | Описание |
---|---|---|
id |
int |
Уникальный идентификатор проекта |
name |
str |
Название проекта |
description |
str |
Описание проекта |
full_amount |
int |
Требуемая сумма для финансирования |
invested_amount |
int |
Уже инвестированная сумма |
fully_invested |
bool |
Флаг: проект закрыт (полностью профинансирован) |
create_date |
datetime |
Дата и время создания проекта |
close_date |
datetime |
Дата и время закрытия проекта (если закрыт) |
Поле | Тип | Описание |
---|---|---|
id |
int |
Уникальный идентификатор пожертвования |
user_id |
int |
Идентификатор пользователя, сделавшего пожертвование |
full_amount |
int |
Сумма пожертвования |
invested_amount |
int |
Сколько из пожертвования уже распределено по проектам |
fully_invested |
bool |
Флаг: пожертвование полностью распределено |
comment |
str (optional) |
Комментарий к пожертвованию |
create_date |
datetime |
Дата и время создания пожертвования |
close_date |
datetime (nullable) |
Дата и время, когда пожертвование полностью распределено |
- Python 3.9+
- FastAPI
- SQLAlchemy (async)
- Alembic
- FastAPI Users
- Pydantic
- SQLite (по умолчанию)
- Aiogoogle