Сервис 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
— требуемая сумма, целочисленное поле; больше 0invested_amount
— внесённая сумма, целочисленное поле; значение по умолчанию — 0fully_invested
— булево значение, указывающее на то, собрана ли нужная сумма для проекта (закрыт ли проект); значение по умолчанию — Falsecreate_date
— дата создания проекта, тип DateTime, должно добавляться автоматически в момент создания проектаclose_date
— дата закрытия проекта, DateTime, проставляется автоматически в момент набора нужной суммы
Поля схемы donation
:
id
— первичный ключuser_id
— id пользователя, сделавшего пожертвование. Foreign Key на поле user.id из таблицы пользователейcomment
— необязательное текстовое полеfull_amount
— сумма пожертвования, целочисленное поле; больше 0invested_amount
— сумма из пожертвования, которая распределена по проектам; значение по умолчанию равно 0fully_invested
— булево значение, указывающее на то, все ли деньги из пожертвования были переведены в тот или иной проект; по умолчанию равно Falsecreate_date
— дата пожертвования; тип DateTime; добавляется автоматически в момент поступления пожертвованияclose_date
— дата, когда вся сумма пожертвования была распределена по проектам; тип DateTime; добавляется автоматически в момент выполнения условия
Примеры запросов к API, варианты ответов и ошибок приведены в спецификации openapi.json
, либо на странице документации.
APP_TITLE=Кошачий благотворительный фонд
DATABASE_URL=sqlite+aiosqlite:///./fastapi.db
SECRET=secret
[email protected]
FIRST_SUPERUSER_PASSWORD=string
type=service_account
project_id=lucid-totality-3****5
private_key_id=511**************335d
private_key="private_key_here"
client_email=service-account@google-project.iam.gserviceaccount.com
client_id=11**************9379
auth_uri=https://accounts.google.com/o/oauth2/auth
token_uri=https://oauth2.googleapis.com/token
auth_provider_x509_cert_url=https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_url=url-to-cert
[email protected]
- Python 3
- fastapi 0.78
- fastapi-users 10
- SQLAlchemy 1.4
- alembic 1.7
- aiogoogle 4.2.0
- и их зависимости (описано в 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/