{"id":26414334,"url":"https://github.com/ath31st/bug_tracker","last_synced_at":"2026-04-08T20:52:02.041Z","repository":{"id":282961045,"uuid":"950105277","full_name":"ath31st/bug_tracker","owner":"ath31st","description":"Project Bug Tracker, a test task for a full-stack developer.","archived":false,"fork":false,"pushed_at":"2025-03-25T18:41:51.000Z","size":2135,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-25T19:35:15.347Z","etag":null,"topics":["alembic","docker-compose","dockerfile","flask","flask-sqlalchemy","full-stack","jwt","marshmallow","nginx","pinia","postgresql","python","sqlalchemy","typescript","vite","vue3","vuetify"],"latest_commit_sha":null,"homepage":"","language":"Vue","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/ath31st.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}},"created_at":"2025-03-17T16:31:12.000Z","updated_at":"2025-03-25T18:41:54.000Z","dependencies_parsed_at":"2025-03-25T19:29:36.986Z","dependency_job_id":null,"html_url":"https://github.com/ath31st/bug_tracker","commit_stats":null,"previous_names":["ath31st/bug_tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ath31st/bug_tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fbug_tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fbug_tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fbug_tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fbug_tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ath31st","download_url":"https://codeload.github.com/ath31st/bug_tracker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fbug_tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31573788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["alembic","docker-compose","dockerfile","flask","flask-sqlalchemy","full-stack","jwt","marshmallow","nginx","pinia","postgresql","python","sqlalchemy","typescript","vite","vue3","vuetify"],"created_at":"2025-03-17T23:58:41.326Z","updated_at":"2026-04-08T20:52:02.033Z","avatar_url":"https://github.com/ath31st.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bug Tracker — Тестовое задание на full-stack разработчика\n\n## Оглавление\n\n1. [О проекте](#о-проекте)\n2. [Технологический стек](#технологический-стек)\n3. [Реализованный функционал](#реализованный-функционал)\n4. [Дата выполнения](#дата-выполнения)\n5. [Скриншоты](#скриншоты)\n6. [Видео демонстрация](#видео-демонстрация)\n7. [Как развернуть/запустить](#как-развернутьзапустить)\n8. [Итоги](#итоги)\n\n## О проекте\n\nМинималистичный баг-трекер, разработанный как тестовое задание для позиции full-stack разработчика.\nОсновная цель — продемонстрировать навыки работы с современными технологиями фронтенда и бэкенда,\nсоздав простое, но функциональное приложение для фиксирования и отслеживания процесса исправления\nбагов.\n\nЗадание включало следующие требования:\n\n- **Бэкенд**: Python, Flask, PostgreSQL, SQLAlchemy\n- **Фронтенд**: TypeScript, Vue 3, Vuetify\n- **Функционал**: Создание, просмотр и управление задачами (багами)\n\nПроект реализован с акцентом на минимализм, удобство интерфейса и реализацию архитектурных подходов,\nчто делает его расширяемым и поддерживаемым.\n\n## Технологический стек\n\n### Backend\n\n- **Python** — Основной язык разработки\n- **Flask** — Веб-фреймворк для создания REST API\n- **PostgreSQL** — Реляционная база данных для хранения задач\n- **SQLAlchemy** — ORM для взаимодействия с базой данных\n- **Flask-JWT-Extended** — Реализация авторизации с использованием JWT-токенов\n- **Marshmallow** — Сериализация и валидация данных\n- **Alembic** — Инструмент для управления миграциями базы данных\n\n### Frontend\n\n- **Vue 3** — Прогрессивный фреймворк для построения веб интерфейса\n- **TypeScript** — Статическая типизация для повышения надёжности кодовой базы\n- **Vuetify** — Библиотека Material Design компонентов для быстрой разработки UI\n- **Pinia** — Управление состояниями приложения\n- **Vue Router** — Навигация между страницами\n- **Vite** — Инструмент сборки и разработки\n\n## Реализованный функционал\n\n- Регистрация новых пользователей\n- Авторизация пользователей\n- Создание новых задач с указанием заголовка, описания и приоритета\n- Редактирование существующих задач с изменением заголовка, описания, приоритета и статуса\n- Просмотр списка всех задач с сортировкой по приоритету, статусу и дате создания\n- Фильтрация списка задач по автору и исполнителю\n- Создание, редактирование и удаление комментариев к задачам\n- Минималистичный и интуитивно понятный интерфейс\n\n## Дата выполнения\n\nМарт 2025\n\n## Скриншоты\n\n\u003cdetails\u003e\n\u003csummary\u003eНажмите, чтобы открыть спойлер\u003c/summary\u003e\n\nСтраница регистрации\n\n![image info](images/i_02.jpg)\n\nСтраница авторизации\n\n![image info](images/i_01.jpg)\n\nОбщий вид списка задач\n\n![image info](images/i_03.jpg)\n\nСтраница создания задачи\n\n![image info](images/i_04.jpg)\n\nФильтр списка задач по исполнителю и сортировка по приоритету\n\n![image info](images/i_05.jpg)\n\nМодальное окно с информацией о пользователе\n\n![image info](images/i_06.jpg)\n\nСтраница \"О проекте\"\n\n![image info](images/i_07.jpg)\n\nСтраница задачи в работе с комментариями\n\n![image info](images/i_08.jpg)\n\nРедактирование задачи автором\n\n![image info](images/i_09.jpg)\n\nСтраница новой задачи без исполнителя и без комментариев\n\n![image info](images/i_10.jpg)\n\n\u003c/details\u003e\n\n## Видео демонстрация\n\n[Демонстрация](https://github.com/user-attachments/assets/9e239bad-f13a-420d-a146-b7a4dab2f43a)\n\n## Как развернуть/запустить\n\nДля запуска проекта необходимо выполнить следующие шаги:\n\n1. Клонируйте репозиторий с помощью команды:\n\n   ```bash\n   git clone https://github.com/ath31st/bug_tracker.git\n\n   ```\n\n2. Перейдите в директорию проекта:\n\n   ```bash\n   cd bug_tracker\n\n   ```\n\n3. Подготовьте три файла `.env` с настройками окружения:\n\n   Все значения указаны для наглядности и в качестве примера, вы можете использовать свои\n   значения.\n\n   - В корневой директории создайте файл `.env` со следующим содержимым:\n\n     ```\n     DB_USER=postgres\n     DB_PASSWORD=postgres\n     DB_NAME=bt_db\n     DB_OUTER_PORT=5434\n\n     CLIENT_INNER_PORT=80\n     SERVER_OUTER_PORT=5010\n\n     ```\n\n   - В директории `./server/` создайте файл `.env` со следующим содержимым:\n\n     ```\n     DATABASE_URL=postgresql+psycopg2://postgres:postgres@db:5432/bt_db\n     SECRET_KEY=oooof_very_secret_key\n     JWT_SECRET_KEY=oooof_very_jwt_secret_key\n     JWT_ACCESS_TOKEN_EXPIRES=3600\n     JWT_REFRESH_TOKEN_EXPIRES=604800\n\n     ```\n\n   - В директории `./client/` создайте файл `.env` со следующим содержимым:\n     ```\n     VITE_PUBLIC_API_URL=http://айпи_адрес_вашего_пк_или_сервера:5010/api/v1\n     ```\n\n4. Убедитесь, что у вас установлен Docker и Docker Compose.\n\n   ```bash\n   docker --version\n   ```\n\n   ```bash\n   docker-compose --version\n\n   ```\n\n5. Выполните команду для сборки и запуска контейнеров в фоновом режиме:\n\n   ```bash\n   docker-compose up -d\n\n   ```\n\n6. Дождитесь завершения развертывания контейнеров.\n   Это может занять несколько минут, в зависимости от вашей системы.\n\n7. Откройте браузер и перейдите по адресу:\n   http://localhost:80\n\nПосле выполнения этих шагов приложение будет доступно для использования.\nУбедитесь, что указанные порты (`5434` для базы данных, `5010` для сервера и `80` для клиента) не\nзаняты другими процессами на вашем пк или сервере.\n\n## Итоги\n\nВ рамках тестового задания был создан полноценный баг-трекер, который отвечает указанным\nтребованиям.\nПроект демонстрирует:\n\n- Умение работать с Flask и SQLAlchemy для создания REST API\n- Навыки настройки PostgreSQL и миграций через Alembic\n- Опыт разработки интерфейсов с использованием Vue 3, TypeScript и Vuetify\n- Понимание интеграции фронтенда и бэкенда через API\n- Применение минималистичного подхода к дизайну и архитектуре\n\nКод структурирован, следует принципам SOLID, DRY, KISS и готов к дальнейшему расширению\nфункционала (например, добавлению ролей пользователей, рефреш-токенов).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fath31st%2Fbug_tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fath31st%2Fbug_tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fath31st%2Fbug_tracker/lists"}