# Практическая работа 1. Соберите иерархию проекта

## Что в архиве

Ни одной папки, семнадцать файлов подряд: код, данные, тесты, документы,
настройки и файлы, которые в проект не входят. Это проект Cafe Report,
у которого потеряли структуру, а файлы переименовали кто как. Программа
рабочая: менять код не нужно.

## Что нужно сделать

Разложить файлы по папкам так, чтобы проект запускался командами из `читать меня.md`,
и дать файлам понятные имена.

Правило раскладки: **файл лежит там, где лежит его ответственность**.
Чтобы понять ответственность файла, откройте его и прочитайте, что он делает.

Импорты внутри файлов уже написаны под правильную структуру. Строка
`from app.services.orders import load_orders` означает, что в корне проекта
есть папка `app`, в ней папка `services`, в ней файл `orders.py`. По импортам
восстанавливается всё дерево папок. Переписывать импорты под свою раскладку
нельзя: раскладка должна совпасть с ними.

## Требования

1. **Корень проекта.** Работайте в новой папке `cafe-report`. Всё, что описано
   ниже, лежит внутри неё.
2. **Код** — в папке `app`. Внутри разделите правила проекта и мелкие
   вспомогательные функции по разным папкам: расчёты и отчёт отдельно,
   работа с суммами и строками отдельно.
3. **Пакеты.** В каждой папке с кодом должен быть файл `__init__.py` — пустой.
   Без него Python не считает папку пакетом, и импорт не сработает.
4. **Имена файлов** — латиницей, маленькими буквами, слова через нижнее
   подчёркивание: `orders.py`, `test_report.py`. Пробелов в именах быть не должно.
   Имя файла с тестами начинается с `test_`, иначе `unittest` его не найдёт.
5. **Данные** — в отдельной папке, не рядом с кодом. Имя файла с заказами
   возьмите из `main.py`: путь к данным написан там.
6. **Тесты** — в папке `tests`.
7. **Документы.** `читать меня.md` становится `README.md` в корне.
   Описание проекта — в папке `docs`.
8. **Файлы настроек в корне:** список зависимостей и файл с правилами Git.
   У обоих есть общепринятые имена, которые нельзя менять, иначе инструменты
   их не найдут.
9. **Лишнее удалите.** В архиве есть файлы, которые в проект не входят:
   кеш Python, служебный файл операционной системы, черновая записка и старая
   версия программы. Файл с секретом удалять не нужно — он должен остаться
   на вашем компьютере, но не попадать в Git.

## Проверка

Из корня проекта:

```
python -m app.main
python -m unittest discover -s tests -v
```

Работа считается выполненной, если:

- программа печатает отчёт, совпадающий с ожидаемым результатом в `README.md`;
- выполняется девять тестов, в конце стоит `OK`;
- команда `git status` в собранном проекте не показывает `.venv/`,
  `__pycache__/` и `.env`.

## Что сдать

Папку `cafe-report` в своём репозитории дисциплины и в `README.md` — дерево
проекта с одной строкой о назначении каждой папки.

## Частые ошибки

- **`No module named app`** — терминал открыт не в корне проекта или папка
  `app` оказалась внутри второй вложенной папки `cafe-report`.
- **`No module named app.services`** — в папке нет файла `__init__.py`.
- **`FileNotFoundError: orders.csv`** — папка с данными названа не так, как
  написано в `main.py`, или лежит не в корне проекта.
- **`Ran 0 tests`** — файлы тестов названы без приставки `test_`. Ноль тестов
  не подтверждает готовность работы.
