Skip to content

About

Приложение для фонда поддержки котиков

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

Repository files navigation

QRKot

Приложение для Благотворительного фонда поддержки котиков QRKot.

Оглавление

Описание

Фонд собирает пожертвования на различные целевые проекты: на медицинское обслуживание нуждающихся хвостатых, на обустройство кошачьей колонии в подвале, на корм оставшимся без попечения кошкам — на любые цели, связанные с поддержкой кошачьей популяции.

  • Проекты

    В Фонде QRKot может быть открыто несколько целевых проектов. У каждого проекта есть название, описание и сумма, которую планируется собрать. После того, как нужная сумма собрана — проект закрывается. Пожертвования в проекты поступают по принципу First In, First Out: все пожертвования идут в проект, открытый раньше других; когда этот проект набирает необходимую сумму и закрывается — пожертвования начинают поступать в следующий проект.

  • Пожертвования

    Каждый пользователь может сделать пожертвование и сопроводить его комментарием. Пожертвования не целевые: они вносятся в фонд, а не в конкретный проект. Каждое полученное пожертвование автоматически добавляется в первый открытый проект, который ещё не набрал нужную сумму. Если пожертвование больше нужной суммы или же в Фонде нет открытых проектов — оставшиеся деньги ждут открытия следующего проекта. При создании нового проекта все неинвестированные пожертвования автоматически вкладываются в новый проект.

  • Пользователи

    Целевые проекты создаются администраторами сайта. Любой пользователь может видеть список всех проектов, включая требуемые и уже внесенные суммы. Это касается всех проектов — и открытых, и закрытых. Зарегистрированные пользователи могут отправлять пожертвования и просматривать список своих пожертвований.

  • Google

    Проект позволяет создавать отчеты о скорости закрытия проектов. Отчеты создаются в Google-таблицах. Администратору предоставляется доступ на редактирование таблиц.

После запуска проекта на локальной машине форма доступна по адресу http://localhost:8000/.

У API имется следующие эндпоинты:

  • Благотворительные проекты:

    1. [GET] http://localhost:8000/charity_project/ - Получить все проекты Фонда

    2. [POST] http://localhost:8000/charity_project/ - Создать новый проект. Доступен только суперпользователям.

    3. [DELETE] http://localhost:8000/charity_project/{project_id} - Удалить проект. Доступен только суперпользователям. Проект с инвестициями удалить нельзя.

    4. [PATCH] http://localhost:8000/charity_project/{project_id} - Частичное обновление проекта. Доступен только суперпользователям. Нельзя установить новую требуемую сумму меньше уже инвестированной.

  • Пожертвования:

    1. [GET] http://localhost:8000/donation/ - Получение всех пожертвований. Доступен только для суперпользователей.

    2. [POST] http://localhost:8000/donation/ - Создание нового пожертвования. Доступен для зарегистрированных пользователей.

    3. [GET] http://localhost:8000/donation/my - Получение всех пожертвований позователя. Доступен только зарегистрированному пользователю.

  • Аутентификация:

    1. [POST] http://localhost:8000/auth/jwt/login - Вход

    2. [POST] http://localhost:8000/auth/jwt/logout - Выход

    3. [POST] http://localhost:8000/auth/register - Регистрация

  • Пользователи:

    1. [GET] http://localhost:8000/users/me - Информация о пользователе. Доступен только зарегистрированному пользователю.

    2. [PATCH] http://localhost:8000/users/me - Редактирование информации о пользователе. Доступен только зарегистрированному пользователю.

    3. [GET] http://localhost:8000/users/{id} - Информация о пользователе по его id. Доступен только для суперпользователей.

    4. [PATCH] http://localhost:8000/users/{id} - Редактирование информации о пользователе по его id. Доступен только для суперпользователей.

  • Google:

    1. [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/

Примеры использования API проекта

По адресу http://localhost:8000/docs и http://localhost:8000/redoc доступна подробная документация по API.

  • Посмотреть все проекты:

    Запрос:

    [GET] http://localhost:8000/charity_project/

    Ответ:

    [
        {
            "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"
        }
    ]
  • Создание проекта:

    Запрос:

    [POST] http://localhost:8000/charity_project/

    {
        "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"
    }
  • Удаление проекта:

    Запрос:

    [DELETE] http://localhost:8000/charity_project/{project_id}

    Ответ:

    {
        "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"
    }
  • Редактирование проекта:

    Запрос:

    [PATCH] http://localhost:8000/charity_project/{project_id}

    {
        "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"
    }
  • Получение всех пожертвований:

    Запрос:

    [GET] http://localhost:8000/donation

    Ответ:

    [
        {
            "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"
        }
    ]
  • Создание пожертвования:

    Запрос:

    [POST] http://localhost:8000/donation

    [
        {
            "full_amount": 0,
            "comment": "string",
        }
    ]

    Ответ:

    {
        "full_amount": 0,
        "comment": "string",
        "id": 0,
        "create_date": "2024-12-14T20:41:34.153Z"
    }
  • Посмотреть все свои пожертвования:

    Запрос:

    [GET] http://localhost:8000/donation/my

    Ответ:

    [
        {
            "full_amount": 0,
            "comment": "string",
            "id": 0,
            "create_date": "2024-12-14T20:43:32.977Z"
        }
    ]
  • Топ проектов по скорости закрытия:

    Запрос:

    [GET] http://localhost:8000/google

    Ответ:

    [
        {
            "name": "string",
            "description": "string",
            "collected_time": 0
        }
    ]
  • Формат ответа в случае возникновения ошибки:

    {
        "detail": "Описание ошибки"
    }

Авторы

Автор: Иван Агафонов

Лицензия

Этот проект лицензирован под лицензией MIT.

Лицензия MIT

Copyright © «2024» «Иван Агафонов»

Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

About

Приложение для фонда поддержки котиков

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages