Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Chore/minor bug fixes - #318

Merged
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes
Aug 23, 2025
Merged

Chore/minor bug fixes#318
coodos merged 3 commits into
mainfrom
chore/minor-bug-fixes

Conversation

@coodos

@coodoscoodos commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Control Panel: Added “Select All” and “Clear Selection” for eVaults and Platforms, with live selected counts and session persistence.
    • Tables: Bulk selection support via a select-all action.
    • eVoting API: Poll creation now accepts an optional groupId.
  • Improvements
    • Webhook and watcher reliability: In-memory deduplication, locking, and stats to reduce duplicate processing.
    • Debug endpoints: View watcher stats, list locked IDs, and clear processed IDs for easier operations.
  • Database
    • VotingObservation: Owner field is now optional (nullable).

@coderabbitai

coderabbitaiBot commented Aug 23, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Adds select-all and clear-selection handling to the control panel tables and headers, with sessionStorage persistence. Introduces bulk selection callback in Table. Implements webhook deduplication/locking and debug endpoints in the blabsy auth API, plus watcher stats/cleanup. Allows nullable owner in Cerberus entity. Poll API now accepts groupId and adds debug logs.

Changes

Cohort / File(s)Summary
Control Panel — Selection UI and Logic
infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte, infrastructure/control-panel/src/lib/ui/Table/Table.svelte, infrastructure/control-panel/src/routes/+page.svelte
Header gains props showClearSelection, onClearSelection and a Clear Selection button. Table adds onSelectAllChange and updates bulk toggle behavior. Page wires select-all/clear handlers for eVaults/Platforms, updates counts, and persists selections to sessionStorage.
Blabsy Auth API — Webhook Dedup + Debug
platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts, platforms/blabsy-w3ds-auth-api/src/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts, platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts
Webhook controller adds ID-level dedup/locking, update-vs-create path using mapping, and explicit skip 200 response. Server adds debug endpoints for watcher stats, clearing processed IDs, and listing locked IDs. Web3Adapter exposes getWatcherStats, clearAllProcessedIds. FirestoreWatcher adds in-memory processed/processing tracking, periodic cleanup, immediate processing, and stats/clear methods.
Cerberus — DB Entity
platforms/cerberus/src/database/entities/VotingObservation.ts
Makes owner column nullable (@Column("uuid", { nullable: true })).
eVoting API — Poll groupId + Logging
platforms/evoting-api/src/controllers/PollController.ts, platforms/evoting-api/src/controllers/poll.controller.ts, platforms/evoting-api/src/services/PollService.ts, platforms/evoting-api/src/services/poll.service.ts
Adds optional groupId to poll creation flow and extensive debug logs. Service signature updated (createPoll(..., groupId?)) and creation refactored to use constructed data and return saved entity.

Sequence Diagram(s)

sequenceDiagram
autonumber
actor U as User
participant H as TableCardHeader
participant T as Table
participant P as +page.svelte
participant SS as sessionStorage
U->>H: Click "Select All" checkbox
H->>T: toggleCheckAll(checked)
T->>P: onSelectAllChange(checked)
P->>P: Update in-memory selections
P->>SS: Persist selection set
U->>H: Click "Clear Selection"
H->>P: onClearSelection()
P->>P: Reset selections
P->>SS: Remove selection keys
Loading
sequenceDiagram
autonumber
participant S as External Source
participant WC as WebhookController
participant A as Web3Adapter
participant M as Mapping DB
participant DB as Local Store
S->>WC: POST /webhook { id, data }
WC->>WC: Check adapter.lockedIds
alt ID already locked
WC-->>S: 200 { success:true, skipped:true }
else
WC->>WC: Lock id
WC->>M: getLocalId(id)
alt localId exists
WC->>WC: Lock localId
WC->>DB: updateRecord(table, localId, data)
WC-->>S: 200 { success:true, updated:true }
else
WC->>DB: createRecord(table, data, id)
WC-->>S: 200 { success:true, created:true }
end
end
Loading
sequenceDiagram
autonumber
actor C as Client
participant PC as PollController
participant PS as PollService
participant R as PollRepository
C->>PC: POST /polls { title,..., groupId? }
PC->>PS: createPoll(title, mode, visibility, options, deadline, groupId)
PS->>R: create(pollData)
R-->>PS: poll entity
PS->>R: save(poll)
R-->>PS: savedPoll
PS-->>PC: savedPoll
PC-->>C: 201 savedPoll
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • prototype#299: Related table selection changes; adds per-item selection handling in the same Table component.
  • prototype#300: Modifies the same WebhookController and locking/mapping logic; overlaps with dedup/locking updates.
  • prototype#308: Adjusts control-panel route selection persistence and handlers; overlaps with current selection flow wiring.

Suggested reviewers

  • sosweetham

Poem

Hop, hop—checkboxes align,
I sweep selections, neat and fine.
Webhooks tamed, no double bite,
Watchers count the day and night.
A poll now knows its group, hooray!
I nibble logs and bound away.
(\_/) ✅


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3592a and 1737200.

📒 Files selected for processing (12)
  • infrastructure/control-panel/src/lib/fragments/TableCardHeader/TableCardHeader.svelte (2 hunks)
  • infrastructure/control-panel/src/lib/ui/Table/Table.svelte (3 hunks)
  • infrastructure/control-panel/src/routes/+page.svelte (5 hunks)
  • platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/index.ts (2 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/index.ts (1 hunks)
  • platforms/blabsy-w3ds-auth-api/src/web3adapter/watchers/firestoreWatcher.ts (4 hunks)
  • platforms/cerberus/src/database/entities/VotingObservation.ts (1 hunks)
  • platforms/evoting-api/src/controllers/PollController.ts (2 hunks)
  • platforms/evoting-api/src/controllers/poll.controller.ts (2 hunks)
  • platforms/evoting-api/src/services/PollService.ts (2 hunks)
  • platforms/evoting-api/src/services/poll.service.ts (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/minor-bug-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coodos
coodos merged commit f3ab5f3 into mainAug 23, 2025
0 of 4 checks passed
@coodos
coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
coodos added a commit that referenced this pull request Nov 4, 2025
* fix: blabsy-double message
* fix: control panel selection
* chore: eVoting fixes
@coderabbitaicoderabbitaiBot mentioned this pull request Nov 14, 2025
6 tasks
@coderabbitaicoderabbitaiBot mentioned this pull request Apr 2, 2026
6 tasks
Sign up for freeto 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

@coodos