using MoonCore.Attributes; using MoonCore.Helpers; using MoonCore.Models; using MoonlightServers.Shared.Http.Requests.Client.Servers; using MoonlightServers.Shared.Http.Requests.Client.Servers.Variables; using MoonlightServers.Shared.Http.Responses.Client.Servers; using MoonlightServers.Shared.Http.Responses.Client.Servers.Variables; namespace MoonlightServers.Frontend.Services; [Scoped] public class ServerService { private readonly HttpApiClient HttpApiClient; public ServerService(HttpApiClient httpApiClient) { HttpApiClient = httpApiClient; } public async Task> GetServers(int page, int perPage) { return await HttpApiClient.GetJson>( $"api/client/servers?page={page}&pageSize={perPage}" ); } public async Task> GetSharedServers(int page, int perPage) { return await HttpApiClient.GetJson>( $"api/client/servers/shared?page={page}&pageSize={perPage}" ); } public async Task GetServer(int serverId) { return await HttpApiClient.GetJson( $"api/client/servers/{serverId}" ); } public async Task GetStatus(int serverId) { return await HttpApiClient.GetJson( $"api/client/servers/{serverId}/status" ); } public async Task GetLogs(int serverId) { return await HttpApiClient.GetJson( $"api/client/servers/{serverId}/logs" ); } public async Task GetStats(int serverId) { return await HttpApiClient.GetJson( $"api/client/servers/{serverId}/stats" ); } public async Task RunCommand(int serverId, string command) { await HttpApiClient.Post( $"api/client/servers/{serverId}/command", new ServerCommandRequest() { Command = command } ); } public async Task GetWebSocket(int serverId) { return await HttpApiClient.GetJson( $"api/client/servers/{serverId}/ws" ); } public async Task Install(int serverId) { await HttpApiClient.Post( $"api/client/servers/{serverId}/install" ); } #region Power actions public async Task Start(int serverId) { await HttpApiClient.Post( $"api/client/servers/{serverId}/start" ); } public async Task Stop(int serverId) { await HttpApiClient.Post( $"api/client/servers/{serverId}/stop" ); } public async Task Kill(int serverId) { await HttpApiClient.Post( $"api/client/servers/{serverId}/kill" ); } #endregion #region Variables public async Task> GetVariables(int serverId, int page, int pageSize) { return await HttpApiClient.GetJson>( $"api/client/servers/{serverId}/variables?page={page}&pageSize={pageSize}" ); } public async Task UpdateVariables(int serverId, UpdateServerVariableRangeRequest request) { await HttpApiClient.Patch( $"api/client/servers/{serverId}/variables", request ); } public async Task UpdateVariable(int serverId, UpdateServerVariableRequest request) { await HttpApiClient.Put( $"api/client/servers/{serverId}/variables", request ); } #endregion }