Files
acc-server-manager/local/service/api.go
Fran Jurmanović d5140783ca get server by id
2025-02-13 01:09:16 +01:00

113 lines
2.8 KiB
Go

package service
import (
"acc-server-manager/local/model"
"acc-server-manager/local/repository"
"acc-server-manager/local/utl/common"
"errors"
"strings"
"github.com/gofiber/fiber/v2"
)
type ApiService struct {
repository *repository.ApiRepository
serverRepository *repository.ServerRepository
}
func NewApiService(repository *repository.ApiRepository,
serverRepository *repository.ServerRepository) *ApiService {
return &ApiService{
repository: repository,
serverRepository: serverRepository,
}
}
// GetFirst
// Gets first row from API table.
//
// Args:
// context.Context: Application context
// Returns:
// string: Application version
func (as ApiService) GetFirst(ctx *fiber.Ctx) *model.ApiModel {
return as.repository.GetFirst(ctx.UserContext())
}
func (as ApiService) GetStatus(ctx *fiber.Ctx) (string, error) {
serviceName, err := as.GetServiceName(ctx)
if err != nil {
return "", err
}
status, err := as.StatusServer(serviceName)
return status, err
}
func (as ApiService) ApiStartServer(ctx *fiber.Ctx) (string, error) {
serviceName, err := as.GetServiceName(ctx)
if err != nil {
return "", err
}
return as.StartServer(serviceName)
}
func (as ApiService) ApiStopServer(ctx *fiber.Ctx) (string, error) {
serviceName, err := as.GetServiceName(ctx)
if err != nil {
return "", err
}
return as.StopServer(serviceName)
}
func (as ApiService) ApiRestartServer(ctx *fiber.Ctx) (string, error) {
serviceName, err := as.GetServiceName(ctx)
if err != nil {
return "", err
}
return as.RestartServer(serviceName)
}
func (as ApiService) StatusServer(serviceName string) (string, error) {
return ManageService(serviceName, "status")
}
func (as ApiService) StartServer(serviceName string) (string, error) {
return ManageService(serviceName, "start")
}
func (as ApiService) StopServer(serviceName string) (string, error) {
return ManageService(serviceName, "stop")
}
func (as ApiService) RestartServer(serviceName string) (string, error) {
return ManageService(serviceName, "restart")
}
func ManageService(serviceName string, action string) (string, error) {
output, err := common.RunElevatedCommand(action, serviceName)
if err != nil {
return "", err
}
return strings.ReplaceAll(output, "\x00", ""), nil
}
func (as ApiService) GetServiceName(ctx *fiber.Ctx) (string, error) {
var server *model.Server
serviceName, ok := ctx.Locals("service").(string)
if !ok || serviceName == "" {
serverId, ok2 := ctx.Locals("serverId").(int)
if !ok2 || serverId == 0 {
return "", errors.New("service name missing")
}
server = as.serverRepository.GetFirst(ctx.UserContext(), serverId)
} else {
server = as.serverRepository.GetFirstByServiceName(ctx.UserContext(), serviceName)
}
if server == nil {
return "", fiber.NewError(404, "Server not found")
}
return server.ServiceName, nil
}