Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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)