В 2018 году Джеймс Клир написал книгу «Атомные привычки», которая посвящена приобретению новых полезных привычек и искоренению старых плохих привычек. Заказчик прочитал книгу, впечатлился и обратился к вам с запросом реализовать трекер полезных привычек.
В книге хороший пример привычки описывается как конкретное действие, которое можно уложить в одно предложение:
я буду [ДЕЙСТВИЕ] в [ВРЕМЯ] в [МЕСТО]
За каждую полезную привычку необходимо себя вознаграждать или сразу после делать приятную привычку. Но при этом привычка не должна расходовать на выполнение больше двух минут.
Полезная привычка — это само действие, которое пользователь будет совершать и получать за его выполнение определенное вознаграждение (приятная привычка или любое другое вознаграждение).
Приятная привычка — это способ вознаградить себя за выполнение полезной привычки. Приятная привычка указывается в качестве связанной для полезной привычки (в поле «Связанная привычка»).
Для полноценной работы сервиса необходимо реализовать работу с отложенными задачами для напоминания о том, в какое время какие привычки необходимо выполнять. Требуется интегрировать сервис с мессенджером Телеграм, который будет заниматься рассылкой уведомлений.
- Создать файл .env в корне проекта с настройками, аналогичными .env.example.
python manage.py createusers
- создать пользователейpython manage.py seed
- сидирование таблицpython manage.py collectstatic
- сборка статических файлов- JWT - авторизация
- Запуск отложенных задач:
celery -A config worker -l INFO
- Запуск периодических задач:
celery -A config worker --beat --scheduler django --loglevel=info
- Тест:
coverage run --source='.' manage.py test && coverage html
- Flake8 (результаты теста - папка htmlcov):
flake8
- Сборка docker-контейнера
docker network create atomichabitnet
docker-compose up --build - пересобрать контейнеры
docker-compose up - запуск контейнеров
- authen_drf
User
- пользователь: почта, id телеграм чата, телефон, аватар, токен
- habit
Periodicity
- периодичность: название, интервалLocation
- место: названиеAction
- действие: название, признак приятного действияReward
- вознаграждение: названиеHabit
- привычка: автор, место, действие, время, периодичность, время выполнения, общедоступностьPleasantHabit
- приятная привычка-вознаграждение: пользователь, привычкаUsefulHabit
- полезная привычка: пользователь, привычка, вознаграждение, приятная привычка
UsefulHabit.clean()
- исключён одновременный выбор связанной привычки и указания вознаграждения
- в качестве действия можно выбрать только полезное действие
- возможность использование указанную привычку
Habit.clean()
- Время выполнения не должно превышать 120 секунд
- В качестве связанной привычки может быть указана только приятная привычка
PleasantHabit
Periodicity.clean()
- периодичность не может быть больше 7 дней
HabitViewSet
, PleasantHabitViewSet
, UsefulHabitViewSet
IsAuthorPermission
- проверка создателя объектаIsOwnerPermission
- проверка создателя объектаIsSuperUserPermission
- проверка суперпользователя
- Пользователь (user/): регистрация, авторизация, CRUD
- Периодичность (periodicity/): список, добавление, удаление
- Местоположение (location/): список, добавление, удаление
- Действие (action/): список, добавление, удаление
- Вознаграждение (reward/): список, добавление, удаление
- Список публичных привычек (public-habit/)
- Привычка (habit/): CRUD
- Полезная привычка (useful-habit/): CRUD
- Приятная привычка (pleasant-habit/): CRUD
- Документация (/redoc, /swagger)
check_habit_time()
- каждый час проверяет привычки, которые нужно выполнить в ближайший час и рассылает уведомления в телеграм каналыhabit.tasks.send_message()
- Отправляет отложенно сообщение в телеграм чат
Настроен на http://127.0.0.1:8000