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.
30 lines
1.1 KiB
C#
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
|
|
});
|
|
}
|