Приложение для Благотворительного фонда поддержки котиков QRKot.
Фонд собирает пожертвования на различные целевые проекты: на медицинское обслуживание нуждающихся хвостатых, на обустройство кошачьей колонии в подвале, на корм оставшимся без попечения кошкам — на любые цели, связанные с поддержкой кошачьей популяции.
-
Проекты
В Фонде QRKot может быть открыто несколько целевых проектов. У каждого проекта есть название, описание и сумма, которую планируется собрать. После того, как нужная сумма собрана — проект закрывается. Пожертвования в проекты поступают по принципу First In, First Out: все пожертвования идут в проект, открытый раньше других; когда этот проект набирает необходимую сумму и закрывается — пожертвования начинают поступать в следующий проект.
-
Пожертвования
Каждый пользователь может сделать пожертвование и сопроводить его комментарием. Пожертвования не целевые: они вносятся в фонд, а не в конкретный проект. Каждое полученное пожертвование автоматически добавляется в первый открытый проект, который ещё не набрал нужную сумму. Если пожертвование больше нужной суммы или же в Фонде нет открытых проектов — оставшиеся деньги ждут открытия следующего проекта. При создании нового проекта все неинвестированные пожертвования автоматически вкладываются в новый проект.
-
Пользователи
Целевые проекты создаются администраторами сайта. Любой пользователь может видеть список всех проектов, включая требуемые и уже внесенные суммы. Это касается всех проектов — и открытых, и закрытых. Зарегистрированные пользователи могут отправлять пожертвования и просматривать список своих пожертвований.
-
Google
Проект позволяет создавать отчеты о скорости закрытия проектов. Отчеты создаются в Google-таблицах. Администратору предоставляется доступ на редактирование таблиц.
После запуска проекта на локальной машине форма доступна по адресу http://localhost:8000/.
У API имется следующие эндпоинты:
-
Благотворительные проекты:
-
[GET] http://localhost:8000/charity_project/ - Получить все проекты Фонда
-
[POST] http://localhost:8000/charity_project/ - Создать новый проект. Доступен только суперпользователям.
-
[DELETE] http://localhost:8000/charity_project/{project_id} - Удалить проект. Доступен только суперпользователям. Проект с инвестициями удалить нельзя.
-
[PATCH] http://localhost:8000/charity_project/{project_id} - Частичное обновление проекта. Доступен только суперпользователям. Нельзя установить новую требуемую сумму меньше уже инвестированной.
-
-
Пожертвования:
-
[GET] http://localhost:8000/donation/ - Получение всех пожертвований. Доступен только для суперпользователей.
-
[POST] http://localhost:8000/donation/ - Создание нового пожертвования. Доступен для зарегистрированных пользователей.
-
[GET] http://localhost:8000/donation/my - Получение всех пожертвований позователя. Доступен только зарегистрированному пользователю.
-
-
Аутентификация:
-
[POST] http://localhost:8000/auth/jwt/login - Вход
-
[POST] http://localhost:8000/auth/jwt/logout - Выход
-
[POST] http://localhost:8000/auth/register - Регистрация
-
-
Пользователи:
-
[GET] http://localhost:8000/users/me - Информация о пользователе. Доступен только зарегистрированному пользователю.
-
[PATCH] http://localhost:8000/users/me - Редактирование информации о пользователе. Доступен только зарегистрированному пользователю.
-
[GET] http://localhost:8000/users/{id} - Информация о пользователе по его id. Доступен только для суперпользователей.
-
[PATCH] http://localhost:8000/users/{id} - Редактирование информации о пользователе по его id. Доступен только для суперпользователей.
-
-
Google:
-
[GET] http://localhost:8000/google - Получение списка закрытых проектов, отсортированных по скорости набора необходимой суммы.
-
Проект использует следующие технологии:
- Python 3.9+
- FastAPI
- SQLAlchemy
- Pydantic
- Alembic
- Aiogoogle
- SQLite (по умолчанию)
-
Клонировать репозиторий и перейти в него в командной строке:
git clone https://github.com/corbuncul/QRkot_spreadsheets.git
cd QRkot_spreadsheets -
Cоздать и активировать виртуальное окружение:
python3 -m venv venv
-
Если у вас Linux/macOS
source venv/bin/activate -
Если у вас windows
source venv/scripts/activate
-
-
Установить зависимости из файла requirements.txt:
python3 -m pip install --upgrade pip
pip install -r requirements.txt
-
Создать файл ".env" и прописать константы:
APP_TITLE=Ваше название приложения APP_DESCRIPTION=Ваше краткое описание приложения DATABASE_URL=Ваше подключение к базе данных (например: sqlite+aiosqlite:///./fastapi.db) SECRET=Ваш секртный ключ (любая случайная строка) FIRST_SUPERUSER_EMAIL=Ваш email для первого суперпользователя. Если указан, при первом запуске будет создан суперпользователь. FIRST_SUPERUSER_PASSWORD=Ваш пароль суперпользователя # ниже настройки от сервисного аккаунта в Google-API TYPE=service_account PROJECT_ID=ID проекта в google-API PRIVATE_KEY_ID=ID приватного ключа PRIVATE_KEY=Приватный ключ к google-APIs 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=URl сертификата EMAIL=Email, кому будет дан доступ к таблице UNIVERSE_DOMAIN=googleapis.com
-
Применить миграции:
alembic upgrade head
uvicorn app.main:appПроект будет доступен по адресу http://localhost:8000/
По адресу http://localhost:8000/docs и http://localhost:8000/redoc доступна подробная документация по API.
-
Запрос:
Ответ:
[ { "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" } ] -
Запрос:
{ "name": "Имя проекта", "description": "Описание проекта", "full_amount": 100 }Ответ:
{ "name": "Имя проекта", "description": "Описание проекта", "full_amount": 100, "id": 0, "invested_amount": 0, "fully_invested": false, "create_date": "2019-08-24T14:15:22Z", "close_date": "2019-08-24T14:15:22Z" } -
Запрос:
Ответ:
{ "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" } -
Запрос:
{ "name": "Новое имя", "description": "Новое описание", "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" } -
Запрос:
Ответ:
[ { "full_amount": 0, "comment": "string", "id": 0, "create_date": "2024-12-14T20:35:47.803Z", "user_id": 0, "invested_amount": 0, "fully_invested": true, "close_date": "2024-12-14T20:35:47.803Z" } ] -
Запрос:
[ { "full_amount": 0, "comment": "string", } ]Ответ:
{ "full_amount": 0, "comment": "string", "id": 0, "create_date": "2024-12-14T20:41:34.153Z" } -
Запрос:
Ответ:
[ { "full_amount": 0, "comment": "string", "id": 0, "create_date": "2024-12-14T20:43:32.977Z" } ] -
Запрос:
Ответ:
[ { "name": "string", "description": "string", "collected_time": 0 } ] -
{ "detail": "Описание ошибки" }
Автор: Иван Агафонов
Этот проект лицензирован под лицензией MIT.
Лицензия MIT
Copyright © «2024» «Иван Агафонов»
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.