fix(api): add nullable context to #96/#98 DTOs; regen OpenAPI + SPA types
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 3m57s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 4m53s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped

ChannelResponseModel and BulkChannelRequests DTOs lacked file-scoped
#nullable enable, so the OpenAPI generator emitted every string
property as a ["null","string"] union (project Nullable default is
disable), polluting SPA typegen with needless `| null` unions.
ChannelStateResponseModel already complied with this convention
(precedent: PlayoutResponseModel). All properties in both files are
always populated (never null in practice), so no property needed to
become explicitly optional/nullable - just adding #nullable enable
was sufficient to clean up the generated schema.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 08:02:28 +02:00
co-authored by Claude Fable 5
parent 7bd694394a
commit 8d89ab1624
4 changed files with 27 additions and 61 deletions
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
#nullable enable
using Newtonsoft.Json;
namespace ErsatzTV.Core.Api.Channels;
@@ -1,3 +1,4 @@
#nullable enable
using ErsatzTV.Application.Channels;
namespace ErsatzTV.Controllers.Api.Requests;
+12 -48
View File
@@ -3916,10 +3916,7 @@
"type": "object",
"properties": {
"channelIds": {
"type": [
"null",
"array"
],
"type": "array",
"items": {
"type": "integer",
"format": "int32"
@@ -3935,20 +3932,14 @@
"type": "object",
"properties": {
"channelIds": {
"type": [
"null",
"array"
],
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"group": {
"type": [
"null",
"string"
]
"type": "string"
}
}
},
@@ -3964,10 +3955,7 @@
"format": "int32"
},
"number": {
"type": [
"null",
"string"
]
"type": "string"
}
}
},
@@ -3978,10 +3966,7 @@
"type": "object",
"properties": {
"channels": {
"type": [
"null",
"array"
],
"type": "array",
"items": {
"$ref": "#/components/schemas/BulkRenumberChannelRequest"
}
@@ -4143,50 +4128,29 @@
"format": "int32"
},
"number": {
"type": [
"null",
"string"
]
"type": "string"
},
"sortNumber": {
"type": "number",
"format": "double"
},
"name": {
"type": [
"null",
"string"
]
"type": "string"
},
"group": {
"type": [
"null",
"string"
]
"type": "string"
},
"categories": {
"type": [
"null",
"string"
]
"type": "string"
},
"fFmpegProfile": {
"type": [
"null",
"string"
]
"type": "string"
},
"language": {
"type": [
"null",
"string"
]
"type": "string"
},
"streamingMode": {
"type": [
"null",
"string"
]
"type": "string"
},
"isEnabled": {
"type": "boolean"
+12 -12
View File
@@ -27,18 +27,18 @@ export interface components {
"contentType": string;
};
"BulkDeleteChannelsRequest": {
"channelIds": null | Array<number>;
"channelIds": Array<number>;
};
"BulkMoveChannelsToGroupRequest": {
"channelIds": null | Array<number>;
"group": null | string;
"channelIds": Array<number>;
"group": string;
};
"BulkRenumberChannelRequest": {
"id": number;
"number": null | string;
"number": string;
};
"BulkRenumberChannelsRequest": {
"channels": null | Array<components["schemas"]["BulkRenumberChannelRequest"]>;
"channels": Array<components["schemas"]["BulkRenumberChannelRequest"]>;
};
"ChannelGuideChannelResponseModel": {
"number": string;
@@ -69,14 +69,14 @@ export interface components {
"ChannelPlayoutSource": "Generated" | "Mirror";
"ChannelResponseModel": {
"id": number;
"number": null | string;
"number": string;
"sortNumber": number;
"name": null | string;
"group": null | string;
"categories": null | string;
"fFmpegProfile": null | string;
"language": null | string;
"streamingMode": null | string;
"name": string;
"group": string;
"categories": string;
"fFmpegProfile": string;
"language": string;
"streamingMode": string;
"isEnabled": boolean;
"showInEpg": boolean;
};