refactor: true facades

This commit is contained in:
2026-04-11 14:35:02 +02:00
parent db7e683504
commit a6bdac1a25
10 changed files with 261 additions and 794 deletions

View File

@@ -0,0 +1,229 @@
/* eslint-disable @typescript-eslint/member-ordering */
import { Injectable, inject } from '@angular/core';
import { ServerDirectoryService } from '../services/server-directory.service';
@Injectable({ providedIn: 'root' })
export class ServerDirectoryFacade {
private readonly service = inject(ServerDirectoryService);
readonly servers = this.service.servers;
readonly activeServers = this.service.activeServers;
readonly hasMissingDefaultServers = this.service.hasMissingDefaultServers;
readonly activeServer = this.service.activeServer;
awaitInitialServerHealthCheck(
...args: Parameters<ServerDirectoryService['awaitInitialServerHealthCheck']>
): ReturnType<ServerDirectoryService['awaitInitialServerHealthCheck']> {
return this.service.awaitInitialServerHealthCheck(...args);
}
addServer(
...args: Parameters<ServerDirectoryService['addServer']>
): ReturnType<ServerDirectoryService['addServer']> {
return this.service.addServer(...args);
}
ensureServerEndpoint(
...args: Parameters<ServerDirectoryService['ensureServerEndpoint']>
): ReturnType<ServerDirectoryService['ensureServerEndpoint']> {
return this.service.ensureServerEndpoint(...args);
}
findServerByUrl(
...args: Parameters<ServerDirectoryService['findServerByUrl']>
): ReturnType<ServerDirectoryService['findServerByUrl']> {
return this.service.findServerByUrl(...args);
}
removeServer(
...args: Parameters<ServerDirectoryService['removeServer']>
): ReturnType<ServerDirectoryService['removeServer']> {
return this.service.removeServer(...args);
}
restoreDefaultServers(
...args: Parameters<ServerDirectoryService['restoreDefaultServers']>
): ReturnType<ServerDirectoryService['restoreDefaultServers']> {
return this.service.restoreDefaultServers(...args);
}
setActiveServer(
...args: Parameters<ServerDirectoryService['setActiveServer']>
): ReturnType<ServerDirectoryService['setActiveServer']> {
return this.service.setActiveServer(...args);
}
deactivateServer(
...args: Parameters<ServerDirectoryService['deactivateServer']>
): ReturnType<ServerDirectoryService['deactivateServer']> {
return this.service.deactivateServer(...args);
}
updateServerStatus(
...args: Parameters<ServerDirectoryService['updateServerStatus']>
): ReturnType<ServerDirectoryService['updateServerStatus']> {
return this.service.updateServerStatus(...args);
}
ensureEndpointVersionCompatibility(
...args: Parameters<ServerDirectoryService['ensureEndpointVersionCompatibility']>
): ReturnType<ServerDirectoryService['ensureEndpointVersionCompatibility']> {
return this.service.ensureEndpointVersionCompatibility(...args);
}
resolveRoomEndpoint(
...args: Parameters<ServerDirectoryService['resolveRoomEndpoint']>
): ReturnType<ServerDirectoryService['resolveRoomEndpoint']> {
return this.service.resolveRoomEndpoint(...args);
}
normaliseRoomSignalSource(
...args: Parameters<ServerDirectoryService['normaliseRoomSignalSource']>
): ReturnType<ServerDirectoryService['normaliseRoomSignalSource']> {
return this.service.normaliseRoomSignalSource(...args);
}
buildRoomSignalSelector(
...args: Parameters<ServerDirectoryService['buildRoomSignalSelector']>
): ReturnType<ServerDirectoryService['buildRoomSignalSelector']> {
return this.service.buildRoomSignalSelector(...args);
}
getFallbackRoomEndpoints(
...args: Parameters<ServerDirectoryService['getFallbackRoomEndpoints']>
): ReturnType<ServerDirectoryService['getFallbackRoomEndpoints']> {
return this.service.getFallbackRoomEndpoints(...args);
}
setSearchAllServers(
...args: Parameters<ServerDirectoryService['setSearchAllServers']>
): ReturnType<ServerDirectoryService['setSearchAllServers']> {
return this.service.setSearchAllServers(...args);
}
testServer(
...args: Parameters<ServerDirectoryService['testServer']>
): ReturnType<ServerDirectoryService['testServer']> {
return this.service.testServer(...args);
}
testAllServers(
...args: Parameters<ServerDirectoryService['testAllServers']>
): ReturnType<ServerDirectoryService['testAllServers']> {
return this.service.testAllServers(...args);
}
getApiBaseUrl(
...args: Parameters<ServerDirectoryService['getApiBaseUrl']>
): ReturnType<ServerDirectoryService['getApiBaseUrl']> {
return this.service.getApiBaseUrl(...args);
}
getWebSocketUrl(
...args: Parameters<ServerDirectoryService['getWebSocketUrl']>
): ReturnType<ServerDirectoryService['getWebSocketUrl']> {
return this.service.getWebSocketUrl(...args);
}
searchServers(
...args: Parameters<ServerDirectoryService['searchServers']>
): ReturnType<ServerDirectoryService['searchServers']> {
return this.service.searchServers(...args);
}
getServers(
...args: Parameters<ServerDirectoryService['getServers']>
): ReturnType<ServerDirectoryService['getServers']> {
return this.service.getServers(...args);
}
getServer(
...args: Parameters<ServerDirectoryService['getServer']>
): ReturnType<ServerDirectoryService['getServer']> {
return this.service.getServer(...args);
}
findServerAcrossActiveEndpoints(
...args: Parameters<ServerDirectoryService['findServerAcrossActiveEndpoints']>
): ReturnType<ServerDirectoryService['findServerAcrossActiveEndpoints']> {
return this.service.findServerAcrossActiveEndpoints(...args);
}
registerServer(
...args: Parameters<ServerDirectoryService['registerServer']>
): ReturnType<ServerDirectoryService['registerServer']> {
return this.service.registerServer(...args);
}
updateServer(
...args: Parameters<ServerDirectoryService['updateServer']>
): ReturnType<ServerDirectoryService['updateServer']> {
return this.service.updateServer(...args);
}
unregisterServer(
...args: Parameters<ServerDirectoryService['unregisterServer']>
): ReturnType<ServerDirectoryService['unregisterServer']> {
return this.service.unregisterServer(...args);
}
getServerUsers(
...args: Parameters<ServerDirectoryService['getServerUsers']>
): ReturnType<ServerDirectoryService['getServerUsers']> {
return this.service.getServerUsers(...args);
}
requestJoin(
...args: Parameters<ServerDirectoryService['requestJoin']>
): ReturnType<ServerDirectoryService['requestJoin']> {
return this.service.requestJoin(...args);
}
createInvite(
...args: Parameters<ServerDirectoryService['createInvite']>
): ReturnType<ServerDirectoryService['createInvite']> {
return this.service.createInvite(...args);
}
getInvite(
...args: Parameters<ServerDirectoryService['getInvite']>
): ReturnType<ServerDirectoryService['getInvite']> {
return this.service.getInvite(...args);
}
kickServerMember(
...args: Parameters<ServerDirectoryService['kickServerMember']>
): ReturnType<ServerDirectoryService['kickServerMember']> {
return this.service.kickServerMember(...args);
}
banServerMember(
...args: Parameters<ServerDirectoryService['banServerMember']>
): ReturnType<ServerDirectoryService['banServerMember']> {
return this.service.banServerMember(...args);
}
unbanServerMember(
...args: Parameters<ServerDirectoryService['unbanServerMember']>
): ReturnType<ServerDirectoryService['unbanServerMember']> {
return this.service.unbanServerMember(...args);
}
notifyLeave(
...args: Parameters<ServerDirectoryService['notifyLeave']>
): ReturnType<ServerDirectoryService['notifyLeave']> {
return this.service.notifyLeave(...args);
}
updateUserCount(
...args: Parameters<ServerDirectoryService['updateUserCount']>
): ReturnType<ServerDirectoryService['updateUserCount']> {
return this.service.updateUserCount(...args);
}
sendHeartbeat(
...args: Parameters<ServerDirectoryService['sendHeartbeat']>
): ReturnType<ServerDirectoryService['sendHeartbeat']> {
return this.service.sendHeartbeat(...args);
}
}

View File

@@ -4,10 +4,9 @@ import {
type Signal
} from '@angular/core';
import { Observable } from 'rxjs';
import { STORAGE_KEY_CONNECTION_SETTINGS } from '../../../core/constants';
import { User } from '../../../shared-kernel';
import { CLIENT_UPDATE_REQUIRED_MESSAGE } from '../domain/server-directory.constants';
import { ServerDirectoryApiService } from '../infrastructure/server-directory-api.service';
import { STORAGE_KEY_CONNECTION_SETTINGS } from '../../../../core/constants';
import { User } from '../../../../shared-kernel';
import { ServerDirectoryApiService } from '../../infrastructure/server-directory-api.service';
import type {
BanServerMemberRequest,
CreateServerInviteRequest,
@@ -20,21 +19,19 @@ import type {
ServerJoinAccessResponse,
ServerSourceSelector,
UnbanServerMemberRequest
} from '../domain/server-directory.models';
} from '../../domain/server-directory.models';
import {
buildRoomSignalSelector,
buildRoomSignalSource,
type RoomSignalSource,
type RoomSignalSourceInput
} from '../domain/room-signal-source';
import { ServerEndpointCompatibilityService } from '../infrastructure/server-endpoint-compatibility.service';
import { ServerEndpointHealthService } from '../infrastructure/server-endpoint-health.service';
} from '../../domain/room-signal-source';
import { ServerEndpointCompatibilityService } from '../../infrastructure/server-endpoint-compatibility.service';
import { ServerEndpointHealthService } from '../../infrastructure/server-endpoint-health.service';
import { ServerEndpointStateService } from './server-endpoint-state.service';
export { CLIENT_UPDATE_REQUIRED_MESSAGE };
@Injectable({ providedIn: 'root' })
export class ServerDirectoryFacade {
export class ServerDirectoryService {
readonly servers: Signal<ServerEndpoint[]>;
readonly activeServers: Signal<ServerEndpoint[]>;
readonly hasMissingDefaultServers: Signal<boolean>;

View File

@@ -6,7 +6,7 @@ import {
type Signal
} from '@angular/core';
import { v4 as uuidv4 } from 'uuid';
import { environment } from '../../../../environments/environment';
import { environment } from '../../../../../environments/environment';
import {
buildDefaultEndpointTemplates,
buildDefaultServerDefinitions,
@@ -16,14 +16,14 @@ import {
hasEndpointForDefault,
matchDefaultEndpointTemplate,
sanitiseServerBaseUrl
} from '../domain/server-endpoint-defaults';
import { ServerEndpointStorageService } from '../infrastructure/server-endpoint-storage.service';
} from '../../domain/server-endpoint-defaults';
import { ServerEndpointStorageService } from '../../infrastructure/server-endpoint-storage.service';
import type {
ConfiguredDefaultServerDefinition,
DefaultEndpointTemplate,
ServerEndpoint,
ServerEndpointVersions
} from '../domain/server-directory.models';
} from '../../domain/server-directory.models';
function resolveDefaultHttpProtocol(): 'http' | 'https' {
return typeof window !== 'undefined' && window.location?.protocol === 'https:'