Skip to content

Commit ec06cc2

Browse files
authored
Merge branch 'main' into copilot/add-redis-vector-storage
2 parents d466ae5 + 5d61c7d commit ec06cc2

32 files changed

Lines changed: 210 additions & 328 deletions

File tree

Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
1212
<PackageVersion Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="9.0.0" />
1313
<PackageVersion Include="Azure.AI.OpenAI" Version="2.1.0" />
14-
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.0" />
14+
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.1" />
1515
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
1616
<PackageVersion Include="Azure.ResourceManager.Dns" Version="1.1.1" />
1717
<PackageVersion Include="CasCap.Api.Azure.Auth" Version="1.4.4" />
@@ -54,7 +54,7 @@
5454
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.7" />
5555
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.5.0" />
5656
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.7" />
57-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.0" />
57+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
5858
<!--<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />-->
5959
<PackageVersion Include="ModelContextProtocol" Version="1.2.0" />
6060
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="1.2.0" />

src/CasCap.Api.Buderus/Controllers/BuderusController.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,28 @@ public class BuderusController(IBuderusQueryService buderusQuerySvc) : Controlle
1212
{
1313
/// <inheritdoc cref="BuderusQueryService.GetSnapshot"/>
1414
[HttpGet]
15-
[ProducesResponseType(StatusCodes.Status200OK)]
16-
public async Task<IActionResult> GetSnapshot()
17-
=> Ok(await buderusQuerySvc.GetSnapshot());
15+
public async Task<Ok<BuderusSnapshot>> GetSnapshot()
16+
=> TypedResults.Ok(await buderusQuerySvc.GetSnapshot());
1817

1918
/// <inheritdoc cref="BuderusQueryService.GetEvents"/>
2019
[HttpGet("values")]
21-
[ProducesResponseType(StatusCodes.Status200OK)]
22-
public IActionResult Get()
23-
=> Ok(buderusQuerySvc.GetEvents());
20+
public Ok<IAsyncEnumerable<BuderusEvent>> Get()
21+
=> TypedResults.Ok(buderusQuerySvc.GetEvents());
2422

2523
/// <inheritdoc cref="BuderusQueryService.GetEvents"/>
2624
[HttpGet("{id}")]
27-
[ProducesResponseType(StatusCodes.Status200OK)]
28-
public IActionResult GetById(string id)
29-
=> Ok(buderusQuerySvc.GetEvents(id));
25+
public Ok<IAsyncEnumerable<BuderusEvent>> GetById(string id)
26+
=> TypedResults.Ok(buderusQuerySvc.GetEvents(id));
3027

3128
/// <inheritdoc cref="BuderusQueryService.SetDataPoint"/>
3229
[HttpPut("{*id}")]
33-
[ProducesResponseType(StatusCodes.Status200OK)]
34-
[ProducesResponseType(StatusCodes.Status400BadRequest)]
35-
public async Task<IActionResult> SetDataPoint(string id, [FromBody] SetDataPointRequest request, CancellationToken cancellationToken)
30+
public async Task<Results<Ok, BadRequest<string>>> SetDataPoint(string id, [FromBody] SetDataPointRequest request, CancellationToken cancellationToken)
3631
{
3732
if (string.IsNullOrWhiteSpace(id))
38-
return BadRequest("Datapoint id must not be empty.");
33+
return TypedResults.BadRequest("Datapoint id must not be empty.");
3934
// Ensure the id starts with '/' so it matches the KM200 path convention
4035
var datapointId = id.StartsWith('/') ? id : $"/{id}";
4136
var success = await buderusQuerySvc.SetDataPoint(datapointId, request.Value, cancellationToken);
42-
return success ? Ok() : BadRequest($"Failed to write datapoint '{datapointId}'. The datapoint may not exist or may not be writeable.");
37+
return success ? TypedResults.Ok() : TypedResults.BadRequest($"Failed to write datapoint '{datapointId}'. The datapoint may not exist or may not be writeable.");
4338
}
4439
}

src/CasCap.Api.Buderus/GlobalUsings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
global using CasCap.Services;
1111
global using Microsoft.AspNetCore.Authorization;
1212
global using Microsoft.AspNetCore.Http;
13+
global using Microsoft.AspNetCore.Http.HttpResults;
1314
global using Microsoft.AspNetCore.Mvc;
1415
global using Microsoft.Extensions.Configuration;
1516
global using Microsoft.Extensions.DependencyInjection;

src/CasCap.Api.DDns/Controllers/DDnsController.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ public class DDnsController(IDDnsQueryService dDnsQuerySvc) : ControllerBase
1212
{
1313
/// <inheritdoc cref="DDnsQueryService.GetCurrentIp"/>
1414
[HttpGet("ip")]
15-
[ProducesResponseType<string>(StatusCodes.Status200OK)]
16-
public async Task<IActionResult> GetCurrentIp(CancellationToken cancellationToken)
17-
=> Ok(await dDnsQuerySvc.GetCurrentIp(cancellationToken));
15+
public async Task<Ok<string>> GetCurrentIp(CancellationToken cancellationToken)
16+
=> TypedResults.Ok((await dDnsQuerySvc.GetCurrentIp(cancellationToken))?.ToString());
1817
}

src/CasCap.Api.DDns/GlobalUsings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
global using CasCap.Services;
99
global using Microsoft.AspNetCore.Authorization;
1010
global using Microsoft.AspNetCore.Http;
11+
global using Microsoft.AspNetCore.Http.HttpResults;
1112
global using Microsoft.AspNetCore.Mvc;
1213
global using Microsoft.Extensions.Configuration;
1314
global using Microsoft.Extensions.DependencyInjection;

src/CasCap.Api.DoorBird/Controllers/DoorBirdController.cs

