Files
ersatztv/ErsatzTV/Controllers/Api/Requests/SaveRemoteConnectionRequest.cs
T
timothy 295004ab12 feat(api): add media-source write API shared DTOs (#202 slice S0)
Response DTOs (ErsatzTV.Core/Api/MediaSources) and request DTOs
(ErsatzTV/Controllers/Api/Requests) per the #202 design doc §B — the
shared shapes that backend slices S1 (local libraries), S2 (Plex), and
S3 (Jellyfin/Emby) will consume. No controllers or handler changes;
DTOs are unused so far.

Notable: RemoteConnectionResponseModel deliberately never carries the
raw API key (secure connection contract); SaveRemoteConnectionRequest's
To{Jellyfin,Emby}Command(existingApiKey) retains the existing key when
the incoming ApiKey is blank/omitted.

No conventions changed; nothing to update in docs/api-conventions.md.
2026-07-11 15:23:14 +02:00

30 lines
1.1 KiB
C#

using ErsatzTV.Application.Emby;
using ErsatzTV.Application.Jellyfin;
using ErsatzTV.Core.Emby;
using ErsatzTV.Core.Jellyfin;
namespace ErsatzTV.Controllers.Api.Requests;
// ApiKey blank/omitted = retain the existing key (design #202 secure connection contract, finding 1)
// — the caller passes the source's current key so ToCommand can substitute it when the incoming
// value is blank. A non-blank value sets a new key. Required on first connect (no existing key),
// which the controller/handler enforces before dispatch.
public record SaveRemoteConnectionRequest(string Address, string ApiKey)
{
public SaveJellyfinSecrets ToJellyfinCommand(string existingApiKey) =>
new(
new JellyfinSecrets
{
Address = Address,
ApiKey = string.IsNullOrWhiteSpace(ApiKey) ? existingApiKey : ApiKey
});
public SaveEmbySecrets ToEmbyCommand(string existingApiKey) =>
new(
new EmbySecrets
{
Address = Address,
ApiKey = string.IsNullOrWhiteSpace(ApiKey) ? existingApiKey : ApiKey
});
}