Skip to content

feat: add task recurrence support#31

Open
ArtemBlokhin wants to merge 1 commit into
medods:developfrom
ArtemBlokhin:feature/task-recurrence
Open

feat: add task recurrence support#31
ArtemBlokhin wants to merge 1 commit into
medods:developfrom
ArtemBlokhin:feature/task-recurrence

Conversation

@ArtemBlokhin
Copy link
Copy Markdown

Добавлена поддержка периодических задач.

При создании серии система разворачивает правило повторяемости в набор дат и создаёт одну задачу на каждую дату в одной транзакции. Все задачи серии связаны общим recurrence_group_id. Каждый экземпляр — независимая задача со своим статусом.

Новые эндпоинты:

POST   /api/v1/tasks/recurring              — создать серию задач
DELETE /api/v1/tasks/recurring/{group_id}   — удалить все задачи серии
GET    /api/v1/tasks?recurrence_group_id=   — получить задачи конкретной серии

Поддерживаемые типы повторяемости:

daily          — каждые N дней (every_n_days, start_date, end_date)
monthly        — в указанные числа каждого месяца (days_of_month 1–30, start_date, end_date)
specific_dates — только на конкретные даты (dates: ["YYYY-MM-DD", ...])
even_odd       — по чётным или нечётным числам месяца (parity: even/odd, start_date, end_date)

Принятые решения:

  • Максимум 366 экземпляров на один запрос.
  • Числа месяца, которых нет в конкретном месяце (например, 30 февраля), пропускаются.
  • Дубликаты в specific_dates дедуплицируются.
  • scheduled_at добавлен ко всем задачам — одиночные задачи тоже могут иметь срок выполнения.
  • Статус canceled добавлен для отмены отдельных экземпляров серии.
  • Изменение правила повторяемости не поддерживается — для этого нужно удалить серию и создать новую.
  • DELETE /tasks/recurring/{group_id} физически удаляет задачи. Для мягкой отмены достаточно обновить статус каждого экземпляра через PUT /tasks/{id}.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant