refactor: stricter domain: voice-session

This commit is contained in:
2026-04-11 15:12:54 +02:00
parent 7a0664b3c4
commit 52912327ae
9 changed files with 30 additions and 25 deletions

View File

@@ -9,15 +9,20 @@ The actual mixed live-stream workspace UI lives in `features/room/voice-workspac
``` ```
voice-session/ voice-session/
├── application/ ├── application/
│ ├── voice-session.facade.ts Tracks active voice session, drives floating controls │ ├── facades/
│ │ └── voice-session.facade.ts Tracks active voice session, drives floating controls
│ └── services/
│ └── voice-workspace.service.ts Workspace mode (hidden/expanded/minimized), focused stream, mini-window position │ └── voice-workspace.service.ts Workspace mode (hidden/expanded/minimized), focused stream, mini-window position
├── domain/ ├── domain/
│ ├── voice-session.logic.ts isViewingVoiceSessionServer, buildVoiceSessionRoom │ ├── logic/
│ └── voice-session.models.ts VoiceSessionInfo interface │ └── voice-session.logic.ts isViewingVoiceSessionServer, buildVoiceSessionRoom
│ └── models/
│ └── voice-session.model.ts VoiceSessionInfo interface
├── infrastructure/ ├── infrastructure/
│ └── voice-settings.storage.ts Persists audio device IDs, volumes, bitrate, latency, noise reduction to localStorage │ └── util/
│ └── voice-settings-storage.util.ts Persists audio device IDs, volumes, bitrate, latency, noise reduction to localStorage
├── feature/ ├── feature/
│ ├── voice-controls/ Full voice control panel (mic, camera, deafen, devices, screen share, settings) │ ├── voice-controls/ Full voice control panel (mic, camera, deafen, devices, screen share, settings)
@@ -49,10 +54,10 @@ graph TD
VSF --> Store VSF --> Store
VWS --> VSF VWS --> VSF
click VSF "application/voice-session.facade.ts" "Tracks active voice session" _blank click VSF "application/facades/voice-session.facade.ts" "Tracks active voice session" _blank
click VWS "application/voice-workspace.service.ts" "Workspace mode and focused stream" _blank click VWS "application/services/voice-workspace.service.ts" "Workspace mode and focused stream" _blank
click VSS "infrastructure/voice-settings.storage.ts" "localStorage persistence for audio settings" _blank click VSS "infrastructure/util/voice-settings-storage.util.ts" "localStorage persistence for audio settings" _blank
click Logic "domain/voice-session.logic.ts" "Pure helper functions" _blank click Logic "domain/logic/voice-session.logic.ts" "Pure helper functions" _blank
click VC "feature/voice-controls/" "Full voice control panel" _blank click VC "feature/voice-controls/" "Full voice control panel" _blank
click FC "feature/floating-voice-controls/" "Minimal floating overlay" _blank click FC "feature/floating-voice-controls/" "Minimal floating overlay" _blank
``` ```

View File

@@ -6,9 +6,9 @@ import {
inject inject
} from '@angular/core'; } from '@angular/core';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { RoomsActions } from '../../../store/rooms/rooms.actions'; import { RoomsActions } from '../../../../store/rooms/rooms.actions';
import { buildVoiceSessionRoom, isViewingVoiceSessionServer } from '../domain/voice-session.logic'; import { buildVoiceSessionRoom, isViewingVoiceSessionServer } from '../../domain/logic/voice-session.logic';
import type { VoiceSessionInfo } from '../domain/voice-session.models'; import type { VoiceSessionInfo } from '../../domain/models/voice-session.model';
/** /**
* Tracks the user's current voice session across client-side * Tracks the user's current voice session across client-side

View File

@@ -7,7 +7,7 @@ import {
signal signal
} from '@angular/core'; } from '@angular/core';
import { VoiceSessionFacade } from './voice-session.facade'; import { VoiceSessionFacade } from '../facades/voice-session.facade';
export type VoiceWorkspaceMode = 'hidden' | 'expanded' | 'minimized'; export type VoiceWorkspaceMode = 'hidden' | 'expanded' | 'minimized';

View File

@@ -1,5 +1,5 @@
import type { Room } from '../../../shared-kernel'; import type { Room } from '../../../../shared-kernel';
import type { VoiceSessionInfo } from './voice-session.models'; import type { VoiceSessionInfo } from '../models/voice-session.model';
export function isViewingVoiceSessionServer( export function isViewingVoiceSessionServer(
session: VoiceSessionInfo | null, session: VoiceSessionInfo | null,

View File

@@ -19,8 +19,8 @@ import {
lucideArrowLeft lucideArrowLeft
} from '@ng-icons/lucide'; } from '@ng-icons/lucide';
import { VoiceSessionFacade } from '../../application/voice-session.facade'; import { VoiceSessionFacade } from '../../application/facades/voice-session.facade';
import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../infrastructure/voice-settings.storage'; import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../infrastructure/util/voice-settings-storage.util';
import { VoiceConnectionFacade } from '../../../../domains/voice-connection'; import { VoiceConnectionFacade } from '../../../../domains/voice-connection';
import { VoicePlaybackService } from '../../../../domains/voice-connection'; import { VoicePlaybackService } from '../../../../domains/voice-connection';
import { ScreenShareFacade, ScreenShareQuality } from '../../../../domains/screen-share'; import { ScreenShareFacade, ScreenShareQuality } from '../../../../domains/screen-share';

View File

@@ -22,8 +22,8 @@ import {
lucideHeadphones lucideHeadphones
} from '@ng-icons/lucide'; } from '@ng-icons/lucide';
import { VoiceSessionFacade } from '../../application/voice-session.facade'; import { VoiceSessionFacade } from '../../application/facades/voice-session.facade';
import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../infrastructure/voice-settings.storage'; import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../infrastructure/util/voice-settings-storage.util';
import { VoiceActivityService, VoiceConnectionFacade } from '../../../../domains/voice-connection'; import { VoiceActivityService, VoiceConnectionFacade } from '../../../../domains/voice-connection';
import { PlaybackOptions, VoicePlaybackService } from '../../../../domains/voice-connection'; import { PlaybackOptions, VoicePlaybackService } from '../../../../domains/voice-connection';
import { ScreenShareFacade, ScreenShareQuality } from '../../../../domains/screen-share'; import { ScreenShareFacade, ScreenShareQuality } from '../../../../domains/screen-share';

View File

@@ -1,7 +1,7 @@
export * from './application/voice-session.facade'; export * from './application/facades/voice-session.facade';
export * from './application/voice-workspace.service'; export * from './application/services/voice-workspace.service';
export * from './domain/voice-session.models'; export * from './domain/models/voice-session.model';
export * from './infrastructure/voice-settings.storage'; export * from './infrastructure/util/voice-settings-storage.util';
// Feature components // Feature components
export { VoiceControlsComponent } from './feature/voice-controls/voice-controls.component'; export { VoiceControlsComponent } from './feature/voice-controls/voice-controls.component';

View File

@@ -1,4 +1,4 @@
import { STORAGE_KEY_VOICE_SETTINGS } from '../../../core/constants'; import { STORAGE_KEY_VOICE_SETTINGS } from '../../../../core/constants';
import { import {
DEFAULT_LATENCY_PROFILE, DEFAULT_LATENCY_PROFILE,
DEFAULT_SCREEN_SHARE_QUALITY, DEFAULT_SCREEN_SHARE_QUALITY,
@@ -6,7 +6,7 @@ import {
SCREEN_SHARE_QUALITIES, SCREEN_SHARE_QUALITIES,
type LatencyProfile, type LatencyProfile,
type ScreenShareQuality type ScreenShareQuality
} from '../../../shared-kernel'; } from '../../../../shared-kernel';
export interface VoiceSettings { export interface VoiceSettings {
inputDevice: string; inputDevice: string;