Toutsu
9d4256353d
feat(web): refactor SessionStore and AuthorizedSessionService to platform-agnostic identity
...
- ISessionStore: all methods use (platform, external_user_id)
- SessionService: updated SQL queries and added UpsertDiscordUserAsync
- AuthorizedSessionService: resolves identity from HttpContext, no longer accepts telegram_id params
- SessionAccessDeniedException now accepts string externalUserId
- Added ExternalUserId/ExternalUsername to WebGroupManager and WebParticipant
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 11:08:10 +03:00
Toutsu
543fc42a6d
feat(web): add platform-agnostic identity extraction from ClaimsPrincipal
...
- TryGetPlatformIdentity returns (platform, external_user_id)
- TryGetDiscordId for Discord-specific flows
- Backward-compatible fallback for legacy Telegram auth without Platform claim
- GetAvatarUrl helper for Discord avatars
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 11:02:29 +03:00
Toutsu
bfed400b4d
feat(web): add Discord OAuth service and authorization endpoints
...
- DiscordOAuthOptions for client_id, secret, redirect_uri
- DiscordAuthService exchanges code for token and fetches user profile
- /auth/discord and /auth/discord/callback endpoints
- CreateDiscordPrincipal for cookie auth claims
- Telegram principal now includes Platform claim for forward compatibility
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 11:02:13 +03:00
Toutsu
d0ddf3fb58
fix(bot): add missing using for DirectSessionNotificationSender
Deploy Telegram Bot / build-and-push (push) Successful in 5m50s
Deploy Telegram Bot / scan-images (push) Successful in 2m29s
Deploy Telegram Bot / deploy (push) Successful in 36s
2026-05-24 07:50:05 +03:00
Toutsu
654db04d44
fix(discord): use dotnet/aspnet:10.0-noble runtime image
Deploy Telegram Bot / build-and-push (push) Failing after 42s
Deploy Telegram Bot / scan-images (push) Has been skipped
Deploy Telegram Bot / deploy (push) Has been skipped
2026-05-24 07:48:05 +03:00
Toutsu
3a94becf05
fix(bot): register DirectSessionNotificationSender in DI
Deploy Telegram Bot / build-and-push (push) Failing after 44s
Deploy Telegram Bot / scan-images (push) Has been skipped
Deploy Telegram Bot / deploy (push) Has been skipped
2026-05-24 07:48:04 +03:00
Toutsu
31d8f59f1e
ci(deploy): reduce healthcheck timeout 180s -> 40s
Deploy Telegram Bot / build-and-push (push) Failing after 48s
Deploy Telegram Bot / scan-images (push) Has been skipped
Deploy Telegram Bot / deploy (push) Has been skipped
2026-05-24 07:48:04 +03:00
Toutsu
31e08ba073
ci(deploy): reduce healthcheck timeout 180s → 40s
Deploy Telegram Bot / build-and-push (push) Successful in 34s
Deploy Telegram Bot / scan-images (push) Successful in 1m51s
Deploy Telegram Bot / deploy (push) Failing after 1m22s
2026-05-24 07:38:34 +03:00
Toutsu
7c8e14c44f
feat(ci): wait for bot/discord/web healthcheck after deploy
...
Deploy Telegram Bot / build-and-push (push) Successful in 41s
Deploy Telegram Bot / scan-images (push) Successful in 1m45s
Deploy Telegram Bot / deploy (push) Failing after 3m46s
Add loop that polls docker compose ps for healthy state.
Timeout: 180s, interval: 5s.
Workflow now fails if any service doesn't become healthy.
2026-05-24 07:33:57 +03:00
Toutsu
b57332bd5c
chore: remove AI working directories (docs/superpowers, docs/plans) from repo
...
Deploy Telegram Bot / build-and-push (push) Successful in 32s
Deploy Telegram Bot / scan-images (push) Successful in 1m45s
Deploy Telegram Bot / deploy (push) Successful in 15s
Add docs/superpowers/, docs/plans/, *.diff to .gitignore.
These directories contain implementation plans and design specs
used during agentic development; they are not needed in source control.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-21 18:58:57 +03:00
Toutsu
73714c9525
docs(adr): add ADR-003 Discord Integration Architecture
Deploy Telegram Bot / build-and-push (push) Successful in 35s
Deploy Telegram Bot / scan-images (push) Successful in 1m57s
Deploy Telegram Bot / deploy (push) Successful in 14s
2026-05-21 18:40:30 +03:00
Toutsu
8319edda38
docs(adr-002): add links to issues #30-33 in related section
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-21 18:39:29 +03:00
Toutsu
5e1f0a00ad
docs(adr-001): add Discord Gateway + NetCord decision, update Aspire services
2026-05-21 18:38:36 +03:00
Toutsu
987013974c
docs(c4): update container view for Discord worker and healthcheck
2026-05-21 18:37:22 +03:00
Toutsu
7249ca079d
docs(readme): update for v2.7.2 — Discord features, env vars, structure
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-21 18:34:46 +03:00
Toutsu
7fac5926fc
docs: add design spec for MVP2 documentation sync
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-21 18:19:08 +03:00
Toutsu
9f7b772680
Merge pull request #90 : test: добавить регрессионные тесты platform rendering и Discord MVP interactions (issue #33 )
Deploy Telegram Bot / build-and-push (push) Successful in 4m43s
Deploy Telegram Bot / scan-images (push) Successful in 1m55s
Deploy Telegram Bot / deploy (push) Successful in 16s
v2.7.2
2026-05-21 17:51:51 +03:00
Toutsu
1853a7a9c7
chore(release): bump version to 2.7.2
...
PR Checks / test-and-build (pull_request) Successful in 8m3s
Issue: #33
2026-05-21 15:36:17 +03:00
Toutsu
befb2da6a0
test: add DiscordLandingPromisesSmokeTests
...
Mirror TelegramLandingPromisesSmokeTests for Discord MVP:
- Join/leave/waitlist promotion via capacity rules
- Reschedule voting flow
- Direct message notifications on reschedule
- Dashboard batch update
Issue: #33
2026-05-21 15:34:03 +03:00
Toutsu
d29c6c0725
test: extend DiscordSessionBatchRendererTests with regression cases
...
- Confirmed status blue color
- Empty player description
- Embed URL from join link
- Inline field values for capacity/waitlist/status
Issue: #33
2026-05-21 15:21:02 +03:00
Toutsu
47b22c7401
test: extend TelegramSessionBatchRendererTests with regression cases
...
- Empty sessions
- HTML encoding in title
- Confirmed status buttons
- No join link handling
Issue: #33
2026-05-21 15:19:08 +03:00
Toutsu
b4a39c027f
test: extend SessionBatchViewBuilderTests with edge cases
...
- Empty sessions
- Confirmed status
- Null MaxPlayers
Issue: #33
2026-05-21 15:11:01 +03:00
Toutsu
dd9eab2e4a
Merge pull request #89 : chore: добавить compose/deploy wiring для Discord bot (issue #32 )
...
Deploy Telegram Bot / build-and-push (push) Successful in 4m50s
Deploy Telegram Bot / scan-images (push) Successful in 1m51s
Deploy Telegram Bot / deploy (push) Successful in 15s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
v2.7.1
2026-05-21 14:51:35 +03:00
Toutsu
492d47a863
fix(discord): add wget to Dockerfile for healthcheck
...
PR Checks / test-and-build (pull_request) Successful in 7m30s
Issue #32
2026-05-21 14:40:45 +03:00
Toutsu
fe8d5fe026
test(discord): update version assertions to 2.7.1
...
PR Checks / test-and-build (pull_request) Successful in 7m7s
Issue #32
2026-05-21 14:26:02 +03:00
Toutsu
a2fa9aaa6c
chore(release): bump version to 2.7.1
...
Issue #32
2026-05-21 14:24:17 +03:00
Toutsu
5b65ac4a2f
chore(discord): add healthcheck to compose.yaml discord service
...
Issue #32
2026-05-21 14:21:35 +03:00
Toutsu
feb3e08b63
feat(discord): register health check hosted service in Program.cs
...
Issue #32
2026-05-21 14:20:40 +03:00
Toutsu
f1d8f56fec
feat(discord): add health check hosted service
...
Issue #32
2026-05-21 14:19:50 +03:00
Toutsu
08ffc6694e
chore(discord): add DISCORD_BOT_TOKEN to .env.example
...
Issue #32
2026-05-21 14:19:02 +03:00
Toutsu
3199c48fcd
Merge pull request #88 : feat(platform): route scheduler notifications through platform messenger
Deploy Telegram Bot / build-and-push (push) Successful in 6m18s
Deploy Telegram Bot / scan-images (push) Successful in 1m44s
Deploy Telegram Bot / deploy (push) Successful in 16s
v2.7.0
2026-05-21 12:40:22 +03:00
Toutsu
2a707e4825
feat(platform): route scheduler notifications through platform messenger
PR Checks / test-and-build (pull_request) Successful in 7m9s
2026-05-21 12:30:35 +03:00
Toutsu
5dbec1a0a4
docs: add issue 31 implementation plan
2026-05-20 14:53:41 +03:00
Toutsu
7426000937
docs: add issue 31 platform notification design
2026-05-20 14:38:27 +03:00
Toutsu
0c62631ab6
Merge pull request #87 : feat(discord): implement reschedule voting via Discord interactions (issue #30 )
...
Deploy Telegram Bot / build-and-push (push) Successful in 4m37s
Deploy Telegram Bot / scan-images (push) Successful in 1m25s
Deploy Telegram Bot / deploy (push) Successful in 14s
Database:
- Add source_platform and proposed_by_external_user_id to reschedule_proposals
- Make proposed_by nullable for Discord proposals
Shared:
- Extract platform-neutral RescheduleVoteRules, RescheduleVotingInput, RescheduleDtos
- Create RescheduleVotingFinalizer for cross-platform deadline handling
Telegram:
- Refactor RescheduleVotingDeadlineService to use RescheduleVotingFinalizer
- Tag Telegram proposals with source_platform = 'Telegram'
Discord:
- /reschedule slash command with time options and deadline
- DiscordRescheduleVoteHandler for button interactions
- DiscordRescheduleVotingRenderer for embeds and buttons
- DiscordRescheduleVotingDeadlineService for automatic finalization
- DiscordSessionInteractionModule routing for vote buttons
Version: 2.5.0 -> 2.6.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
v2.6.0
2026-05-20 13:12:26 +03:00
Toutsu
db9a931ed6
fix(shared): filter due proposals by source_platform to prevent cross-platform race
...
PR Checks / test-and-build (pull_request) Successful in 6m11s
Both Telegram and Discord deadline services were querying ALL due
proposals without filtering by source_platform. If the Telegram
service reached a Discord proposal first, it finalized the DB state
but skipped message handling. The Discord service then saw status
!= 'Voting' and never updated the Discord vote message.
Fix: GetDueProposalIdsAsync now accepts a sourcePlatform parameter
and filters at the DB level. Each service only processes its own
platform's proposals.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-20 12:48:25 +03:00
Toutsu
35548a03cb
test(discord): update version assertions to 2.6.0
...
PR Checks / test-and-build (pull_request) Successful in 6m27s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-20 12:36:05 +03:00
Toutsu
dda393c372
chore: bump version to 2.6.0
...
Synchronized across Directory.Build.props, compose.yaml,
deploy.yml, and NavMenu.razor.
Bump version → 2.6.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-20 12:33:45 +03:00
Toutsu
1e9bf4ab25
feat(telegram): set source_platform = 'Telegram' on reschedule proposals
...
Ensures Telegram-initiated reschedule proposals are tagged with
source_platform so the platform-neutral finalizer can distinguish
them from Discord proposals.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-20 12:33:24 +03:00
Toutsu
690aa0272f
feat(discord): add reschedule voting deadline service
2026-05-20 12:29:33 +03:00
Toutsu
d871f2c142
feat(discord): implement SendGroupMessageAsync in DiscordPlatformMessenger
2026-05-20 12:26:31 +03:00
Toutsu
9712fe125b
feat(discord): add DiscordRescheduleVotingRenderer and replace inline helper
2026-05-20 12:23:25 +03:00
Toutsu
fdfc73ae9c
feat(discord): add reschedule vote button handler
2026-05-20 12:21:13 +03:00
Toutsu
e93e777fb3
feat(discord): add /reschedule slash command and handler
2026-05-20 12:15:03 +03:00
Toutsu
a13edf20af
feat(shared): add RescheduleVotingFinalizer and ISystemClock
2026-05-20 11:54:53 +03:00
Toutsu
fcd7de035f
refactor(shared): extract reschedule voting types to Shared
2026-05-20 11:44:57 +03:00
Toutsu
fb0c29eefe
feat(db): add platform columns to reschedule_proposals
2026-05-20 11:41:25 +03:00
Toutsu
9ff5cc4a67
Merge pull request #86 : feat(discord): enable session join leave buttons
Deploy Telegram Bot / build-and-push (push) Successful in 4m54s
Deploy Telegram Bot / scan-images (push) Successful in 1m22s
Deploy Telegram Bot / deploy (push) Successful in 15s
v2.5.0
2026-05-20 09:09:51 +03:00
Toutsu
3251846001
fix(shared): enable dapper aot for session handlers
PR Checks / test-and-build (pull_request) Successful in 6m30s
2026-05-20 09:01:34 +03:00
Toutsu
39132be4e8
feat(discord): enable session join leave buttons
...
PR Checks / test-and-build (pull_request) Successful in 6m6s
Move neutral join/leave handlers into GmRelay.Shared so Telegram and Discord share capacity, waitlist, duplicate-click, and schedule-update behavior.
Add Discord component routing for join_session and leave_session buttons with deferred ephemeral replies and serialized schedule message updates.
Bump version to 2.5.0 and update Discord docs.
Refs #29
2026-05-19 14:13:48 +03:00