Skip to content

Conversation

@blackheaven
Copy link
Contributor

@blackheaven blackheaven commented Nov 24, 2025

https://wearezeta.atlassian.net/browse/WPB-21964

Checklist

  • Add a new entry in an appropriate subdirectory of changelog.d
  • Read and follow the PR guidelines

@zebot zebot added the ok-to-test Approved for running tests in CI, overrides not-ok-to-test if both labels exist label Nov 24, 2025
@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch from ba6264c to 425ab2d Compare November 24, 2025 15:10
@blackheaven blackheaven marked this pull request as ready for review November 25, 2025 07:21
@blackheaven blackheaven requested review from a team as code owners November 25, 2025 07:21
then pure False
else do
-- Add invited email
Store.addInvitedEmail meetingId email
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@akshaymankar Can I send e-mails in an upcoming PR?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@akshaymankar do we have the template?

Copy link
Member

@akshaymankar akshaymankar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are more questions about this in the RFC. Let's wait before implementation.

@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch from 63d6831 to 0c273b7 Compare November 26, 2025 18:29
@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch 2 times, most recently from ff9a9f2 to 221a3b5 Compare December 8, 2025 20:39
@blackheaven
Copy link
Contributor Author

@battermann I have reworked the flags

@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch from e360e1b to d063175 Compare December 10, 2025 12:34
@battermann battermann requested a review from Copilot December 12, 2025 15:25
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a comprehensive meetings feature for Wire Server, allowing users to create, manage, and schedule meetings with email invitations. The implementation includes REST API endpoints, PostgreSQL-based persistence, background cleanup workers, and two feature flags to control access and premium features.

Key Changes

  • API Endpoints: Seven new REST endpoints for meeting CRUD operations and invitation management
  • Database Schema: New PostgreSQL meetings table with indexes for efficient querying
  • Feature Flags: Two new flags (meeting and meetingPremium) to control feature access and distinguish trial from premium meetings
  • Background Worker: Automated cleanup of old meetings with configurable retention policies

Reviewed changes

Copilot reviewed 43 out of 43 changed files in this pull request and generated 31 comments.

Show a summary per file
File Description
libs/wire-api/src/Wire/API/Meeting.hs Core meeting data types (Meeting, NewMeeting, UpdateMeeting, Recurrence) with JSON schema definitions
libs/wire-api/src/Wire/API/Routes/Public/Galley/Meetings.hs Public API route definitions for the seven meeting endpoints
libs/wire-api/src/Wire/API/Error/Galley.hs New MeetingNotFound error type for 404 responses
libs/wire-api/src/Wire/API/Conversation.hs Added MeetingConversation to GroupConvType enum
libs/wire-api/src/Wire/API/Team/Feature.hs Defined MeetingConfig and MeetingPremiumConfig feature flags
libs/wire-subsystems/src/Wire/MeetingsStore.hs Data access layer interface for meeting persistence operations
libs/wire-subsystems/src/Wire/MeetingsStore/Postgres.hs PostgreSQL implementation of meetings store with parameterized queries
libs/wire-subsystems/src/Wire/MeetingsSubsystem.hs Business logic interface for meeting operations
libs/wire-subsystems/src/Wire/MeetingsSubsystem/Interpreter.hs Implementation of meeting business logic including authorization
services/galley/src/Galley/API/Meetings.hs API handlers with feature flag checks and date validation
services/galley/src/Galley/API/Public/Meetings.hs Public API integration mapping routes to handlers
services/galley/src/Galley/Effects.hs Added MeetingsSubsystem and MeetingsStore to effect stack
services/galley/src/Galley/App.hs Wired up meeting interpreters in the application
services/galley/src/Galley/API/Create.hs Blocked MeetingConversation creation through normal conversation API
services/galley/src/Galley/API/Util.hs Refactored notification helpers for conversation events
services/galley/postgresql-migrations/001_meetings.sql Database migration creating meetings table with constraints and indexes
postgres-schema.sql Added meetings table to main schema file
services/galley/test/integration/API/Meetings.hs Comprehensive integration tests for all meeting endpoints
services/background-worker/src/Wire/MeetingsCleanupWorker.hs Background worker for cleaning up expired meetings
services/background-worker/src/Wire/BackgroundWorker/Options.hs Configuration options for meetings cleanup
services/background-worker/src/Wire/BackgroundWorker.hs Integration of cleanup worker into background worker service
charts/background-worker/values.yaml Helm chart configuration for cleanup worker settings
integration/test/Test/FeatureFlags/PayingTeam.hs Feature flag tests (naming inconsistency with meetingPremium)
changelog.d/2-features/WPB-21964 Changelog entry describing the new features

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

@battermann battermann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the feature flags we are missing:

  • stern endpoints and tests
  • helm charts, configmap, default values, docs etc.

For the other config (background-worker) we are missing the helm charts etc. too

(see PR guidelines)

-- Scheduling information
start_date timestamptz NOT NULL,
end_date timestamptz NOT NULL,
recurrence jsonb,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if we should store the recurrence untyped, like this. This is really an open question, not a critique.

@blackheaven
Copy link
Contributor Author

@battermann I think I have tackled everything, can you have a fresh look please?

@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch from 603d167 to 3a44fbd Compare December 19, 2025 08:00
blackheaven and others added 7 commits December 19, 2025 09:34
Adds routes for MeetingConfig and MeetingPremiumConfig to the Stern API,
including get, put, and lock/unlock routes.

Updates the galley helm chart values to include default configurations
for Meeting and MeetingPremium feature flags, and ensures these are
properly exposed through the ConfigMap.

Addresses part of the review comment regarding missing Stern endpoints,
helm charts, and background worker config.
…ature flags

The `payingTeam` feature flag is replaced by two new feature flags:

- `meeting`: Controls access to the meetings API. When disabled, all meetings
  endpoints return 403 Forbidden. The feature is enabled and unlocked by
  default.
- `meetingPremium`: Indicates whether a team has premium meeting features.
  When enabled, meetings created by team members are not marked as trial.

This change also includes:
- Renaming the `PayingTeam` feature flag test to `Meeting`.
- Adding a new `MeetingPremium` feature flag test.
- Updating helm charts and integration configurations.
Adds documentation for the `meeting` and `meetingPremium` feature flags
to `docs/src/developer/reference/config-options.md`.
The previous implementation of the meetings integration tests used incorrect JSON paths to access fields in the response bodies. This resulted in test failures.

This commit corrects the following issues:
- Uses 'qualified_id' to access the 'id' and 'domain' of a meeting.
- Uses 'qualified_creator' to access the creator's ID.
- Corrects the JSON field name for invited emails from 'invitedEmails' to 'invited_emails'.
- Fixes the recurrence frequency field name from 'freq' to 'frequency'.
- Corrects the extraction of 'teamId' from the 'createTeam' function's return value.
This commit updates the 'Frequency' enum to serialize to and from
lowercase strings (e.g., "daily", "weekly").

- The  instance now uses  to convert the constructor
  names to lowercase.
- The  instance is updated to handle both uppercase and
  lowercase values for backward compatibility.
- The  instance is updated to reflect the new lowercase values.
- The integration tests are updated to use and expect lowercase
  frequency values.
@blackheaven blackheaven force-pushed the gdifolco/WPB-21964-wire-meetings-skeleton branch from 3a44fbd to bb6636d Compare December 19, 2025 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ok-to-test Approved for running tests in CI, overrides not-ok-to-test if both labels exist

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants