Skip to content

andmerk93/cat_charity_fund

Repository files navigation

Сервис QRKot

Описание проекта

Сервис QRKot - это сервис для кошачьего благотворительного фонда. Фонд собирает пожертвования на различные целевые проекты: на медицинское обслуживание нуждающихся хвостатых, на обустройство кошачьей колонии в подвале, на корм оставшимся без попечения кошкам — на любые цели, связанные с поддержкой кошачьей популяции.

Проекты

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

Пожертвования в проекты поступают по принципу First In, First Out: все пожертвования идут в проект, открытый раньше других; когда этот проект набирает необходимую сумму и закрывается — пожертвования начинают поступать в следующий проект.

Пожертвования

Каждый пользователь может сделать пожертвование и сопроводить его комментарием. Пожертвования не целевые: они вносятся в фонд, а не в конкретный проект. Каждое полученное пожертвование автоматически добавляется в первый открытый проект, который ещё не набрал нужную сумму. Если пожертвование больше нужной суммы или же в Фонде нет открытых проектов — оставшиеся деньги ждут открытия следующего проекта. При создании нового проекта все неинвестированные пожертвования автоматически вкладываются в новый проект.

Пользователи

Целевые проекты создаются администраторами сайта.

Любой пользователь может видеть список всех проектов, включая требуемые и уже внесенные суммы. Это касается всех проектов — и открытых, и закрытых.

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

Технические подробности

Для просмотра документации просто перейдите на главную страницу сервиса.

После запуска доступны следующие эндпоинты:

  • Регистрация и аутентификация:
    • /auth/register - регистрация пользователя
    • /auth/jwt/login - аутентификация пользователя (получение jwt-токена)
    • /auth/jwt/logout - выход (сброс jwt-токена)
  • Пользователи:
    • /users/me - получение и изменение данных аутентифицированного пользователя
    • /users/{id} - получение и изменение данных пользователя по id
  • Благотворительные проекты:
    • /charity_project/ - получение списка проектов и создание нового
    • /charity_project/{project_id} - изменение и удаление существующего проекта
  • Пожертвования:
    • /donation/ - получение списка всех пожертвований и создание пожертвования
    • /donation/my - получение списка всех пожертвований аутентифицированного пользователя

Поля схемы charityproject:

  • id — первичный ключ
  • name — уникальное название проекта, обязательное строковое поле; допустимая длина строки — от 1 до 100 символов включительно
  • description — описание, обязательное поле, текст; не менее одного символа
  • full_amount — требуемая сумма, целочисленное поле; больше 0
  • invested_amount — внесённая сумма, целочисленное поле; значение по умолчанию — 0
  • fully_invested — булево значение, указывающее на то, собрана ли нужная сумма для проекта (закрыт ли проект); значение по умолчанию — False
  • create_date — дата создания проекта, тип DateTime, должно добавляться автоматически в момент создания проекта
  • close_date — дата закрытия проекта, DateTime, проставляется автоматически в момент набора нужной суммы

Поля схемы donation:

  • id — первичный ключ
  • user_id — id пользователя, сделавшего пожертвование. Foreign Key на поле user.id из таблицы пользователей
  • comment — необязательное текстовое поле
  • full_amount — сумма пожертвования, целочисленное поле; больше 0
  • invested_amount — сумма из пожертвования, которая распределена по проектам; значение по умолчанию равно 0
  • fully_invested — булево значение, указывающее на то, все ли деньги из пожертвования были переведены в тот или иной проект; по умолчанию равно False
  • create_date — дата пожертвования; тип DateTime; добавляется автоматически в момент поступления пожертвования
  • close_date — дата, когда вся сумма пожертвования была распределена по проектам; тип DateTime; добавляется автоматически в момент выполнения условия

Примеры запросов к API, варианты ответов и ошибок приведены в спецификации openapi.json, либо на странице документации.

Шаблон наполнения .env файла

APP_TITLE=Кошачий благотворительный фонд
DATABASE_URL=sqlite+aiosqlite:///./fastapi.db
SECRET=secret
FIRST_SUPERUSER_EMAIL=user@example.com
FIRST_SUPERUSER_PASSWORD=string

Требования:

  • Python 3
  • fastapi 0.78
  • fastapi-users 10
  • SQLAlchemy 1.4
  • alembic 1.7
  • и их зависимости (описано в requirements.txt)

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

  • клонировать репозиторий на машину, с которой будет будет запускаться сервис
git clone https://github.com/andmerk93/cat_charity_fund.git
  • На машине должен быть установлен Python актуальной версии (тестировалось на 3.11)
  • развернуть виртуальное окружение python в папке с проектом (cat_charity_fund)
python3 -m venv venv
  • активировать виртуальное окружение для linux/unix
source ./venv/bin/activate 
  • для Windows, должно быть разрешено выполнение скриптов Powershell
venv\Scripts\activate
  • с запущенным виртуальным окружением нужно выполнить установку требуемых компонентов
pip install -r requirements.txt
  • затем, выполнить миграции
alembic upgrade head
  • запустить проект
uvicorn app.main:app --port 80 --reload

Проект будет доступен по http://localhost/


About

FastAPI + FastApi Users + SQLAlchemy + Alembic

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published