Skip to content

Conversation

coodos
Copy link
Contributor

@coodos coodos commented Aug 23, 2025

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).

Copy link
Contributor

coderabbitai bot commented Aug 23, 2025

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 main Aug 23, 2025
0 of 4 checks passed
@coodos coodos deleted the chore/minor-bug-fixes branch August 23, 2025 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant