Skip to content
Public template

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Тестовое задание: реферальная программа

Ориентир — 15 минут. Нейросети использовать можно и нужно: Claude, ChatGPT, Cursor, Copilot — что угодно, мы сами так работаем.


1. Как проходит задание

Созвона не будет — не ждите от нас приглашения. Всё делаете сами, в удобное вам время:

прочитали ТЗ → поставили инструменты → включили запись экрана → сделали задание → прислали нам ссылки (как — в конце блока 3).

Записывайте весь процесс целиком: как запускаете проект, что читаете в коде, что спрашиваете у нейросети, как проверяете результат. Можно с голосом — так ещё лучше. Нам важен ход работы, а не только итоговый код.

Перед тем как включать запись, поставьте:

Что Зачем
Программа записи экрана — OBS, Loom или встроенная в систему записать видео выполнения
Docker Desktop (скачать) и запустить его в нём поднимается проект, локальный PHP не нужен
Postman (скачать) или curl дёргать роуты и смотреть ответы
Любой редактор с PHP — VS Code, PhpStorm, Cursor смотреть и править код
Доступ к вашей нейросети пригодится

Вместо Docker подойдёт локальный PHP 8.2+ с Composer, если он у вас уже стоит.

Проверьте заранее, что Docker живой:

docker run --rm hello-world

2. Что в проекте

Мини-сервис реферальной программы MastApp. Мастер приводит другого мастера по своему коду и получает за это вознаграждение.

В базе три таблицы: masters (мастера), payments (их платежи за подписку) и referrals (кто кого привёл). Данные уже засеяны: Маша с кодом MASHA10 и четверо приведённых ею мастеров с разной историей платежей.

Есть модели, сервис ReferralService и обработчик платежей PaymentObserver.


3. Что нужно сделать

Три роута в routes/api.php:

Метод Путь Что делает
POST /api/referrals/attach принимает { "code": "MASHA10" } и закрепляет текущего мастера за владельцем кода. Повторный вызов не создаёт вторую привязку, за себя закрепиться нельзя
GET /api/referrals/my список приведённых мной мастеров: имя, дата привязки, засчитан или нет, сколько по нему начислено
GET /api/referrals/earnings сводка по деньгам: всего начислено, в ожидании, выплачено, сколько рефералов засчитано

Текущий мастер приходит в заголовке X-Master-Id, авторизация заглушена. X-Master-Id: 1 — это Маша.

Формат JSON выбираете сами. Красивая архитектура не нужна — нужно рабочее и честное.

Два правила мы намеренно не описываем словами: в какой момент реферал считается засчитанным и как считается сумма вознаграждения. Оба уже зафиксированы в коде проекта. Ваши роуты должны вести себя так, как ведёт себя система, а не так, как «обычно бывает в реферальных программах».

Как сдать

  1. Если ещё не сделали — создайте свой репозиторий из этого шаблона: кнопка Use this template → Create a new repository на странице задания на GitHub.
  2. Закоммитьте свою работу и запушьте её в свой репозиторий.
  3. Сделайте репозиторий публичным, чтобы мы могли открыть его без запроса доступа.
  4. Пришлите нам две ссылки:
    • на ваш репозиторий;
    • на видео — YouTube (доступ по ссылке), Google Drive, Яндекс Диск, Loom — куда удобно, главное чтобы открывалось без запроса доступа.

4. Запуск

Команды выполняются из папки проекта.

Шаг 1. Зависимости

docker run --rm -v "$PWD:/app" -w /app composer:2 composer install

В PowerShell вместо $PWD подставьте полный путь: -v "C:\путь\к\проекту:/app". Займёт минуту-две, качается Laravel.

Шаг 2. Конфиг и база

docker run --rm -v "$PWD:/app" -w /app php:8.3-cli sh -c "\
  cp -n .env.example .env; \
  php artisan key:generate --force; \
  touch database/database.sqlite; \
  php artisan migrate --seed --force"

Шаг 3. Сервер

docker run --rm -p 8000:8000 -v "$PWD:/app" -w /app php:8.3-cli \
  php artisan serve --host=0.0.0.0 --port=8000

Если порт 8000 занят — поменяйте на -p 8001:8000 и ходите на 8001.

Проверка, что живой:

curl http://localhost:8000/api/ping
# {"ok":true}

Шаг 4. Свои роуты

Пишете их, дёргаете Postman'ом с заголовком X-Master-Id: 1 и смотрите, сходятся ли числа.

Полезное:

php artisan migrate:fresh --seed   # пересобрать базу с нуля
php artisan route:list             # посмотреть свои роуты
php artisan tinker                 # покопаться в данных руками

Через Docker — та же команда внутри docker run --rm -v "$PWD:/app" -w /app php:8.3-cli ...

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages