{"id":16098796,"url":"https://github.com/aladser/atomhab","last_synced_at":"2026-04-19T19:32:23.867Z","repository":{"id":256524653,"uuid":"855490482","full_name":"Aladser/atomhab","owner":"Aladser","description":"Трекер полезных привычек. DRF","archived":false,"fork":false,"pushed_at":"2024-10-01T03:35:45.000Z","size":157,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T22:43:24.576Z","etag":null,"topics":["celery","celerybeat","django","docker-compose","drf","nginx","python-dotenv"],"latest_commit_sha":null,"homepage":"","language":"Python","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/Aladser.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":"2024-09-11T00:32:48.000Z","updated_at":"2024-11-15T07:49:17.000Z","dependencies_parsed_at":"2024-10-09T18:24:39.631Z","dependency_job_id":"c67db90c-4c9a-4751-b9f4-bc66f5dd8624","html_url":"https://github.com/Aladser/atomhab","commit_stats":null,"previous_names":["aladser/atomic_habits","aladser/atomhab"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fatomhab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fatomhab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fatomhab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fatomhab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aladser","download_url":"https://codeload.github.com/Aladser/atomhab/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411193,"owners_count":20934650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["celery","celerybeat","django","docker-compose","drf","nginx","python-dotenv"],"created_at":"2024-10-09T18:24:43.067Z","updated_at":"2026-04-19T19:32:23.839Z","avatar_url":"https://github.com/Aladser.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Трекер полезных привычек (DRF)\n\nВ 2018 году Джеймс Клир написал книгу «Атомные привычки», которая посвящена приобретению новых полезных привычек и искоренению старых плохих привычек. Заказчик прочитал книгу, впечатлился и обратился к вам с запросом реализовать трекер полезных привычек.\n\nВ книге хороший пример привычки описывается как конкретное действие, которое можно уложить в одно предложение:\n\n**я буду [ДЕЙСТВИЕ] в [ВРЕМЯ] в [МЕСТО]**\n\nЗа каждую полезную привычку необходимо себя вознаграждать или сразу после делать приятную привычку. Но при этом привычка не должна расходовать на выполнение больше двух минут.\n\nПолезная привычка — это само действие, которое пользователь будет совершать и получать за его выполнение определенное вознаграждение (приятная привычка или любое другое вознаграждение).\n\nПриятная привычка — это способ вознаградить себя за выполнение полезной привычки. Приятная привычка указывается в качестве связанной для полезной привычки (в поле «Связанная привычка»).\n\nДля полноценной работы сервиса необходимо реализовать работу с отложенными задачами для напоминания о том, в какое время какие привычки необходимо выполнять.\nТребуется интегрировать сервис с мессенджером Телеграм, который будет заниматься рассылкой уведомлений.\n\n#### Настройки проекта\n+ Создать файл .env в корне проекта с настройками, аналогичными .env.example.\n+ ``python manage.py createusers`` - создать пользователей\n+ ``python manage.py seed`` - сидирование таблиц\n+ ``python manage.py collectstatic`` - сборка статических файлов\n+ JWT - авторизация\n+ Запуск отложенных задач: ``celery -A config worker -l INFO``\n+ Запуск периодических задач: ``celery -A config worker --beat --scheduler django --loglevel=info``\n+ Тест: ``coverage run --source='.' manage.py test \u0026\u0026 coverage html``\n+ Flake8 (результаты теста - папка htmlcov): ``flake8``\n+ Сборка docker-контейнера\n```\n  docker network create atomichabitnet\n  docker-compose up --build - пересобрать контейнеры\n  docker-compose up - запуск контейнеров\n```\n\n#### Документация\n+ http://127.0.0.1:8000/redoc/\n+ http://127.0.0.1:8000/swagger/\n\n#### Модели\n+ authen_drf\n    * ``User`` - пользователь: почта, id телеграм чата, телефон, аватар, токен\n+ habit\n    * ``Periodicity`` - периодичность: название, интервал\n    * ``Location``- место: название\n    * ``Action`` - действие: название, признак приятного действия\n    * ``Reward``- вознаграждение: название\n    * ``Habit``- привычка: автор, место, действие, время, периодичность, время выполнения, общедоступность\n    * ``PleasantHabit`` - приятная привычка-вознаграждение: пользователь, привычка\n    * ``UsefulHabit`` - полезная привычка: пользователь, привычка, вознаграждение, приятная привычка\n  \n#### Валидация (расположена в моделях)\n* ``UsefulHabit.clean()``\n  + исключён одновременный выбор связанной привычки и указания вознаграждения \n  + в качестве действия можно выбрать только полезное действие\n  + возможность использование указанную привычку\n* ``Habit.clean()``\n  + Время выполнения не должно превышать 120 секунд\n* В качестве связанной привычки может быть указана только приятная привычка ``PleasantHabit``\n* ``Periodicity.clean()`` - периодичность не может быть больше 7 дней\n\n#### Пагинация:\n``HabitViewSet``, ``PleasantHabitViewSet``, ``UsefulHabitViewSet``\n\n#### Права доступа\n+ ``IsAuthorPermission`` - проверка создателя объекта\n+ ``IsOwnerPermission`` - проверка создателя объекта\n+ ``IsSuperUserPermission`` - проверка суперпользователя\n\n#### Эндпоинты\n+ Пользователь (*user/*): регистрация, авторизация, CRUD\n+ Периодичность (*periodicity/*): список, добавление, удаление\n+ Местоположение (*location/*): список, добавление, удаление\n+ Действие (*action/*): список, добавление, удаление\n+ Вознаграждение (*reward/*): список, добавление, удаление\n+ Список публичных привычек (*public-habit/*)\n+ Привычка (*habit/*): CRUD\n+ Полезная привычка (*useful-habit/*): CRUD\n+ Приятная привычка (*pleasant-habit/*): CRUD\n+ Документация (*/redoc, /swagger*) \n\n#### Интеграция с телеграмом\n+ ``check_habit_time()`` - каждый час проверяет привычки, которые нужно выполнить в ближайший час и рассылает уведомления в телеграм каналы\n+ ``habit.tasks.send_message()`` - Отправляет отложенно сообщение в телеграм чат\n\n#### CORS\nНастроен на http://127.0.0.1:8000\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faladser%2Fatomhab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faladser%2Fatomhab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faladser%2Fatomhab/lists"}