Фонд собирает пожертвования на различные целевые проекты: на медицинское обслуживание нуждающихся хвостатых, на обустройство кошачьей колонии в подвале, на корм оставшимся без попечения кошкам — на любые цели, связанные с поддержкой кошачьей популяции.
В Фонде QRKot может быть открыто несколько целевых проектов. У каждого проекта есть название, описание и сумма, которую планируется собрать. После того, как нужная сумма собрана — проект закрывается. Пожертвования в проекты поступают по принципу First In, First Out: все пожертвования идут в проект, открытый раньше других; когда этот проект набирает необходимую сумму и закрывается — пожертвования начинают поступать в следующий проект.
Каждый пользователь может сделать пожертвование и сопроводить его комментарием. Пожертвования не целевые: они вносятся в фонд, а не в конкретный проект. Каждое полученное пожертвование автоматически добавляется в первый открытый проект, который ещё не набрал нужную сумму. Если пожертвование больше нужной суммы или же в Фонде нет открытых проектов — оставшиеся деньги ждут открытия следующего проекта. При создании нового проекта все неинвестированные пожертвования автоматически вкладываются в новый проект.
Целевые проекты создаются администраторами сайта. Любой пользователь может видеть список всех проектов, включая требуемые и уже внесенные суммы. Это касается всех проектов — и открытых, и закрытых. Зарегистрированные пользователи могут отправлять пожертвования и просматривать список своих пожертвований.
- Создание и управление целевыми проектами для сбора пожертвований.
- Просмотр списка всех проектов с указанием требуемой суммы и уже собранных пожертвований.
- Внесение пожертвований с возможностью добавления комментария.
- Автоматическое распределение пожертвований на открытые проекты.
- Автоматическое создание новых проектов при достижении необходимой суммы в предыдущих проектах.
- Регистрация пользователей и просмотр списка собственных пожертвований.
Добавлена возможность формирования отчёта в гугл-таблице. В нем закрытые проекты, отсортированные по скорости сбора средств — от тех, что закрылись быстрее всего, до тех, что долго собирали нужную сумму.
Для этого, необходимо:
- Создать проект в консоли Google Cloud Platform.
- Подключить к проекту Google Drive API и Google Sheets API.
- В разделе Credentials создать сервисный аккаунт.
- Нажмите Keys – Add Key – Create New Key, чтобы создать ключ доступак вашему сервисному аккаунту и получить JSON-файл с ним.
- Python 3.9
- FastAPI 0.78
- SQLAlchemy 1.4
- Alembic 1.7
- Pydantic 1.9
- Aiogoogle 4.2
-
Склонируйте репозиторий на локальную машину:
git clone [email protected]:Timik2t/cat_charity_fund.git
-
Создайте и активируйте виртуальное окружение:
python -m venv venv
Активация окружения
# Windows source venv/Scripts/activate
# Linux source venv/bin/activate
-
Установите зависимости:
pip install -r requirements.txt
-
Примените миграции:
alembic upgrade head
-
Создайте файл с переменными окружения
.env
и заполните его данными:APP_TITLE=Фонд QRKot APP_DESCRIPTION=Благотворительный фонд поддержки усатых хвостатых DATABASE_URL=sqlite+aiosqlite:///./fastapi.db SECRET=<секретный ключ> # Почта и пароль суперюзера [email protected] FIRST_SUPERUSER_PASSWORD=admin # Заполните по JSON-файлу ключа TYPE=service_account PROJECT_ID=atomic-climate-<идентификатор> PRIVATE_KEY_ID=<id приватного ключа> PRIVATE_KEY="-----BEGIN PRIVATE KEY-----<приватный ключ>-----END PRIVATE KEY-----\n" CLIENT_EMAIL=<email сервисного аккаунта> CLIENT_ID=<id сервисного аккаунта> 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=<ссылка> # Почта, указанная в Google Cloud Platform EMAIL=<email пользователя>
-
Запуск проекта:
Стандартный запуск:
uvicorn app.main:app
Запуск сервера с автоматическим перезапуском при изменении кода (только для режима разработки):
uvicorn app.main:app --reload
Сервер будет доступен локально по адресу: http://127.0.0.1:8000
- Для работы с документацией, файл
openapi.json
можно загрузить в сервис Redocly или использовать Интерактивную документацию Swagger или Redoc после запуска проекта.