{"id":51129575,"url":"https://github.com/yaleksandr89/php-project-57","last_synced_at":"2026-06-25T11:00:50.940Z","repository":{"id":352699528,"uuid":"1215293102","full_name":"yaleksandr89/php-project-57","owner":"yaleksandr89","description":"Менеджер задач (Laravel 13) с CRUD задач, статусов и меток, фильтрацией и аутентификацией","archived":false,"fork":false,"pushed_at":"2026-04-29T12:09:38.000Z","size":363,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-29T12:20:21.036Z","etag":null,"topics":["crud","docker","hexlet","hexlet-projects","laravel","laravel-framework","laravel-query-builder","mvc","php","postgresql","spatial","task-manager"],"latest_commit_sha":null,"homepage":"https://task-manager-sy0j.onrender.com","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yaleksandr89.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-19T18:21:24.000Z","updated_at":"2026-04-29T12:09:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yaleksandr89/php-project-57","commit_stats":null,"previous_names":["yaleksandr89/php-project-57"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yaleksandr89/php-project-57","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fphp-project-57","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fphp-project-57/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fphp-project-57/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fphp-project-57/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaleksandr89","download_url":"https://codeload.github.com/yaleksandr89/php-project-57/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fphp-project-57/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34771664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crud","docker","hexlet","hexlet-projects","laravel","laravel-framework","laravel-query-builder","mvc","php","postgresql","spatial","task-manager"],"created_at":"2026-06-25T11:00:50.254Z","updated_at":"2026-06-25T11:00:50.934Z","avatar_url":"https://github.com/yaleksandr89.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Actions Status](https://github.com/yaleksandr89/php-project-57/actions/workflows/hexlet-check.yml/badge.svg)](https://github.com/yaleksandr89/php-project-57/actions)\n\n---\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=yaleksandr89_php-project-57\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=yaleksandr89_php-project-57)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=yaleksandr89_php-project-57\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=yaleksandr89_php-project-57)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=yaleksandr89_php-project-57\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=yaleksandr89_php-project-57)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=yaleksandr89_php-project-57\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=yaleksandr89_php-project-57)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=yaleksandr89_php-project-57\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=yaleksandr89_php-project-57)\n\n---\n\n# Менеджер задач\n\nДемо: [https://task-manager-sy0j.onrender.com](https://task-manager-sy0j.onrender.com)\n\n## Оглавление\n\n- [Описание](#описание)\n- [Требования](#требования)\n- [Установка и запуск через Docker](#установка-и-запуск-через-docker)\n    - [Первый запуск](#первый-запуск)\n    - [Повторный запуск](#повторный-запуск)\n    - [Остановка контейнеров](#остановка-контейнеров)\n- [Демо-данные](#демо-данные)\n- [Функциональность](#функциональность)\n    - [Аутентификация](#аутентификация)\n    - [Задачи](#задачи)\n    - [Статусы задач](#статусы-задач)\n    - [Метки](#метки)\n- [Архитектура](#архитектура)\n- [Проверка качества](#проверка-качества)\n- [Команды Makefile](#команды-makefile)\n- [Демонстрация работы](#демонстрация-работы)\n\n## Описание\n\nМенеджер задач - веб-приложение для управления задачами, статусами и метками.\n\nПроект реализован на `Laravel 13.5.0` в рамках обучения на Hexlet и показывает основные элементы разработки CRUD-приложения: аутентификацию, работу с базой данных, связи между моделями, фильтрацию, валидацию форм, тесты, деплой и мониторинг ошибок.\n\nВ веб-приложении реализовано:\n\n- регистрироваться и авторизовываться;\n- просматривать задачи, статусы и метки;\n- создавать, редактировать и удалять задачи;\n- назначать задаче статус, исполнителя и метки;\n- фильтровать задачи по статусу, исполнителю и меткам;\n- управлять статусами задач;\n- управлять метками задач.\n\n## Требования\n\n- `Docker`\n- `Docker Compose`\n- `Make`\n- `Composer`\n\n---\n\n## Установка и запуск через Docker\n\n### Первый запуск\n\nСклонируйте репозиторий:\n\n```bash\ngit clone https://github.com/yaleksandr89/php-project-57.git\ncd php-project-57\n```\n\nСоздайте `.env` из `.env.example`:\n\n```bash\nmake init\n```\n\nПоднимите контейнеры:\n\n```bash\nmake up\n```\n\nУстановите PHP-зависимости:\n\n```bash\nmake composer-install\n```\n\nСгенерируйте ключ приложения, если он ещё не задан:\n\n```bash\nmake artisan key:generate\n```\n\nВыполните миграции и загрузите демо-данные:\n\n```bash\nmake migrate-fresh\n```\n\nПосле запуска приложение будет доступно по адресу (название можно сменить в [default.conf](docker/nginx/default.conf):\n\n```text\nhttp://task-manager.local\n```\n\n### Повторный запуск\n\n```bash\nmake up\n```\n\n### Остановка контейнеров\n\n```bash\nmake down\n```\n---\n\n## Демо-данные\n\nВ проекте реализованы сиды для быстрого наполнения базы данных.\n\nКоманда:\n\n```bash\nmake migrate-fresh\n```\n\nпересоздаёт базу данных и загружает:\n\n- пользователей;\n- статусы задач;\n- метки;\n- задачи со связями между пользователями, статусами и метками.\n\nПосле загрузки демо-данных можно авторизоваться под любым созданным пользователем.\n\nПример:\n\n```text\nEmail: user1@user1.user1\nPassword: user1@user1.user1\n```\n\nТакже доступны пользователи от `user1@user1.user1` до `user15@user15.user15`. Пароль каждого пользователя совпадает с его email (см. реализацию [UserSeeder.php](database/seeders/UserSeeder.php)).\n\n---\n\n## Функциональность\n\n### Аутентификация\n\n- регистрация;\n- вход и выход;\n- редактирование профиля;\n- удаление профиля.\n\n### Задачи\n\n- просмотр списка задач;\n- просмотр отдельной задачи;\n- создание задачи авторизованным пользователем;\n- редактирование задачи;\n- удаление задачи только её автором;\n- назначение исполнителя;\n- назначение статуса;\n- привязка нескольких меток;\n- фильтрация по статусу, исполнителю и меткам.\n\n### Статусы задач\n\n- просмотр списка статусов;\n- создание статуса;\n- редактирование статуса;\n- удаление статуса;\n- запрет удаления статуса, если он используется в задачах.\n\n### Метки\n\n- просмотр списка меток;\n- создание метки;\n- редактирование метки;\n- удаление метки;\n- запрет удаления метки, если она используется в задачах.\n\n---\n\n## Архитектура\n\nПроект построен по схеме:\n\n```text\nController → Service → Repository\n```\n\n- `Controllers` - принимают HTTP-запросы и возвращают ответы;\n- `Form Requests` - валидируют входящие данные;\n- `Services` - содержат логику приложения;\n- `Repositories` - отвечают за работу с данными;\n- `Models` - описывают сущности и связи Eloquent;\n- `Views` - отображают интерфейс через Blade-шаблоны.\n\n---\n\n## Проверка качества\n\nЗапуск тестов:\n\n```bash\nmake test\n```\n\nПроверка стиля кода через Laravel Pint:\n\n```bash\nmake lint\n```\n\nАвтоматическое исправление стиля:\n\n```bash\nmake lint-fix\n```\n\n---\n\n## Команды Makefile\n\n| Команда                       | Описание                                                      |\n|-------------------------------|---------------------------------------------------------------|\n| `make init`                   | Создаёт `.env` из `.env.example`, если файла ещё нет          |\n| `make build`                  | Собирает Docker-образы                                        |\n| `make up`                     | Поднимает контейнеры в фоне с пересборкой                     |\n| `make down`                   | Останавливает контейнеры и удаляет orphan-контейнеры          |\n| `make restart`                | Перезапускает окружение                                       |\n| `make logs`                   | Показывает логи контейнеров                                   |\n| `make ps`                     | Показывает список контейнеров                                 |\n| `make bash`                   | Открывает bash в PHP-контейнере                               |\n| `make composer-install`       | Устанавливает PHP-зависимости                                 |\n| `make composer-update`        | Обновляет PHP-зависимости                                     |\n| `make composer-dump-autoload` | Пересобирает autoload-карту Composer                          |\n| `make composer-validate`      | Проверяет `composer.json`                                     |\n| `make artisan`                | Запускает `php artisan` в контейнере                          |\n| `make migrate`                | Выполняет миграции                                            |\n| `make migrate-fresh`          | Пересоздаёт БД и запускает сиды                               |\n| `make seed`                   | Выполняет сиды                                                |\n| `make cache-clear`            | Безопасно очищает config / route / view / event cache         |\n| `make cache-flush`            | Очищает application cache                                     |\n| `make cache-warm`             | Прогревает config / route / view cache                        |\n| `make reset`                  | Выполняет `composer install`, `dump-autoload` и очистку кэшей |\n| `make test`                   | Запускает тесты                                               |\n| `make lint`                   | Проверяет код через Laravel Pint                              |\n| `make lint-fix`               | Исправляет стиль кода через Laravel Pint                      |\n| `make hooks-init`             | Подключает git hooks из `.githooks`                           |\n\n---\n\n## Демонстрация работы\n\nРаздел подготовлен под короткие скринкасты. Оптимально записать 3 видео: так функциональность будет показана полностью, но без перегруза.\n\n### 1. Обзор приложения и демо-данные\n\nДемонстрация работы:\n\n* Яндекс.Диск: https://disk.yandex.ru/i/2EjynfbLCvdJLg\n* Google Drive: https://drive.google.com/file/d/12uqgjVjzROM016D_HXs9Z90bKjrY5ZIe/view\n\n### 2. Работа с задачами\n\nДемонстрация работы:\n\n* Яндекс.Диск: https://disk.yandex.ru/i/a6tgYaHrw2XczA\n* Google Drive: https://drive.google.com/file/d/10bOZlNQR1_IKEaNKxV5mrP9GVdrrcmZA/view\n\n### 3. Управление справочниками и ограничения\n\nДемонстрация работы:\n\n* Яндекс.Диск: https://disk.yandex.ru/i/E4ywn8Nuf8lz3Q\n* Google Drive: https://drive.google.com/file/d/1E8MiMgj9HCZH75SezKBkM4i_d5CeASf0/view?usp=sharing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleksandr89%2Fphp-project-57","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaleksandr89%2Fphp-project-57","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleksandr89%2Fphp-project-57/lists"}