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

https://github.com/zabit923/gidratop-be

🌐 e-commerce store πŸ’»
https://github.com/zabit923/gidratop-be

alembic argon2 aws-s3 docker docker-compose fastapi faststream jwt postgresql pydantic-v2 python rabbitmq redis sqlalchemy uvicorn yandex-cloud

Last synced: 3 months ago
JSON representation

🌐 e-commerce store πŸ’»

Awesome Lists containing this project

README

          

# Gidrator

## πŸ› οΈ ВСхнологичСский стСк

#### Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями
[![uv](https://img.shields.io/badge/uv-DE5FE9?style=for-the-badge&logo=python&logoColor=white)](https://docs.astral.sh/uv/)

#### Backend
[![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://docs.python.org/3/)
[![FastAPI](https://img.shields.io/badge/FastAPI-009688?style=for-the-badge&logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/)
[![Uvicorn](https://img.shields.io/badge/Uvicorn-499848?style=for-the-badge&logo=gunicorn&logoColor=white)](https://www.uvicorn.org/)

#### Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/docs/)
[![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white)](https://redis.io/docs/)
[![Alembic](https://img.shields.io/badge/Alembic-6BA81E?style=for-the-badge&logo=sqlalchemy&logoColor=white)](https://alembic.sqlalchemy.org/)

#### ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ сообщСния, стриминг
[![RabbitMQ](https://img.shields.io/badge/RabbitMQ-FF6600?style=for-the-badge&logo=rabbitmq&logoColor=white)](https://www.rabbitmq.com/docs)
[![FastStream](https://img.shields.io/badge/FastStream-FF6600?style=for-the-badge&logo=rabbitmq&logoColor=white)](https://faststream.airt.ai/)

#### Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°
[![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://docs.docker.com/)
[![Docker Compose](https://img.shields.io/badge/Docker_Compose-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://docs.docker.com/compose/)

#### Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
[![pgAdmin](https://img.shields.io/badge/pgAdmin-336791?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.pgadmin.org/docs/)
[![Redis Commander](https://img.shields.io/badge/Redis_Commander-DC382D?style=for-the-badge&logo=redis&logoColor=white)](https://github.com/joeferner/redis-commander)

#### ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ сСрвисы
[![Yandex Cloud](https://img.shields.io/badge/Yandex_Cloud-5282FF?style=for-the-badge&logo=yandex&logoColor=white)](https://yandex.cloud/docs/)
[![AWS S3](https://img.shields.io/badge/AWS_S3-569A31?style=for-the-badge&logo=amazons3&logoColor=white)](https://docs.aws.amazon.com/s3/)

#### Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ аутСнтификация
[![Argon2](https://img.shields.io/badge/Argon2-000000?style=for-the-badge&logo=security&logoColor=white)](https://argon2-cffi.readthedocs.io/)
[![JWT](https://img.shields.io/badge/JWT-000000?style=for-the-badge&logo=jsonwebtokens&logoColor=white)](https://pyjwt.readthedocs.io/)

#### ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ΄Π°
[![Black](https://img.shields.io/badge/Black-000000?style=for-the-badge&logo=python&logoColor=white)](https://black.readthedocs.io/)
[![MyPy](https://img.shields.io/badge/MyPy-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://mypy.readthedocs.io/)
[![Flake8](https://img.shields.io/badge/Flake8-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://flake8.pycqa.org/)
[![Pytest](https://img.shields.io/badge/Pytest-0A9EDC?style=for-the-badge&logo=pytest&logoColor=white)](https://docs.pytest.org/)

## Установка

ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ:
```bash
git clone https://gitlab.com/store-be/gidrator-be.git .
```
Или:
```bash
git clone https://gitlab.com/store-be/gidrator-be.git
```
ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ:
```bash
cd ./gidrator-be
```

> [!NOTE]
> ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° `.env`

## Настройка окруТСния

ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.
Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°ΠΉΠ» `.env.dev` для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ· .env.example Π² Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .env.dev:
```bash
cp .env.example .env.dev
```

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» .env.dev, Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

### Настройки JWT ΠΈ бСзопасности
- `TOKEN_SECRET_KEY` - сСкрСтный ΠΊΠ»ΡŽΡ‡ для подписи JWT Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ!)
- `COOKIE_DOMAIN` - Π΄ΠΎΠΌΠ΅Π½ для cookies (localhost для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)

### Настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL
- `POSTGRES_USER` - имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PostgreSQL
- `POSTGRES_PASSWORD` - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PostgreSQL
- `POSTGRES_HOST` - хост Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ localhost для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)
- `POSTGRES_PORT` - ΠΏΠΎΡ€Ρ‚ PostgreSQL (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 5432)
- `POSTGRES_DB` - имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

### Настройки pgAdmin
- `PGADMIN_DEFAULT_EMAIL` - email ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ pgAdmin
- `PGADMIN_DEFAULT_PASSWORD` - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ pgAdmin

### Настройки Redis
- `REDIS_PASSWORD` - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для Redis
- `REDIS_PORT` - ΠΏΠΎΡ€Ρ‚ Redis (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 6379)

### Настройки RabbitMQ
- `RABBITMQ_USER` - имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ RabbitMQ
- `RABBITMQ_PASS` - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ RabbitMQ
- `RABBITMQ_HOST` - хост RabbitMQ
- `RABBITMQ_PORT` - ΠΏΠΎΡ€Ρ‚ RabbitMQ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 5672)
- `RABBITMQ_EXCHANGE` - имя exchange для сообщСний

### Настройки SMTP (для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ email)
- `SMTP_USERNAME` - имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ SMTP
- `SMTP_PASSWORD` - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ SMTP
- `SMTP_PORT` - ΠΏΠΎΡ€Ρ‚ SMTP (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 587)

### Настройки AWS S3
- `AWS_SERVICE_NAME` - имя сСрвиса AWS (s3)
- `AWS_REGION` - Ρ€Π΅Π³ΠΈΠΎΠ½ AWS (ru-central1)
- `AWS_ENDPOINT` - endpoint AWS (https://storage.yandexcloud.net)
- `AWS_BUCKET_NAME` - имя Π±Π°ΠΊΠ΅Ρ‚Π° AWS
- `AWS_ACCESS_KEY_ID` - ΠΊΠ»ΡŽΡ‡ доступа AWS
- `AWS_SECRET_ACCESS_KEY` - сСкрСтный ΠΊΠ»ΡŽΡ‡ доступа AWS

### Настройки CORS
- `ALLOW_ORIGINS` - список Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… источников (для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ["*"])

### Настройки логирования
- `LOGGING__LOG_FORMAT` - Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π»ΠΎΠ³ΠΎΠ² (pretty/json)
- `LOGGING__LOG_FILE` - ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π»ΠΎΠ³ΠΎΠ²
- `LOGGING__LEVEL` - ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логирования (DEBUG/INFO/WARNING/ERROR)

> [!NOTE]
> ΠŸΠΎΡ€Ρ‚ 5432 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ занят, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ свободный ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 5433).
>
>
### Настройки CORS
- `ALLOW_ORIGINS` - список Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… источников (для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ["http://localhost:3000","http://localhost:5173"])

### ΠŸΡ€ΠΈΠΌΠ΅Ρ€ минимальной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
```
# Настройки логирования
LOGGING__LOG_FORMAT=pretty
LOGGING__LOG_FILE=./logs/app.log
LOGGING__LEVEL=DEBUG

# Настройки JWT (ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠž!)
TOKEN_SECRET_KEY=your_very_secure_secret_key_here
COOKIE_DOMAIN=localhost

# SMTP
SMTP_PORT=587
SMTP_USERNAME=admin
SMTP_PASSWORD=admin

# Настройки Redis
REDIS_PORT=6379
REDIS_PASSWORD=default

# Настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=localhost
POSTGRES_PORT=5433
POSTGRES_DB=gidrator-db

# Настройки pgAdmin
PGADMIN_DEFAULT_EMAIL=admin@admin.com
PGADMIN_DEFAULT_PASSWORD=admin

# RabbitMQ
RABBITMQ_USER=guest
RABBITMQ_PASS=guest
RABBITMQ_PORT=5672
RABBITMQ_HOST=localhost
RABBITMQ_EXCHANGE=gidrator

# AWS S3
AWS_SERVICE_NAME=s3
AWS_REGION=ru-central1
AWS_ENDPOINT=https://storage.yandexcloud.net
AWS_BUCKET_NAME=your_bucket_name
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key

# Настройки CORS
ALLOW_ORIGINS=["*"]
ALLOW_CREDENTIALS=true
ALLOW_METHODS=["*"]
ALLOW_HEADERS=["*"]
```

> [!IMPORTANT]
> - Никогда Π½Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ .env.dev ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ!
> - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² .gitignore.
> - ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ `TOKEN_SECRET_KEY` Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСкрСтный ΠΊΠ»ΡŽΡ‡!

## ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запуск
> [!IMPORTANT]
> ΠŸΠ΅Ρ€Π΅Π΄ использованиСм этих ΠΊΠΎΠΌΠ°Π½Π΄ uv Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн
```bash
uv run activate
```

## ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запуск

Для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния Π±Π΅Π· запуска Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
(Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² сосСднСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΏΡ€ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ инфраструктурС):

```bash
uv run setup
```

Запуск Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (с hot-reload) Π±Π΅Π· инфраструктуры (Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.Π΄.)
```bash
uv run dev
```

Или запуск Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (с hot-reload) с инфраструктурой ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

```bash
uv run activate
```

## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

### ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ:
- Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ΄Ρ‘Ρ‚ ΠΎΡ‚ `development`
- Π’ `development` ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ Ρ„ΠΈΡ‡ΠΈ
- ВСстим Π½Π° `development`
- Когда всё ΠΎΠΊ - ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ `development` Π² `main`

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти измСнСния ΠΈΠ»ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ, поТалуйста, слСдуйтС этим шагам:

1. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° `development` ΠΈ подтягиваСм послСдниС измСнСния с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория:
```bash
git checkout development
git pull origin development
```

2. ΠžΡ‚ `development` создаСм свою Π²Π΅Ρ‚ΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ сразу Π½Π° Π½Π΅Ρ‘ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ:
```bash
git checkout -b feature/your-name-of-feature
```

3. Кодим ΠΈ ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Ρƒ добавляСм всС измСнСния Π² индСкс:
```bash
git add .
```

4. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ с описаниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
```bash
git commit -m "feat: your-changes"
```

5. ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡƒΡˆΠ΅ΠΌ обновляСм Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚ `development`, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ
1) ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° development
2) ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹Π΅ измСнСния
3) ВозвращаСмся Π½Π° свою Π²Π΅Ρ‚ΠΊΡƒ
4) ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ свои измСнСния ΠΏΠΎΠ²Π΅Ρ€Ρ… послСднСй вСрсии `development`

```bash
git checkout development
git pull origin development
git checkout feature/your-name-of-feature
git rebase development
```

6. ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ свою Π²Π΅Ρ‚ΠΊΡƒ Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:
```bash
git push origin feature/your-name-of-feature --force-with-lease
```

7. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Pull Request Π² dev Π²Π΅Ρ‚ΠΊΡƒ!
> 1) Π–ΠΌΡ‘ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ "New Pull Request"
> 2) Π’ base Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ `development` (ΠšΠ£Π”Π Π»ΡŒΡ‘ΠΌ)
> 3) Π’ compare Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ свою Π²Π΅Ρ‚ΠΊΡƒ feature/your-name-of-feature (ΠžΠ’ΠšΠ£Π”Π Π»ΡŒΡ‘ΠΌ)
> 4) ПишСшь Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС Ρ‡Ρ‚ΠΎ сдСлали
> 5) ДобавляСм Ρ€Π΅Π²ΡŒΡŽΠ΅Ρ€ΠΎΠ²
> 6) Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΈ PR

Π›ΠΈΠ±ΠΎ просто Π΄Π΅Π»Π°Π΅ΠΌ merge Π² development Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ· своСй feature/your-name-of-feature Π²Π΅Ρ‚ΠΊΠΈ.
```bash
git checkout development
git merge feature/your-name-of-feature
```

8. ПослС тСстирования Π½Π° `development`, создаём PR ΠΈΠ· `development` Π² `main`.
> 1) Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ PR
> 2) Π’ base Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ main (ΠšΠ£Π”Π Π»ΡŒΡ‘ΠΌ)
> 3) Π’ compare Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ development (ΠžΠ’ΠšΠ£Π”Π Π»ΡŒΡ‘ΠΌ)
> 4) ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ всС измСнСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠΉΠ΄ΡƒΡ‚ Π² ΠΏΡ€ΠΎΠ΄
> 6) Π–Π΄Ρ‘ΠΌ подтвСрТдСния ΠΎΡ‚ Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Π°

Π›ΠΈΠ±ΠΎ просто Π΄Π΅Π»Π°Π΅ΠΌ merge Π² main Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ· development Π²Π΅Ρ‚ΠΊΠΈ.
```bash
git checkout main
git merge development
```

9. УдаляСм свою Π²Π΅Ρ‚ΠΊΡƒ feature/your-name-of-feature

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ:

```bash
git branch -d feature/your-name-of-feature
```
Π£Π΄Π°Π»Ρ‘Π½Π½ΠΎ:
```bash
git push origin --delete feature/your-name-of-feature
```