-
Notifications
You must be signed in to change notification settings - Fork 335
WPB-21964: Add Wire Meetings endpoints #4872
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
ba6264c to
425ab2d
Compare
libs/wire-subsystems/postgres-migrations/20251122120000-meetings.sql
Outdated
Show resolved
Hide resolved
| then pure False | ||
| else do | ||
| -- Add invited email | ||
| Store.addInvitedEmail meetingId email |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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?
akshaymankar
left a comment
There was a problem hiding this 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.
63d6831 to
0c273b7
Compare
ff9a9f2 to
221a3b5
Compare
|
@battermann I have reworked the flags |
e360e1b to
d063175
Compare
There was a problem hiding this 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
meetingstable with indexes for efficient querying - Feature Flags: Two new flags (
meetingandmeetingPremium) 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.
battermann
left a comment
There was a problem hiding this 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)
libs/wire-subsystems/postgres-migrations/20251213223355-create-meetings-table.sql
Show resolved
Hide resolved
| -- Scheduling information | ||
| start_date timestamptz NOT NULL, | ||
| end_date timestamptz NOT NULL, | ||
| recurrence jsonb, |
There was a problem hiding this comment.
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.
|
@battermann I think I have tackled everything, can you have a fresh look please? |
603d167 to
3a44fbd
Compare
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.
…Store/Postgres.hs
…e api logic inn the subsystem
3a44fbd to
bb6636d
Compare
https://wearezeta.atlassian.net/browse/WPB-21964
Checklist
changelog.d