Skip to content

abramov-v/cat_charity_fund

Repository files navigation

Благотворительный фонд поддержки - QRKot

О проекте

Асинхронное приложение на FastAPI для управления благотворительными проектами и пожертвованиями.
Пользователи могут делать пожертвования, а суперпользователи — создавать и редактировать проекты.
Все средства автоматически распределяются между открытыми проектами.

Возможности

  • Регистрация и аутентификация пользователей (JWT).
  • Управление проектами (CRUD, доступно только суперпользователям).
  • Создание пожертвований (для авторизованных пользователей).
  • Автоматическое распределение пожертвований по проектам.
  • Swagger-документация доступна по адресу /docs.

Используемый стек

Python 3.10+
FastAPI
Pydantic
SQLAlchemy (async)
Alembic
Uvicorn
FastAPI Users
Pytest
Flake8

Установка

  1. Клонируйте репозиторий и перейдите в директорию проекта:
git clone [email protected]:abramov-v/cat_charity_fund.git
cd cat_charity_fund
  1. Создайте и активируйте виртуальное окружение:
python -m venv venv
source venv/bin/activate   # Linux/macOS
venv\Scripts\activate      # Windows
  1. Установите зависимости:
pip install -r requirements.txt
  1. Настройте переменные окружения:

Скопируйте файл .env.example и создайте на его основе .env:

cp .env.example .env

Пример содержимого .env:

APP_TITLE=Благотворительный фонд поддержки котиков - QRKot
APP_DESC=Приложение для управления благотворительными проектами
DATABASE_URL=sqlite+aiosqlite:///./fastapi.db
SECRET_KEY=your_super_secret_key_here
FIRST_SUPERUSER_EMAIL=[email protected]
FIRST_SUPERUSER_PASSWORD=your_strong_password_here
  1. Инициализируйте базу данных и выполните миграции:
alembic upgrade head

Если вы вносите изменения в модели и хотите создать новую миграцию, выполните:

alembic revision --autogenerate -m "Комментарий к миграции"
alembic upgrade head
  1. Запустите приложение:
uvicorn app.main:app --reload

После запуска приложение будет доступно по адресам:

Swagger UI: http://127.0.0.1:8000/docs ReDoc: http://127.0.0.1:8000/redoc

Примеры запросов к API

Подробные варианты запросов и ошибок описаны в openapi.yml.
Ниже приведены базовые примеры.

Аутентификация

Логин (получение JWT):

POST /auth/jwt/login
Content-Type: application/x-www-form-urlencoded

[email protected]&password=secret

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJh...",
  "token_type": "bearer"
}

Регистрация нового пользователя

POST /auth/register
Content-Type: application/json
{
  "email": "[email protected]",
  "password": "123456"
}

Работа с проектами

Получить все проекты:

GET /charity_project/
[
  {
    "name": "string",
    "description": "string",
    "full_amount": 500,
    "id": 0,
    "invested_amount": 0,
    "fully_invested": true,
    "create_date": "2019-08-24T14:15:22Z",
    "close_date": "2019-08-24T14:15:22Z"
  }
]

Создать проект (только суперпользователь):

POST /charity_project/
Authorization: Bearer <token>
Content-Type: application/json

Тело запроса:

{
  "name": "string",
  "description": "string",
  "full_amount": 0
}

Тело ответа:

{
  "name": "string",
  "description": "string",
  "full_amount": 0,
  "id": 0,
  "invested_amount": 0,
  "fully_invested": true,
  "create_date": "2019-08-24T14:15:22Z",
  "close_date": "2019-08-24T14:15:22Z"
}

Работа с пожертвованиями

Сделать пожертвование:

POST /donation/
Authorization: Bearer <token>
Content-Type: application/json

Тело запроса:

{
  "full_amount": 500,
  "comment": "На корм котикам"
}

Тело ответа:

{
  "full_amount": 500,
  "comment": "На корм котикам",
  "id": 0,
  "create_date": "2019-08-24T14:15:22Z"
}

Посмотреть мои пожертвования:

GET /donation/my
Authorization: Bearer <token>

Тело ответа:

[
  {
    "full_amount": 500,
    "comment": "На корм котикам",
    "id": 1,
    "create_date": "2025-09-07T10:05:00Z"
  }
]

Автор

Валерий Абрамов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published