Skip to content

An asynchronous API service built with FastAPI for managing charity projects with donation allocation. Projects are funded on a FIFO basis — funds are directed to the earliest open project first. The application does not process real money transfers but is architecturally ready for integration with payment systems.

Notifications You must be signed in to change notification settings

KuznetcovIvan/QRkot_spreadsheets

Repository files navigation

QRKot — Благотворительный фонд

Python FastAPI SQLAlchemy Pydantic Alembic FastAPI Users Aiogoogle

Это асинхронный API-сервис на FastAPI для ведения благотворительных проектов c распределением пожертвований. Проекты финансируются по принципу FIFO — средства сначала идут в самый ранний открытый проект. Приложение не обрабатывает реальные денежные переводы, но имеет архитектуру, готовую к интеграции с платежными системами.


Возможности

  • Регистрация и авторизация пользователей (JWT-аутентификация)
  • Создание суперпользователя с правами редактирования проектов
  • CRUD для благотворительных проектов (только для суперпользователей)
  • Создание пожертвований зарегистрированными пользователями
  • Автоматическое распределение пожертвований по открытым проектам
  • Нельзя редактировать/удалять закрытые или частично инвестированные проекты
  • Пользователи видят только свои пожертвования
  • Формирование отчёта в Google Sheets по закрытым проектам, отсортированным по скорости сбора средств (только для суперпользователей)

Установка и запуск

Установка и запуск проекта

  1. Клонируйте проект с репозитория: git clone https://github.com/KuznetcovIvan/QRkot_spreadsheets.git

  2. Перейдите в директорию с проектом: cd QRkot_spreadsheets

  3. Создайте виртуальное окружение в директории проекта: python -m venv venv, и активируйте его: venv\Scripts\activate (для Linux/macOS: source venv/bin/activate)

  4. Установите зависимости: pip install -r requirements.txt

  5. Создайте файл .env в корне проекта и задайте переменные окружения.

  6. Примените миграции alembic upgrade head.

  7. Запустите приложение 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>)
  • Эндпоинт удаления пользователя отключён.

CharityProject (Проекты)

Метод Эндпоинт Описание Пример запроса
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 размер внесённых средств, удалять или модифицировать закрытые проекты, изменять даты создания и закрытия проектов.


Donation (Пожертвования)

Метод Эндпоинт Описание Пример запроса
GET /donation/ Получить список всех пожертвований (только суперпользователь) -
POST /donation/ Сделать пожертвование json { "full_amount": 5000, "comment": "На корм хвостикам" }
GET /donation/my Просмотреть свои пожертвования - (Требуется авторизация, заголовок: Authorization: Bearer <token>)
  • Любой зарегистрированный пользователь может сделать пожертвование.

  • Зарегистрированный пользователь может просматривать только свои пожертвования.

  • Информация о том, инвестировано пожертвование в какой-то проект или нет, обычному пользователю недоступна.

  • Суперпользователь может просматривать список всех пожертвований.

  • Редактировать или удалять пожертвования не может никто.


Google (Формирование отчёта в гугл-таблице)

Метод Эндпоинт Описание Пример запроса
GET /google/ Формирование отчёта со всеми закрытыми проектами (только для суперпользователей) -
  • В таблице отображены все закрытые проекты, отсортированные по скорости сбора средств: от тех, что закрылись быстрее всего, до тех, что долго собирали нужную сумму.

Архитектура приложения

app/
├── api/               # Роутеры FastAPI
├── core/              # Настройки, база, JWT
├── crud/              # CRUD-классы
├── models/            # SQLAlchemy модели
├── schemas/           # Pydantic схемы
├── services/          # Бизнес логика сервиса
├── main.py            # Точка входа

Описание моделей

CharityProject (Проект)

Поле Тип Описание
id int Уникальный идентификатор проекта
name str Название проекта
description str Описание проекта
full_amount int Требуемая сумма для финансирования
invested_amount int Уже инвестированная сумма
fully_invested bool Флаг: проект закрыт (полностью профинансирован)
create_date datetime Дата и время создания проекта
close_date datetime Дата и время закрытия проекта (если закрыт)

Donation (Пожертвование)

Поле Тип Описание
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

About

An asynchronous API service built with FastAPI for managing charity projects with donation allocation. Projects are funded on a FIFO basis — funds are directed to the earliest open project first. The application does not process real money transfers but is architecturally ready for integration with payment systems.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published