Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andmerk93/cat_charity_fund
FastAPI + FastApi Users + SQLAlchemy + Alembic
https://github.com/andmerk93/cat_charity_fund
alembic fastapi fastapi-users sqlalchemy
Last synced: 14 days ago
JSON representation
FastAPI + FastApi Users + SQLAlchemy + Alembic
- Host: GitHub
- URL: https://github.com/andmerk93/cat_charity_fund
- Owner: andmerk93
- Created: 2023-08-18T04:50:32.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-08-22T08:08:35.000Z (over 1 year ago)
- Last Synced: 2024-11-24T01:09:50.995Z (2 months ago)
- Topics: alembic, fastapi, fastapi-users, sqlalchemy
- Language: Python
- Homepage:
- Size: 42 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Сервис 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
[email protected]
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/
---
### Автор: [Андрей Меркулов](https://github.com/andmerk93)