# Кашин Максим ПИбд-42

# Проект "Университеты и Факультеты"

## Часть 1: Создание Docker

### Установка Docker и Docker Compose
Перед началом нужно проверить, что Docker работает, иначе использовать инструцию для 1-ой лабораторной.

### 1.1 Файл `docker-compose.yml`
В корне проекта файл `docker-compose.yml`. Этот файл будет описывать, как должны быть организованы сервисы. В данном случае рассматриваем только университет, в факультетах анологично.

```yaml
version: '3.8'
services:
  university_service:
    build:
      context: ./university_service
    depends_on:
      - university_db
    environment:
      - FLASK_APP=app.py
    expose:
      - 8081
  university_db:
    image: postgres:13
    environment:
      POSTGRES_USER: university_user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: universitydb
    ports:
      - "5432:5432"
```

Объяснение:
- `version`: Указывает версию Docker Compose.
- `services`: Определяет микросервисы. В данном случае, мы начинаем с `university_service`.
- `build`: Указывает, что нужно построить образ для этого сервиса, используя Dockerfile из указанной директории.
- `depends_on`: Указывает, что этот сервис зависит от `university_db` (базы данных), которая будет запущена первой.
- `environment`: Определяет переменные окружения для сервиса, в данном случае указывая файл Flask.
- `expose`: Указывает, что сервис будет доступен на порту 8081 внутри Docker-сети.

### 1.2 Файл Dockerfile для сервиса университетов
В каталоге `university_service` файл `Dockerfile`. Этот файл будет содержать инструкции для сборки образа сервиса университетов. В данном случае рассматриваем только университет, в факультетах анологично.

```dockerfile
FROM python:3.9-slim

# Установка зависимостей
RUN apt-get update && apt-get install -y \
    gcc \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# Установка рабочей директории
WORKDIR /app

# Копирование файлов
COPY requirements.txt requirements.txt

# Установка Python-зависимостей
RUN pip install --no-cache-dir -r requirements.txt

# Копирование всех файлов приложения
COPY . .

# Запуск приложения
CMD ["python", "app.py"]
```


### 1.3 Создание файла requirements.txt
В каталоге `university_service` файл `requirements.txt`, в котором перечислите все необходимые библиотеки для приложения. В данном случае рассматриваем только университет, в факультетах анологично.

```txt
flask
flask_sqlalchemy
psycopg2
```

### 1.5 Запуск Docker Compose
Когда все файлы созданы, можно запустить сервисы с помощью команды:

```bash
docker-compose up
```

Эта команда создаст и запустит все указанные в `docker-compose.yml` сервисы.

## Часть 2: Реализация функциональности

### 2.1 Создание сервиса для университетов
В каталоге `university_service` файл `app.py`,`service.py`,`db.py`. Этb файлы будут содержать код Flask приложения для управления университетами и базы данных для него.

### 2.2 Создание сервиса для факультетов
Каталог `faculty_service` и в нем файл `app.py`,`service.py`,`db.py`. Эти файлы будут содержать код для управления факультетами и базы данных для него.

### 2.3 Создание таблиц базы данных
Нужно создать таблицы базы данных для университетов и факультетов. Для этого созданы файлы init.sql для университета и для факультетов.

### 2.4 Тестирование API
Тестирование производится через расширение RestMan. В нем мы можем убедиться, что весь CRUD работает исправно.

## Часть 3: Ссылка на видео
[Видео-отчёт Кашин Максим ПИбд-42](https://disk.yandex.ru/i/F0Dh7RnpVL1Stg)