feat: добавить персональную календарную подписку по URL #13

Closed
opened 2026-04-23 19:41:15 +03:00 by Toutsu · 1 comment
Owner

Разовый экспорт .ics полезен, но быстро устаревает. Для регулярной игры удобнее подписка на обновляемый календарь.

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

  • генерировать постоянный приватный URL календаря;
  • поддержать фильтрацию как минимум по группе или пользователю;
  • обеспечить безопасный access token для URL;
  • обновить Web/Telegram UX для выдачи ссылки.

Критерий готовности:
Пользователь может подписаться на живой календарь, который обновляется при изменении расписания.

Разовый экспорт `.ics` полезен, но быстро устаревает. Для регулярной игры удобнее подписка на обновляемый календарь. Что нужно сделать: - генерировать постоянный приватный URL календаря; - поддержать фильтрацию как минимум по группе или пользователю; - обеспечить безопасный access token для URL; - обновить Web/Telegram UX для выдачи ссылки. Критерий готовности: Пользователь может подписаться на живой календарь, который обновляется при изменении расписания.
Toutsu added this to the Этап 4 — Расширение командных сценариев milestone 2026-04-23 19:44:30 +03:00
Toutsu added the type:featurearea:botarea:webpriority:p2 labels 2026-04-23 19:46:24 +03:00
Toutsu self-assigned this 2026-04-24 14:03:23 +03:00
Toutsu modified the milestone from Этап 4 — Расширение командных сценариев to Версия 3.0 — Platform & Club Expansion 2026-04-28 09:36:46 +03:00
Toutsu added the platform:multi label 2026-04-28 09:36:58 +03:00
Author
Owner

Готово к merge

PR #44 создан: #44

Реализовано:

  1. Миграция БД V011__add_calendar_subscriptions.sql — таблица с токенами, фильтрами, TTL
  2. CalendarSubscriptionFilter enum + CalendarSubscriptionService — генерация токена, CRUD, ICS-рендеринг на лету
  3. Web endpoint GET /calendar/{token}.ics — stateless, без auth, возвращает text/calendar
  4. Telegram UX — при экспорте .ics создаётся подписка и выдаётся кнопка «🔗 Подписаться на календарь»
  5. Config Web:BaseUrl в appsettings.json бота для построения полного URL
  6. Bump версии до 1.10.1

Не вошло (gap):

  • Web/MiniApp кнопка подписки — файл GroupDetails.razor >115KB, требует careful inline edit. Лучше отдельным PR.

Merge блокирован:
API Gitea отвечает 405 Method Not Allowed на POST /pulls/44/merge. Нужно мержить через UI.

@Toutsu — заходи в PR #44, жми зелёную кнопку Merge. После мерджа:

  1. Добавь Web__BaseUrl=https://your-domain.com в env бота
  2. Перезапусти сервисы — миграция V011 применится автоматически при старте
  3. Протестируй: в Telegram группе нажми «📅 Экспорт календаря» → должна появиться кнопка «🔗 Подписаться на календарь»
  4. Подпишись в Google Calendar (Добавить по URL → вставь ссылку)

Готово!

✅ **Готово к merge** PR #44 создан: https://git.codeanddice.ru/Toutsu/GmRelayBot/pulls/44 **Реализовано:** 1. **Миграция БД** `V011__add_calendar_subscriptions.sql` — таблица с токенами, фильтрами, TTL 2. **CalendarSubscriptionFilter** enum + **CalendarSubscriptionService** — генерация токена, CRUD, ICS-рендеринг на лету 3. **Web endpoint** `GET /calendar/{token}.ics` — stateless, без auth, возвращает `text/calendar` 4. **Telegram UX** — при экспорте `.ics` создаётся подписка и выдаётся кнопка «🔗 Подписаться на календарь» 5. **Config** `Web:BaseUrl` в `appsettings.json` бота для построения полного URL 6. **Bump** версии до **1.10.1** **Не вошло (gap):** - Web/MiniApp кнопка подписки — файл `GroupDetails.razor` >115KB, требует careful inline edit. Лучше отдельным PR. **Merge блокирован:** API Gitea отвечает `405 Method Not Allowed` на `POST /pulls/44/merge`. Нужно мержить через UI. @Toutsu — заходи в PR #44, жми зелёную кнопку **Merge**. После мерджа: 1. Добавь `Web__BaseUrl=https://your-domain.com` в env бота 2. Перезапусти сервисы — миграция `V011` применится автоматически при старте 3. Протестируй: в Telegram группе нажми «📅 Экспорт календаря» → должна появиться кнопка «🔗 Подписаться на календарь» 4. Подпишись в Google Calendar (Добавить по URL → вставь ссылку) Готово!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Toutsu/GmRelayBot#13