Skip to content

Conversation

@jhodapp
Copy link
Member

@jhodapp jhodapp commented Dec 20, 2025

Description

Add the foundational database schema, entity definitions, and CRUD operations needed for the AI meeting recording and transcription integration. This is Phase 1 of a multi-phase implementation that will enable Google Meet recording via Recall.ai and transcription via AssemblyAI.

GitHub Issue: Relates to refactor-group/refactor-platform-fe#146

Changes

Database Migrations:

  • Add user_integrations table for encrypted storage of external API credentials (Google OAuth, Recall.ai, AssemblyAI)
  • Add ai_privacy_level enum (none, transcribe_only, full) and meeting_url column to coaching_relationships
  • Add meeting_recordings table with meeting_recording_status enum for Recall.ai bot tracking
  • Add transcriptions table with transcription_status enum for AssemblyAI transcript data
  • Add transcript_segments table with sentiment enum for speaker-diarized utterances
  • Add ai_suggested_items table with ai_suggestion_type and ai_suggestion_status enums

Entity Definitions:

  • user_integrations - stores encrypted Google OAuth tokens, Recall.ai API key, AssemblyAI API key
  • meeting_recordings - tracks Recall.ai recording sessions
  • transcriptions - stores full transcript text, summary, and confidence scores
  • transcript_segments - individual utterances with speaker labels and timestamps
  • ai_suggested_items - AI-detected action items and agreements pending user approval

Entity API CRUD Operations:

  • user_integration - create, update, find_by_id, find_by_user_id, get_or_create, delete
  • meeting_recording - create, update, update_status, find_by_id, find_by_coaching_session_id, find_by_recall_bot_id
  • transcription - create, update, update_status, find_by_id, find_by_meeting_recording_id, find_by_assemblyai_id
  • ai_suggested_item - create, accept, dismiss, find_by_id, find_by_transcription_id, find_pending_by_transcription_id

Encryption Utilities:

  • AES-256-GCM encryption module for secure API key storage in the database
  • Includes comprehensive tests for encryption/decryption roundtrips

Configuration:

  • Add config options for encryption key, Recall.ai, AssemblyAI, Google OAuth, and webhook settings

Testing Strategy

  • Run cargo test to verify encryption utilities work correctly
  • Run database migrations against a test database to verify schema creation
  • Verify cargo clippy and cargo fmt pass without warnings

Concerns

  • Database Migrations: This adds 3 new migrations that create multiple tables and enums. Ensure migrations are run in order.
  • PostgreSQL Type Ownership: All new enum types include OWNER TO refactor statements per project standards to prevent permission issues.
  • No Breaking Changes: Existing coaching_relationships table gets new optional columns with sensible defaults (meeting_url = NULL, ai_privacy_level = 'full').

Add database schema, entities, and CRUD operations for the AI meeting
recording and transcription integration:

Database Migrations:
- Add user_integrations table for encrypted API credentials
- Add ai_privacy_level enum and meeting_url to coaching_relationships
- Add meeting_recordings, transcriptions, transcript_segments tables
- Add ai_suggested_items table for AI-detected actions/agreements

Entity Definitions:
- user_integrations (Google OAuth, Recall.ai, AssemblyAI credentials)
- meeting_recordings (Recall.ai bot tracking)
- transcriptions (AssemblyAI transcript data)
- transcript_segments (speaker-diarized utterances)
- ai_suggested_items (pending AI suggestions)
- Enums: ai_privacy_level, meeting_recording_status, transcription_status,
  sentiment, ai_suggestion_type, ai_suggestion_status

Entity API:
- CRUD operations for user_integration, meeting_recording, transcription,
  and ai_suggested_item modules

Other:
- AES-256-GCM encryption utilities for API key storage
- Config additions for external service credentials
- Update coaching_relationships with meeting_url and ai_privacy_level

Relates to: refactor-group/refactor-platform-fe#146
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.

2 participants