← Назад к вопросам
Расскажи о процессе начала работы на новой задачей
2.0 Middle🔥 101 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Процесс начала работы над новой задачей
От получения задачи до первого коммита нужно пройти несколько этапов. Я работаю систематически, чтобы избежать ошибок и пустой траты времени.
Этап 1: Понимание задачи (10-15 минут)
1.1. Прочитаю требование
Одна задача может содержать:
- Описание: что нужно сделать
- Acceptance Criteria: критерии принятия
- Техническое задание: как реализовать
- Ограничения: что нельзя делать
1.2. Выявлю неясности
# Для каждого требования спрашу себя:
"✅ Ясно ли это?" - Если нет, спрошу PM
"✅ Критичное ли?" - Это основная функция или бонус?
"✅ Когда нужно?" - Дата дедлайна ясна?
"✅ Кто будет тестить?" - QA, PM или оба?
1.3. Разложу задачу на подзадачи
Например, "Добавить авторизацию через Google":
┌─ Исследование (1-2 часа)
│ ├─ Прочитать документацию Google OAuth 2.0
│ ├─ Проверить существующие решения (django-allauth)
│ └─ Оценить, сколько времени это займёт
│
├─ Разработка backend (4-6 часов)
│ ├─ Подстроить Google OAuth
│ ├─ Создать endpoint для авторизации
│ ├─ Обработать ошибки
│ └─ Написать тесты (unit + integration)
│
├─ Разработка frontend (3-4 часа)
│ ├─ Добавить кнопку "Sign in with Google"
│ ├─ Обработать response
│ └─ Обновить UI в зависимости от статуса
│
└─ Тестирование (2-3 часа)
├─ Ручное тестирование
├─ Проверка на мобильных
└─ Edge cases (no internet, user cancels, etc.)
Всего: ~14-20 часов работы
Этап 2: Исследование кодовой базы (20-30 минут)
2.1. Изучу похожие функции
# Если добавляю авторизацию, ищу существующую:
grep -r "authenticate" backend/
# Найду места, где уже есть авторизация
# Стилей кода, паттернов, структуры
# Посмотрю на существующие API endpoints
find backend/ -name "views.py" -o -name "*api*"
2.2. Проверю используемые библиотеки
# requirements.txt или pyproject.toml
cat requirements.txt | grep -i auth
# django-rest-framework-simplejwt
# django-allauth
# djangorestframework
# Это даст мне понимание, что уже есть
2.3. Посмотрю на структуру проекта
backend/
├── core/
│ ├── models.py (где User модель?)
│ ├── views.py (как они структурированы?)
│ └── serializers.py (какой стиль сериализаторов?)
├── auth/
│ ├── views.py (есть ли уже авторизация?)
│ └── permissions.py (кастомные permissions?)
├── utils/
│ ├── decorators.py (используются ли декораторы?)
│ └── helpers.py (общие функции?)
Этап 3: Планирование (30-45 минут)
3.1. Создам план работы
# План в виде TODO листа:
[ ] Исследование
[ ] Изучить Google OAuth документацию
[ ] Выбрать библиотеку (google-auth, django-allauth)
[ ] Посмотреть примеры
[ ] Backend
[ ] Настроить settings.py (CLIENT_ID, SECRET)
[ ] Создать endpoint POST /api/v1/auth/google
[ ] Валидировать token от Google
[ ] Создать или получить User
[ ] Вернуть JWT токен
[ ] Написать unit тесты
[ ] Написать integration тесты
[ ] Frontend
[ ] Установить @react-oauth/google
[ ] Добавить GoogleLogin компонент
[ ] Обработать успешный login
[ ] Обработать ошибки
[ ] Сохранить токен в localStorage
[ ] Добавить E2E тест
[ ] QA
[ ] Ручное тестирование
[ ] Проверка на мобильных
[ ] Edge cases
3.2. Оценю сложность
# Оценка по Фибоначчи: 1, 2, 3, 5, 8, 13, 21
Эта задача = 8 стори-поинтов
# Потому что:
# - Нужно интегрировать с внешним API (Google)
# - Нужна как backend, так и frontend часть
# - Требуется тестирование
# - Может быть много edge cases
3.3. Проверю зависимости
# Нужно ли что-то сделать перед этой задачей?
Зависимости:
- ✅ User модель уже существует
- ✅ JWT авторизация уже настроена
- ❌ Google OAuth не настроена в settings.py
- ⚠️ Frontend не имеет UI для button'а
Этап 4: Окружение (15-20 минут)
4.1. Создам ветку
# Стандартное именование веток
git checkout -b feature/google-oauth
# Или если это баг
git checkout -b fix/auth-bug
# Или если это улучшение
git checkout -b improvement/faster-login
4.2. Обновлю зависимости
# Если нужны новые библиотеки
pip install google-auth
pip install google-auth-oauthlib
pip install google-auth-httplib2
# Добавлю в requirements.txt
pip freeze | grep google >> requirements.txt
4.3. Проверю окружение
# Все ли работает?
make test
make lint
# Запущу приложение
make run
# Проверю, что базовая функциональность работает
curl http://localhost:8000/api/v1/health
Этап 5: Начало разработки (TDD подход)
5.1. Напишу тест ДО кода
# tests/test_auth.py
import pytest
from django.test import Client
from unittest.mock import patch, MagicMock
class TestGoogleAuth:
"""Тесты для Google OAuth"""
@pytest.mark.django_db
def test_google_login_creates_user(self):
"""Тест: первый логин через Google создаёт пользователя"""
# Arrange (подготовка)
google_token = "mock_google_token"
mock_user_data = {
"email": "john@gmail.com",
"name": "John Doe"
}
with patch('app.auth.verify_google_token') as mock_verify:
mock_verify.return_value = mock_user_data
# Act (выполнение)
client = Client()
response = client.post(
'/api/v1/auth/google',
{'token': google_token},
content_type='application/json'
)
# Assert (проверка)
assert response.status_code == 200
assert 'jwt_token' in response.json()
# Проверим, что пользователь создан
from myapp.models import User
user = User.objects.get(email='john@gmail.com')
assert user.email == 'john@gmail.com'
@pytest.mark.django_db
def test_google_login_with_invalid_token(self):
"""Тест: неправильный токен возвращает ошибку"""
client = Client()
response = client.post(
'/api/v1/auth/google',
{'token': 'invalid_token'},
content_type='application/json'
)
assert response.status_code == 400
assert 'error' in response.json()
5.2. Напишу минимальный код для прохождения теста
# app/auth/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from google.auth.transport import requests
from google.oauth2 import id_token
class GoogleAuthView(APIView):
def post(self, request):
"""Авторизация через Google"""
token = request.data.get('token')
if not token:
return Response(
{'error': 'Token required'},
status=status.HTTP_400_BAD_REQUEST
)
try:
# Проверяем токен у Google
idinfo = id_token.verify_oauth2_token(
token,
requests.Request(),
settings.GOOGLE_CLIENT_ID
)
# Получаем или создаём пользователя
user, created = User.objects.get_or_create(
email=idinfo['email'],
defaults={'first_name': idinfo.get('given_name', '')}
)
# Генерируем JWT токен
refresh = RefreshToken.for_user(user)
return Response({
'jwt_token': str(refresh.access_token),
'user_id': user.id
})
except ValueError:
return Response(
{'error': 'Invalid token'},
status=status.HTTP_400_BAD_REQUEST
)
Этап 6: Разработка по TDD
# 1. RED: написал тест, он падает
pytest tests/test_auth.py -v
# FAILED test_google_login_creates_user
# 2. GREEN: написал минимальный код
pytest tests/test_auth.py -v
# PASSED test_google_login_creates_user
# 3. REFACTOR: улучшаю код, тесты всё ещё проходят
# Делаю код чище, добавляю обработку edge cases
# Повторяю 1-3 для каждого требования
Этап 7: Проверка качества
# Линтинг
make lint
# Проверка на ошибки стиля (flake8, black, isort)
# Тесты
make test
# Проверка покрытия >= 80%
# Типизация
mypy app/auth/
# Проверка типов
# Безопасность
bandit app/auth/views.py
# Проверка на уязвимости
Этап 8: Code Review
8.1. Самопроверка
# Перед отправкой на review, спрошу себя:
[ ] Код читаем? (понятные имена, комментарии)
[ ] Нет дублирования? (DRY принцип)
[ ] Обработаны ошибки? (try-catch, валидация)
[ ] Есть тесты? (unit + integration)
[ ] Тесты проходят? (100% зелено)
[ ] Покрытие >= 80%?
[ ] Нет console.log / print?
[ ] Документация обновлена?
[ ] Performance приемлемый?
8.2. Создам PR
Название PR:
"feat: Add Google OAuth authentication"
Описание:
## Changes
- Добавлен endpoint для авторизации через Google
- Реализована валидация Google токена
- Автоматическое создание User при первом логине
- Возврат JWT токена для дальнейших запросов
## Testing
- Все unit тесты проходят
- Добавлены 5 новых тестов
- Покрытие: 84%
## Related issue
Closes #123
Этап 9: Обратная связь и итерации
# Reviewer может попросить изменения:
❌ "Нужна обработка случая, когда email меняется"
✅ Добавлю
❌ "Нужен более информативный error message"
✅ Изменю
❌ "Покрытие тестами меньше 80%"
✅ Напишу ещё тесты
# После исправлений:
git commit --amend
git push --force-with-lease
Чек-лист перед началом работы
- Прочитал всё требование до конца
- Спросил неясные моменты
- Разложил задачу на подзадачи
- Изучил похожий код в проекте
- Создал план работы
- Оценил сложность и время
- Создал ветку
- Обновил окружение
- Проверил, что всё работает
- Написал тесты
- Запустил линтинг и тесты
- Готов к разработке
Общие рекомендации
✅ Делай так:
- Работай небольшими итерациями
- Пиши тесты ДО кода
- Часто коммитить (каждые 30-60 минут)
- Спрашивай, если неясно
- Читай существующий код перед своим
❌ Не делай так:
- Не начинай кодить без плана
- Не пропускай тесты
- Не коммитай всё сразу в конце дня
- Не стесняйся спрашивать
- Не копируй код без понимания