Lines changed: 38 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -12,171 +12,118 @@ public class DoorBirdController(IDoorBirdQueryService doorBirdQuerySvc) : Contro
1212
{
1313
/// <inheritdoc cref="DoorBirdQueryService.GetSnapshot"/>
1414
[HttpGet]
15-
[ProducesResponseType<DoorBirdSnapshot>(StatusCodes.Status200OK)]
16-
public async Task<IActionResult> GetSnapshot()
17-
=> Ok(await doorBirdQuerySvc.GetSnapshot());
15+
public async Task<Ok<DoorBirdSnapshot>> GetSnapshot()
16+
=> TypedResults.Ok(await doorBirdQuerySvc.GetSnapshot());
1817

1918
/// <inheritdoc cref="DoorBirdQueryService.GetRealTimePhoto"/>
2019
[HttpGet("photo")]
2120
[Produces("image/jpeg")]
22-
[ProducesResponseType(StatusCodes.Status200OK)]
23-
[ProducesResponseType(StatusCodes.Status404NotFound)]
24-
public async Task<IActionResult> GetRealTimePhoto()
21+
public async Task<Results<FileContentHttpResult, NotFound<string>>> GetRealTimePhoto()
2522
{
2623
var blob = await doorBirdQuerySvc.GetRealTimePhoto();
2724
return blob.bytes.Length == 0
28-
? NotFound("No image returned from DoorBird device.")
29-
: File(blob.bytes, "image/jpeg");
25+
? TypedResults.NotFound("No image returned from DoorBird device.")
26+
: TypedResults.File(blob.bytes, "image/jpeg");
3027
}
3128

3229
/// <inheritdoc cref="DoorBirdQueryService.GetVideoStreamUrl"/>
3330
[HttpGet("video")]
34-
[ProducesResponseType<string>(StatusCodes.Status200OK)]
35-
public IActionResult GetVideoStreamUrl()
36-
=> Ok(doorBirdQuerySvc.GetVideoStreamUrl().ToString());
31+
public Ok<string> GetVideoStreamUrl()
32+
=> TypedResults.Ok(doorBirdQuerySvc.GetVideoStreamUrl().ToString());
3733

3834
/// <inheritdoc cref="DoorBirdQueryService.UnlockFrontDoor()"/>
3935
[HttpPost("relay")]
40-
[ProducesResponseType(StatusCodes.Status200OK)]
41-
public async Task<IActionResult> UnlockFrontDoor([FromQuery] string? doorControllerID = null, [FromQuery] string? relayName = null)
42-
{
43-
var result = await doorBirdQuerySvc.UnlockFrontDoor(doorControllerID, relayName);
44-
return Ok(result);
45-
}
36+
public async Task<Ok<bool>> UnlockFrontDoor([FromQuery] string? doorControllerID = null, [FromQuery] string? relayName = null)
37+
=> TypedResults.Ok(await doorBirdQuerySvc.UnlockFrontDoor(doorControllerID, relayName));
4638

4739
/// <inheritdoc cref="DoorBirdQueryService.LightOn"/>
4840
[HttpPost("light")]
49-
[ProducesResponseType<LightOnResponse>(StatusCodes.Status200OK)]
50-
public async Task<IActionResult> LightOn()
51-
{
52-
var result = await doorBirdQuerySvc.LightOn();
53-
return Ok(result);
54-
}
41+
public async Task<Ok<LightOnResponse>> LightOn()
42+
=> TypedResults.Ok(await doorBirdQuerySvc.LightOn());
5543

5644
/// <inheritdoc cref="DoorBirdQueryService.GetInfo"/>
5745
[HttpGet("info")]
58-
[ProducesResponseType<InfoResponse>(StatusCodes.Status200OK)]
59-
public async Task<IActionResult> GetInfo()
60-
{
61-
var info = await doorBirdQuerySvc.GetInfo();
62-
return Ok(info);
63-
}
46+
public async Task<Ok<InfoResponse>> GetInfo()
47+
=> TypedResults.Ok(await doorBirdQuerySvc.GetInfo());
6448

6549
/// <inheritdoc cref="DoorBirdQueryService.Restart"/>
6650
[HttpPost("restart")]
67-
[ProducesResponseType<RestartResponse>(StatusCodes.Status200OK)]
68-
public async Task<IActionResult> Restart()
69-
{
70-
var result = await doorBirdQuerySvc.Restart();
71-
return Ok(result);
72-
}
51+
public async Task<Ok<RestartResponse>> Restart()
52+
=> TypedResults.Ok(await doorBirdQuerySvc.Restart());
7353

7454
/// <inheritdoc cref="DoorBirdQueryService.GetSipStatus"/>
7555
[HttpGet("sip")]
76-
[ProducesResponseType<SipStatusResponse>(StatusCodes.Status200OK)]
77-
public async Task<IActionResult> GetSipStatus()
78-
{
79-
var result = await doorBirdQuerySvc.GetSipStatus();
80-
return Ok(result);
81-
}
56+
public async Task<Ok<SipStatusResponse>> GetSipStatus()
57+
=> TypedResults.Ok(await doorBirdQuerySvc.GetSipStatus());
8258

8359
/// <inheritdoc cref="DoorBirdQueryService.GetSession"/>
8460
[HttpGet("session")]
85-
[ProducesResponseType<SessionResponse>(StatusCodes.Status200OK)]
86-
public async Task<IActionResult> GetSession()
87-
{
88-
var result = await doorBirdQuerySvc.GetSession();
89-
return Ok(result);
90-
}
61+
public async Task<Ok<SessionResponse>> GetSession()
62+
=> TypedResults.Ok(await doorBirdQuerySvc.GetSession());
9163

9264
/// <inheritdoc cref="DoorBirdQueryService.GetFavorites"/>
9365
[HttpGet("favorites")]
94-
[ProducesResponseType<string>(StatusCodes.Status200OK)]
95-
public async Task<IActionResult> GetFavorites()
96-
{
97-
var result = await doorBirdQuerySvc.GetFavorites();
98-
return Ok(result);
99-
}
66+
public async Task<Ok<string>> GetFavorites()
67+
=> TypedResults.Ok(await doorBirdQuerySvc.GetFavorites());
10068

10169
/// <inheritdoc cref="DoorBirdQueryService.GetSchedule"/>
10270
[HttpGet("schedule")]
103-
[ProducesResponseType<string>(StatusCodes.Status200OK)]
104-
public async Task<IActionResult> GetSchedule()
105-
{
106-
var result = await doorBirdQuerySvc.GetSchedule();
107-
return Ok(result);
108-
}
71+
public async Task<Ok<string>> GetSchedule()
72+
=> TypedResults.Ok(await doorBirdQuerySvc.GetSchedule());
10973

11074
/// <inheritdoc cref="DoorBirdQueryService.GetHistoryImage"/>
11175
[HttpGet("history/image")]
11276
[Produces("image/jpeg")]
113-
[ProducesResponseType(StatusCodes.Status200OK)]
114-
[ProducesResponseType(StatusCodes.Status404NotFound)]
115-
public async Task<IActionResult> GetHistoryImage([FromQuery] int index = 1, [FromQuery] DoorBirdEventType? eventType = null)
77+
public async Task<Results<FileContentHttpResult, NotFound<string>>> GetHistoryImage([FromQuery] int index = 1, [FromQuery] DoorBirdEventType? eventType = null)
11678
{
11779
var bytes = await doorBirdQuerySvc.GetHistoryImage(index, eventType);
11880
return bytes is null
119-
? NotFound("No history image found.")
120-
: File(bytes, "image/jpeg");
81+
? TypedResults.NotFound("No history image found.")
82+
: TypedResults.File(bytes, "image/jpeg");
12183
}
12284

12385
/// <inheritdoc cref="DoorBirdQueryService.ListNotifications"/>
12486
[HttpGet("notifications")]
125-
[ProducesResponseType<NotificationListResponse>(StatusCodes.Status200OK)]
126-
public async Task<IActionResult> ListNotifications()
127-
{
128-
var result = await doorBirdQuerySvc.ListNotifications();
129-
return Ok(result);
130-
}
87+
public async Task<Ok<NotificationListResponse>> ListNotifications()
88+
=> TypedResults.Ok(await doorBirdQuerySvc.ListNotifications());
13189

13290
/// <inheritdoc cref="DoorBirdQueryService.SubscribeNotification"/>
13391
[HttpPost("notifications/subscribe")]
134-
[ProducesResponseType(StatusCodes.Status200OK)]
135-
public async Task<IActionResult> SubscribeNotification([FromQuery] string subscriberUrl, [FromQuery] string eventType, [FromQuery] int? relaxation = null)
136-
{
137-
var result = await doorBirdQuerySvc.SubscribeNotification(subscriberUrl, eventType, relaxation);
138-
return Ok(result);
139-
}
92+
public async Task<Ok<bool>> SubscribeNotification([FromQuery] string subscriberUrl, [FromQuery] string eventType, [FromQuery] int? relaxation = null)
93+
=> TypedResults.Ok(await doorBirdQuerySvc.SubscribeNotification(subscriberUrl, eventType, relaxation));
14094

14195
/// <inheritdoc cref="DoorBirdQueryService.UnsubscribeNotification"/>
14296
[HttpPost("notifications/unsubscribe")]
143-
[ProducesResponseType(StatusCodes.Status200OK)]
144-
public async Task<IActionResult> UnsubscribeNotification([FromQuery] string subscriberUrl, [FromQuery] string eventType)
145-
{
146-
var result = await doorBirdQuerySvc.UnsubscribeNotification(subscriberUrl, eventType);
147-
return Ok(result);
148-
}
97+
public async Task<Ok<bool>> UnsubscribeNotification([FromQuery] string subscriberUrl, [FromQuery] string eventType)
98+
=> TypedResults.Ok(await doorBirdQuerySvc.UnsubscribeNotification(subscriberUrl, eventType));
14999

150100
#region Event callbacks
151101

152102
/// <inheritdoc cref="DoorBirdQueryService.SendAlert"/>
153103
[AllowAnonymous]
154104
[HttpGet("event/ring")]
155-
[ProducesResponseType(StatusCodes.Status200OK)]
156-
public async Task<IActionResult> DoorBirdRing()
105+
public async Task<Ok<string>> DoorBirdRing()
157106
{
158107
await doorBirdQuerySvc.SendAlert(DoorBirdEventType.Doorbell);
159-
return Ok("ok");
108+
return TypedResults.Ok("ok");
160109
}
161110

162111
/// <inheritdoc cref="DoorBirdQueryService.SendAlert"/>
163112
[AllowAnonymous]
164113
[HttpGet("event/motion")]
165-
[ProducesResponseType(StatusCodes.Status200OK)]
166-
public async Task<IActionResult> DoorBirdMotion()
114+
public async Task<Ok<string>> DoorBirdMotion()
167115
{
168116
await doorBirdQuerySvc.SendAlert(DoorBirdEventType.MotionSensor);
169-
return Ok("ok");
117+
return TypedResults.Ok("ok");
170118
}
171119

172120
/// <inheritdoc cref="DoorBirdQueryService.SendAlert"/>
173121
[AllowAnonymous]
174122
[HttpGet("event/rfid")]
175-
[ProducesResponseType(StatusCodes.Status200OK)]
176-
public async Task<IActionResult> DoorBirdRfid()
123+
public async Task<Ok<string>> DoorBirdRfid()
177124
{
178125
await doorBirdQuerySvc.SendAlert(DoorBirdEventType.Rfid);
179-
return Ok("ok");
126+
return TypedResults.Ok("ok");
180127
}
181128

182129
#endregion

src/CasCap.Api.DoorBird/GlobalUsings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
global using CasCap.Services;
1212
global using Microsoft.AspNetCore.Authorization;
1313
global using Microsoft.AspNetCore.Http;
14+
global using Microsoft.AspNetCore.Http.HttpResults;
1415
global using Microsoft.AspNetCore.Mvc;
1516
global using Microsoft.Extensions.Configuration;
1617
global using Microsoft.Extensions.DependencyInjection;

src/CasCap.Api.EdgeHardware/Controllers/EdgeHardwareController.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ public class EdgeHardwareController(IEdgeHardwareQueryService edgeHardwareQueryS
1212
{
1313
/// <inheritdoc cref="EdgeHardwareQueryService.GetLatestSnapshots"/>
1414
[HttpGet]
15-
[ProducesResponseType<List<EdgeHardwareSnapshot>>(StatusCodes.Status200OK)]
16-
public async Task<IActionResult> GetLatestSnapshots()
17-
=> Ok(await edgeHardwareQuerySvc.GetLatestSnapshots());
15+
public async Task<Ok<List<EdgeHardwareSnapshot>>> GetLatestSnapshots()
16+
=> TypedResults.Ok(await edgeHardwareQuerySvc.GetLatestSnapshots());
1817

1918
/// <inheritdoc cref="EdgeHardwareQueryService.GetEvents"/>
2019
[HttpGet("events")]
21-
[ProducesResponseType(StatusCodes.Status200OK)]
22-
public IActionResult GetEvents(int limit = 100)
23-
=> Ok(edgeHardwareQuerySvc.GetEvents(limit));
20+
public Ok<IAsyncEnumerable<EdgeHardwareEvent>> GetEvents(int limit = 100)
21+
=> TypedResults.Ok(edgeHardwareQuerySvc.GetEvents(limit));
2422

2523
}

src/CasCap.Api.EdgeHardware/GlobalUsings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
global using CasCap.Services;
99
global using Microsoft.AspNetCore.Authorization;
1010
global using Microsoft.AspNetCore.Http;
11+
global using Microsoft.AspNetCore.Http.HttpResults;
1112
global using Microsoft.AspNetCore.Mvc;
1213
global using Microsoft.Extensions.Configuration;
1314
global using Microsoft.Extensions.DependencyInjection;

src/CasCap.Api.Fronius/Controllers/FroniusController.cs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,49 +12,41 @@ public class FroniusController(IFroniusQueryService froniusQuerySvc) : Controlle
1212
{
1313
/// <inheritdoc cref="FroniusQueryService.GetInverterSnapshot"/>
1414
[HttpGet]
15-
[ProducesResponseType<InverterSnapshot>(StatusCodes.Status200OK)]
16-
public async Task<IActionResult> GetInverterSnapshot()
17-
=> Ok(await froniusQuerySvc.GetInverterSnapshot());
15+
public async Task<Ok<InverterSnapshot>> GetInverterSnapshot()
16+
=> TypedResults.Ok(await froniusQuerySvc.GetInverterSnapshot());
1817

1918
/// <inheritdoc cref="FroniusQueryService.GetInverterReadings"/>
2019
[HttpGet("readings")]
21-
[ProducesResponseType(StatusCodes.Status200OK)]
22-
public IActionResult GetInverterReadings(int limit = 100)
23-
=> Ok(froniusQuerySvc.GetInverterReadings(limit));
20+
public Ok<IAsyncEnumerable<FroniusEvent>> GetInverterReadings(int limit = 100)
21+
=> TypedResults.Ok(froniusQuerySvc.GetInverterReadings(limit));
2422

2523
/// <inheritdoc cref="FroniusQueryService.GetPowerFlowRealtimeData"/>
2624
[HttpGet("powerflow")]
27-
[ProducesResponseType<PowerFlowRealtimeData>(StatusCodes.Status200OK)]
28-
public async Task<IActionResult> GetPowerFlowRealtimeData()
29-
=> Ok(await froniusQuerySvc.GetPowerFlowRealtimeData());
25+
public async Task<Ok<PowerFlowRealtimeData>> GetPowerFlowRealtimeData()
26+
=> TypedResults.Ok(await froniusQuerySvc.GetPowerFlowRealtimeData());
3027

3128
/// <inheritdoc cref="FroniusQueryService.GetInverterRealtimeData"/>
3229
[HttpGet("inverter/realtimedata")]
33-
[ProducesResponseType<CommonInverterData>(StatusCodes.Status200OK)]
34-
public async Task<IActionResult> GetInverterRealtimeData([FromQuery] string dataCollection = "CommonInverterData")
35-
=> Ok(await froniusQuerySvc.GetInverterRealtimeData(dataCollection));
30+
public async Task<Ok<CommonInverterData>> GetInverterRealtimeData([FromQuery] string dataCollection = "CommonInverterData")
31+
=> TypedResults.Ok(await froniusQuerySvc.GetInverterRealtimeData(dataCollection));
3632

3733
/// <inheritdoc cref="FroniusQueryService.GetInverterInfo"/>
3834
[HttpGet("inverter/info")]
39-
[ProducesResponseType(StatusCodes.Status200OK)]
40-
public async Task<IActionResult> GetInverterInfo()
41-
=> Ok(await froniusQuerySvc.GetInverterInfo());
35+
public async Task<Ok<Dictionary<string, InverterInfoEntry>>> GetInverterInfo()
36+
=> TypedResults.Ok(await froniusQuerySvc.GetInverterInfo());
4237

4338
/// <inheritdoc cref="FroniusQueryService.GetActiveDeviceInfo"/>
4439
[HttpGet("devices")]
45-
[ProducesResponseType<ActiveDeviceInfoData>(StatusCodes.Status200OK)]
46-
public async Task<IActionResult> GetActiveDeviceInfo()
47-
=> Ok(await froniusQuerySvc.GetActiveDeviceInfo());
40+
public async Task<Ok<ActiveDeviceInfoData>> GetActiveDeviceInfo()
41+
=> TypedResults.Ok(await froniusQuerySvc.GetActiveDeviceInfo());
4842

4943
/// <inheritdoc cref="FroniusQueryService.GetMeterRealtimeData"/>
5044
[HttpGet("meter")]
51-
[ProducesResponseType(StatusCodes.Status200OK)]
52-
public async Task<IActionResult> GetMeterRealtimeData([FromQuery] string scope = "System", [FromQuery] int? deviceId = null)
53-
=> Ok(await froniusQuerySvc.GetMeterRealtimeData(scope, deviceId));
45+
public async Task<Ok<Dictionary<string, MeterRealtimeData>>> GetMeterRealtimeData([FromQuery] string scope = "System", [FromQuery] int? deviceId = null)
46+
=> TypedResults.Ok(await froniusQuerySvc.GetMeterRealtimeData(scope, deviceId));
5447

5548
/// <inheritdoc cref="FroniusQueryService.GetStorageRealtimeData"/>
5649
[HttpGet("storage")]
57-
[ProducesResponseType(StatusCodes.Status200OK)]
58-
public async Task<IActionResult> GetStorageRealtimeData([FromQuery] string scope = "System", [FromQuery] int? deviceId = null)
59-
=> Ok(await froniusQuerySvc.GetStorageRealtimeData(scope, deviceId));
50+
public async Task<Ok<Dictionary<string, StorageRealtimeData>>> GetStorageRealtimeData([FromQuery] string scope = "System", [FromQuery] int? deviceId = null)
51+
=> TypedResults.Ok(await froniusQuerySvc.GetStorageRealtimeData(scope, deviceId));
6052
}

0 commit comments

Comments
 (0)