Skip to content

feat(api): Подарить всем друзьям одним запросом - #255

Draft
Kennix88 wants to merge 4 commits into
devfrom
task/T-0047
Draft

Kennix88 wants to merge 4 commits into
devfrom
task/T-0047

Conversation

@Kennix88

@Kennix88 Kennix88 commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Задача: tasks/T-0047-gift-all-friends.md

Что сделано

  • friends.repository.ts — sendGiftsToAll(from): один INSERT … SELECT … FROM friendship … ON CONFLICT DO NOTHING RETURNING to_account_id, игровые сутки — тем же TODAY, что у одиночного подарка. Вернётся только то, что вставил именно этот запрос.
  • friends.service.ts — sendGiftsToAll(actor): ограничение friend_gifts закрывает маршрут (та же ошибка), уведомление friend_gift каждому получателю (не больше FRIENDS_RULES.maxFriends), один лог friend_gifts_sent_all.
  • friends.controller.ts — POST /api/v1/friends/gifts/send-all → { data: { sent } }, лимит FRIENDS_LIMITS.change.
  • test/helpers/memory-friends.ts — то же правило на данных в памяти.
  • Тесты: friends.test.ts (на подмене: три друга и одному уже подарено → sent: 2 и уведомления двоим; повтор → 0 и без новых уведомлений; следующие сутки; нет друзей; не друзьям — нет; ограничение — обе формы отказа; HTTP: 401, { sent: 2 }, повтор { sent: 0 }) и friends.integration.test.ts (живой Postgres: ровно те, кому не дарили; не друзьям строк нет; дружба в обоих направлениях пары; две параллельные «Подарить всем» дали по строке на друга и по одному получателю в сумме).
  • docs/35-stage4-plan.md — §3.8 и описание WP14 (часть 2).

Критерии приёмки

  • POST /api/v1/friends/gifts/send-all дарит каждому другу, кому сегодня не дарили, и отвечает числом. Повтор — 0.
  • Ограничение подарков закрывает и этот маршрут.
  • Параллельные запросы не дарят дважды.
  • Гейт и pnpm docs:check зелёные (см. ниже).

Проверка

  • Поднял локальный Postgres 16 на временном порту, применил миграции prisma migrate deploy и прогнал весь pnpm test с TEST_DATABASE_URL: 321 файл, 3204 теста прошли, в том числе интеграционный friends.integration.test.ts (8 тестов, среди них новый на живой базе). Без базы — пропуск, как обычно.
  • pnpm lint, pnpm docs:check, pnpm task check, tsc -b, tsc -p tsconfig.tests.json — без ошибок.
  • Не прогонялись pnpm build и pnpm budget: Node 22.22.0 при engines ≥ 22.22.3 — pnpm -r не стартует; изменения только на бэкенде, бандл клиента не затронут. Подтвердит CI.

Метка: release: minor.

Сводка для команды

📋 СВОДКА: В DEV ВЛИТ PR #255 — ПОДАРИТЬ ВСЕМ ДРУЗЬЯМ

На сервере появился «Подарить всем»: подарок каждому другу, кому сегодня ещё не дарили, одним запросом. Кнопка на экране друзей придёт следующей задачей.

🎁 Как устроено

• правила те же, что у подарка одному: раз в сутки каждому, ограничение подарков закрывает и это
• одним запросом к базе — два нажатия подряд не подарят дважды

🤖 Generated with Claude Code

https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL

POST /api/v1/friends/gifts/send-all дарит каждому другу, кому сегодня не
дарили, одним INSERT … SELECT … ON CONFLICT DO NOTHING; повтор в те же
сутки — sent: 0. Правила те же, что у подарка одному: ограничение
friend_gifts, уникальность подарка, уведомление получателю.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL
@Kennix88 Kennix88 added the release: minor Новая возможность, новый контент label Oct 10, 2026 — with Claude

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release: minor Новая возможность, новый контент

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants