# Лабораторная работа №2

## Описание проекта

Проект разворачивает 3 программы в отдельных контейнерах с использованием Docker Compose:
1. **author_service** - сервис, с CRUD операциями для авторов;
2. **publication_service** - сервис, с CRUD операциями для публикаций;
3. **nginx** - веб-сервер и прокси-сервер, является маршрутизатором.

Между первыми двумя сервисами имеется связь один(`Автор`) ко многим(`Публикация`).

## Струкутура проекта

### Проект состоит из:

- 2 папки(author_service, publication_service)
    - Каждая папка содержит в себе файл с расширением `.py` с кодом программы;
    - Кадлая папка сожержит в себе файл `Dockerfile` с инструкцией по созданию Docker образа.

- Файл `.gitignore` для исключения временных файлов директории `venv/`;

- Файл `docker-compose.yml` с конфигурацией Docker Compose;

- Файл `nginx.conf` конфигурации для веб-сервера NGINX с параметрами работы сервера;

- Файл `requirements.txt` с перечислением всех необходимых библиотек для запуска. 

Комментарии в файлах.

## Запуск

1. Скачать и установить Docker и Docker Compose;
2. Перейти в директорию с файлом  docker-compose.yml;
3. Открыть консоль и запустить сервисы командой 
```bash
docker-compose up --build -d
```
4. Дождаться запуска всех сервисов
```bash
    [+] Running 3/3
 ✔ Container lazarev_andrey_lab_2-generate-files-1  Started                            0.5s 
 ✔ Container lazarev_andrey_lab_2-first-1           Started                            1.3s 
 ✔ Container lazarev_andrey_lab_2-second-1          Started                            2.0s 
```
5. Остановка всех сервисов
Для завершения работы с сервисами необходимо выполнить команду:
    ```bash
    docker-compose down
    ```
Дождаться завершения работы:
```bash
[+] Running 4/4
 ✔ Container lazarev_andrey_lab_2-second-1          Removed                            0.0s 
 ✔ Container lazarev_andrey_lab_2-first-1           Removed                            0.0s 
 ✔ Container lazarev_andrey_lab_2-generate-files-1  Removed                            0.0s 
 ✔ Network lazarev_andrey_lab_2_default             Removed                               0.4s
```

## Cписок команд
- Author_service
    - `http://localhost:8000/author_service/author` - список авторов
    - `http://localhost:8000/author_service/author/{id автора}` - конкретный автор
    - `http://localhost:8000/author_service/author/full/{id автора}` - автор и полный список его публикаций
    - `http://localhost:8000/author_service/author?name={имя}&second_name={фамилия}&age={возраст}` - добавление нового автора
    - `http://localhost:8000/author_service/author/{id автора}?name={новое имя}` - изменение имени автора

- Publication_service
    - `http://localhost:8000/publication_service/publication` - список публикаций
    - `http://localhost:8000/publication_service/publication/{id публикации}` - конкретная публикация
    - `http://localhost:8000/publication_service/publication/full/{id публикации}` - публикация и полная информация об авторе
    - `http://localhost:8000/publication_service/publication?name={название}&public_year={год выпуска}&author_id={id автора}` - добавление новой публикации
    - `http://localhost:8000/publication_service/publication/{id публикации}?name={новое название}` - изменение названия публикации
## Видеодемонстрация работоспособности

[Демонстрация работы сервисов](https://files.ulstu.ru/s/5D2i6gbLn6r2jsA)